2012-05-18 19 views
3

在我的项目中,我们正在尝试计算一组文档的文本相似性,这是我面临的两个问题。使用HBase获取数据以使用Mahout计算文本相似度

  1. 我不想重新计算我之前计算的文档的术语频率。例如我有10个文档,并且我计算了所有10个文档的术语频率和逆文档频率。然后我再获得2个文件。现在我不想计算已存在的10个文件的期限频率,但是想计算已经进入的新2的TF,然后对所有12个文件使用TF,并将12个文件的IDF计算为整个。 如何在不重新计算现有文档的TF的情况下计算所有文档的IDF?

  2. 文档数量可能会增加,这意味着使用内存方式(InMemoryBayesDatastore)可能会变得非常麻烦。我想要的是将所有文档的TF保存在HBASE表中,当新文档到达时,我计算新文档的TF,将它们保存在HBASE表中,然后使用此HBASE表获取所有TF计算IDF的文件。 如何使用HBase为Mahout的文本相似性提供数据,而不是从序列文件中提取数据?

回答

1

我假设你的MR作业正在读取HDFS格式并输出到Hbase。如果我正确理解你的问题,我建议计算每个文档的TF并将Term作为rowkey存储,限定符可以是documentID,值可以是频率(只是对模式的建议)。您必须为每个文档执行1次MR作业,并且每个文档只需运行一次该作业。

对于您到达时分析的每个文档都要这样做。

然后运行一个最终的MR作业来比较每个术语(即每行)一个基础的所有文档。这将适用于特定条款,但会因“类似条款”而变得复杂。那么你会想要运行某种算法,这可能会考虑到术语之间的Levenshtein距离,这可能很复杂。

相关问题