TFIDF计算混乱

bad*_*0re 5 python text-processing information-retrieval data-mining tf-idf

我在互联网上找到以下代码来计算TFIDF:

https://github.com/timtrueman/tf-idf/blob/master/tf-idf.py
Run Code Online (Sandbox Code Playgroud)

我在函数def idf(word,documentList)中添加了"1+",所以我不会被0除错:

return math.log(len(documentList) / (1 + float(numDocsContaining(word,documentList))))
Run Code Online (Sandbox Code Playgroud)

但我对两件事感到困惑:

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

码:

 documentNumber = 0
  for word in documentList[documentNumber].split(None):
       words[word] = tfidf(word,documentList[documentNumber],documentList)
Run Code Online (Sandbox Code Playgroud)

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

Fre*_*Foo 11

  1. 不.Tf-idf是tf,非负值,乘以idf,非负值,所以它永远不会是负数.这段代码似乎正在实现多年来一直在维基百科上的tf-idf错误定义(在此期间已经修复).

  • 我迟到了 5 年,希望你仍然使用 SO。为什么 idf 不能是 -ve?n < 1 的日志始终为 -ve,并且 idf = log_e(文档总数/其中包含术语 t 的文档数)。因此,idf 很可能是 -ve。我缺少什么吗?PS 进一步检查,似乎用户已经离开 SO ¯\_(ツ)_/¯ (3认同)
  • 从随机github网站复制代码的另一个例子不是一个好主意......它可能是来自维基百科的破损副本.:-) (2认同)