3

在我的项目中,我们试图计算我面临两个问题的一组文档的文本相似度。

  1. 我不想重新计算我之前计算过的文档的词频。例如,我有 10 个文档,我计算了所有 10 个文档的词频和逆文档频率。然后我又得到了 2 个文件。现在我不想计算已经存在的 10 个文档的词频,而是想计算新出现的 2 个文档的 TF,然后将 TF 用于所有 12 个文档,并将 12 个文档的 IDF 计算为所有的。 如何在不重新计算现有文档的 TF 的情况下计算所有文档的 IDF?

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

4

1 回答 1

1

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

对您正在分析的每个文档执行此操作。

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

于 2012-07-04T04:51:11.297 回答