tf idf不相等,当两个文档中的tf相同时

Tf Idf not equal, when tf in two documents is the same

先说一下我对TfIdf度量的理解:

TF(t) =(术语 t 在文档中出现的次数)/(文档中的术语总数)

IDF(t) = log_e(文档总数/包含词条t的文档数)

my source, and good explanation

所以语料库中的每个单词都有 1 个 Idf 度量。

语料库中每个单词和每个文档的 Tf 'exists'。

假设一个词在2个文档中有Tf=1,那么两个词的TfIdf应该是一样的吧?

我想在 R 中检查一下,这里是我的代码:

library(tm)

data("crude")

DTM <- DocumentTermMatrix(crude,control=list(weighting=weightTf))
DTM2 <- DocumentTermMatrix(crude,control=list(weighting=weightTfIdf))

M <- as.matrix(DTM)
M2 <- as.matrix(DTM2)

    > M2[7:15,7:9]
     Terms
Docs  "if        "is       "may
  237   0 0.00000000 0.00000000
  242   0 0.00000000 0.00000000
  246   0 0.00000000 0.00000000
  248   0 0.01153447 0.01500669
  273   0 0.00000000 0.00000000
  349   0 0.00000000 0.00000000
  352   0 0.03650470 0.00000000
  353   0 0.00000000 0.00000000
  368   0 0.00000000 0.00000000
> M[7:15,7:9]
     Terms
Docs  "if "is "may
  237   0   0    0
  242   0   0    0
  246   0   0    0
  248   0   1    1
  273   0   0    0
  349   0   0    0
  352   0   1    0
  353   0   0    0
  368   0   0    0

为什么TfIdf不一样?我的谬误在哪里?

它们是不同的,因为您按 weightTf 对 DTM 进行加权,对 weightTfIdf 对 DTM2 进行加权。

因为 weightTfIdf 是标准化的,这会影响结果。通常,归一化意味着将 1 加到分母上以防止出现被零除的问题。