8

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))))

しかし、私は2つのことで混乱しています:

  1. 場合によっては負の値が表示されますが、これは正しいですか?
  2. 62行目、63行目、64行目と混同しています。

コード:

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

TFIDF は最初のドキュメントのみで計算する必要がありますか?

4

2 に答える 2

2

問題の単語がコレクション内のすべてのドキュメントに含まれている場合、1+ の変更は負の値になります。0 < (x / (1 + x)) < 1 はすべての x > 0 に対して成り立つため、負の対数になります。

私の意見では、存在しない単語の正しい IDF は無限または未定義ですが、分母と分子に 1+ を追加すると、存在しない単語の IDF は既存の単語よりもわずかに高くなり、すべてのドキュメントに存在する単語の IDF は高くなります。ゼロの。どちらの場合も、おそらくコードでうまく機能します。

于 2013-11-13T17:04:41.283 に答える