Java:如何使用TF-IDF计算两个文档的相似度?

时间:2016-11-23 14:14:34

标签: java nlp tf-idf

我的目标是在两个文档(单词集合)之间找到相似性值。我已经找到了几个答案,如Documentationthis SO post,它们提供了实现此目的的Python库,但我无法理解该方法并使其适用于我的用例。

如果我理解正确,文档的TF-IDF是根据给定的术语计算的,对吧?这就是我如何从this SO post对此进行解释:" tf-idf ...是一个数字统计,旨在反映一个单词对文档的重要性"。

在我的情况下,我没有特定的搜索字词,我想与文档进行比较,但我有两个不同的文档。我假设我需要首先计算文档的向量,然后在这些向量之间取余弦。但是我发现的关于构造这些向量的所有答案总是假设一个搜索词,在我的案例中我没有。

无法解决这个问题,任何概念性帮助或实现此目的的Java库链接都将受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

我建议首先运行术语提取及其频率。请注意,词干还可以应用于提取的术语,以避免在后续cosine similarity计算过程中产生噪音。请参阅Java library for keywords extraction from input text SO帖子以获取更多帮助和想法。

然后,正如您自己提到的,对于每个术语,您将必须计算TF-IDF值,获取向量并计算余弦相似度。

在计算TF-IDF时,请注意1 + log(N/n) N 代表语料库总数,n代表包含该术语的语料库数量)公式更好,因为当TF不为0且IDF等于0时,它避免了这个问题。