我在网上找到了以下用于计算TFIDF的代码:
https://github.com/timtrueman/tf-idf/blob/master/tf-idf.py
我在函数def idf(word,documentList)中添加了“1+”,所以我不会被0除错:
return math.log(len(documentList) / (1 + float(numDocsContaining(word,documentList))))
但我对两件事感到困惑:
代码:
documentNumber = 0
for word in documentList[documentNumber].split(None):
words[word] = tfidf(word,documentList[documentNumber],documentList)
是否应仅在第一份文件上计算TFIDF?
答案 0 :(得分:9)
答案 1 :(得分:0)
如果相关单词包含在集合中的每个文档中,则您的1+更改将导致负值。如0< (x /(1 + x))<对于所有x> 1,保持1; 0.这导致负对数。
在我看来,一个不存在的单词的正确IDF是无限的或未定义的,但是通过在分母和提名者中添加1+,不存在的单词将具有比任何现有单词略高的IDF,并且每个文档中存在的单词将IDF为零。这两种情况都可能适用于您的代码。