使用HBase获取数据,使用Mahout计算文本相似度

3
在我的项目中,我们正在尝试计算一组文档的文本相似度,但我遇到了两个问题。
1. 我不想重新计算我之前已经计算过的文档的词频。例如,我有10个文档,并且已经为所有10个文档计算了词频和逆文档频率。然后我获得了2个新文档。现在我不想重新计算已存在的10个文档的词频,但是想要计算新的2个文档的词频,然后使用所有12个文档的词频来计算这12个文档的IDF。 如何在不重新计算现有文档的TF的情况下计算所有文档的IDF? 2. 文档数量可能会增加,这意味着使用内存方法(InMemoryBayesDatastore)可能会变得麻烦。我想要的是将所有文档的TF保存在HBASE表中,当新文档到达时,计算新文档的TF并将其保存在HBASE表中,然后我使用这个HBASE表来获取所有文档的TF以计算IDF。 如何使用HBase提供数据给Mahout的文本相似度,而不是从序列文件中获取数据?
1个回答

1
我猜在你的MR工作中,你正在从HDFS读取并输出到Hbase。如果我正确理解了你的问题,我的建议是为每个文档计算TF,并将Term存储为行键,限定符可以是documentID,值可以是频率(这只是你模式的一个建议)。你需要为每个文档执行1个MR作业,并且每个文档只需要运行一次该作业。
当每个文档到达时,请对其进行分析。
然后运行最终的MR作业,以基于每个术语(即每行)比较所有文档。这适用于特定术语,但对于“相似术语”会变得复杂。然后,您需要运行某种算法,考虑到术语之间的Levenshtein距离,这可能会变得复杂。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接