TFIDF计算混乱

时间:2013-05-20 11:33:53

标签: python data-mining text-processing information-retrieval tf-idf

我在网上找到了以下用于计算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))))

但我对两件事感到困惑:

  1. 在某些情况下我得到负值,这是正确的吗?
  2. 我对第62,63和64行感到困惑。
  3. 代码:

     documentNumber = 0
      for word in documentList[documentNumber].split(None):
           words[word] = tfidf(word,documentList[documentNumber],documentList)
    

    是否应仅在第一份文件上计算TFIDF?

2 个答案:

答案 0 :(得分:9)

  1. 否。 Tf-idf是tf,非负值,乘以idf,非负值,因此它永远不会是负数。这段代码似乎正在实现多年来一直在维基百科上的erroneous definition of tf-idf(在此期间它一直是fixed)。

答案 1 :(得分:0)

如果相关单词包含在集合中的每个文档中,则您的1+更改将导致负值。如0< (x /(1 + x))<对于所有x> 1,保持1; 0.这导致负对数。

在我看来,一个不存在的单词的正确IDF是无限的或未定义的,但是通过在分母和提名者中添加1+,不存在的单词将具有比任何现有单词略高的IDF,并且每个文档中存在的单词将IDF为零。这两种情况都可能适用于您的代码。