比较两个文档
Compare two documents
有一个很大的词典,就是组成这些文档的词汇表,每篇文档中只有一个词。我想将这些文件相互比较,计算一个值,在该值下我将声明两个文件非常不同,在该值之上,非常相似。
如果一个词在两个文档中都包含,但在其他文档中很少或根本不包含,则加强了两个文档的相似性,因为它是只在这两个文档中出现的唯一词。
如果一个词既包含在两个文档中,又经常出现在其他文档中,这会削弱两个文档的相似性,因为它是一个共同的词,不会使它们相似。
我应该使用哪种方法?特遣部队-以色列国防军?其他?
TF-IDF 无疑是一个好的开始。
您还可以通过考虑文档的文本长度来改进它。这就是库 Lucene 所做的。
Lucene通过考虑文档的长度扩展了TF-IDF公式,因为这更符合人类的直觉。毕竟,如果您在只有一个单词的文档中找到单词 "cat",那么与具有千个单词的文档中的单个 "cat" 相比,这个词会更相关。
好像是Lucene对TF-IDF采用了扩展公式:
log(numDocs / (docFreq + 1)) * sqrt(tf) * (1/sqrt(length))
numDocs = total number of documents
docFreq = in how many documents the word was found
tf = Term frequency in a specific document
length = How many words there are in the document
如今,Lucene 似乎已经进化为使用另一种称为 BM25 ("Best Match 25") 的算法。总体而言,该算法似乎比 TF-IDF 产生更好的结果。 Lucene中使用的BM25的公式好像是:
IDF * ((k + 1) * tf) / (k * (1.0 - b + b * (|d|/avgDl)) + tf)
k = constant (typically 1.2)
tf = term frequency
b = also a constant which tunes the influence of the document length
|d| = document length
avgDl = average document length
IDF = log ( numDocs / docFreq + 1) + 1
有关 Lucene 实现的更多详细信息,请查看这个很棒的 blog article。
有一个很大的词典,就是组成这些文档的词汇表,每篇文档中只有一个词。我想将这些文件相互比较,计算一个值,在该值下我将声明两个文件非常不同,在该值之上,非常相似。
如果一个词在两个文档中都包含,但在其他文档中很少或根本不包含,则加强了两个文档的相似性,因为它是只在这两个文档中出现的唯一词。
如果一个词既包含在两个文档中,又经常出现在其他文档中,这会削弱两个文档的相似性,因为它是一个共同的词,不会使它们相似。
我应该使用哪种方法?特遣部队-以色列国防军?其他?
TF-IDF 无疑是一个好的开始。
您还可以通过考虑文档的文本长度来改进它。这就是库 Lucene 所做的。
Lucene通过考虑文档的长度扩展了TF-IDF公式,因为这更符合人类的直觉。毕竟,如果您在只有一个单词的文档中找到单词 "cat",那么与具有千个单词的文档中的单个 "cat" 相比,这个词会更相关。
好像是Lucene对TF-IDF采用了扩展公式:
log(numDocs / (docFreq + 1)) * sqrt(tf) * (1/sqrt(length))
numDocs = total number of documents
docFreq = in how many documents the word was found
tf = Term frequency in a specific document
length = How many words there are in the document
如今,Lucene 似乎已经进化为使用另一种称为 BM25 ("Best Match 25") 的算法。总体而言,该算法似乎比 TF-IDF 产生更好的结果。 Lucene中使用的BM25的公式好像是:
IDF * ((k + 1) * tf) / (k * (1.0 - b + b * (|d|/avgDl)) + tf)
k = constant (typically 1.2)
tf = term frequency
b = also a constant which tunes the influence of the document length
|d| = document length
avgDl = average document length
IDF = log ( numDocs / docFreq + 1) + 1
有关 Lucene 实现的更多详细信息,请查看这个很棒的 blog article。