r-为什么tf idf截断单词

  • 本文关键字:单词 idf tf r tf-idf
  • 更新时间 :
  • 英文 :


我有一个数据帧x,它是:

> str(x)
'data.frame':   117654 obs. of  2 variables:
$ text  : chr  "more about " ...
$ doc_id: chr  "Text 1" "Text 2" "Text 3" "Text 4" ...

我不能在这里用dput报告它,因为它太大了。我正在尝试估计TF-IDF,我写了代码:

library(dplyr)
library(janeaustenr)
library(tidytext)
book_words <- x %>%
mutate(text = as.character(text)) %>% 
unnest_tokens(output = word, input = text) %>%
count(doc_id, word, sort = TRUE)
book_words <- book_words %>%
bind_tf_idf(term = word, document = doc_id, n)
book_words<-book_words[order(book_words$tf_idf,decreasing=FALSE),]
book_words = book_words[!duplicated(book_words$word),]

无论如何,我注意到book_words中的一些单词似乎被截断了。例如:

doc_id          word n  tf      idf    tf_idf
792727  Text 33268     disposabl 1 1.0 11.67321 11.673214

我确信这是一个截断的术语,因为如果我运行:

x[grepl("^disposabl$",x$text),]

我没有得到任何行。

这种事发生在你身上吗?

从您的输出中,名称中似乎有前导空格。如果它只是"dispoabl",没有前导/尾随空格,我会期望

doc_id      word n tf      idf   tf_idf
792727 Text 33268 disposabl 1  1 11.67321 11.67321
###              ^         ^   one space each

但是你的输出显示

doc_id          word n  tf      idf    tf_idf
792727  Text 33268     disposabl 1 1.0 11.67321 11.673214
^^^^  four extra blanks

这意味着您的"^dispoabl$"限制性太强。尝试使用过滤(此处(

x[grepl("disposabl$",x$text),]

移除前导CCD_ 6并因此允许在CCD_。备选方案:

  • "\bdisposabl$"添加了一个单词边界,因此"adisposabl"不会匹配,但"a disposabl"仍然匹配
  • "^\s*disposabl$"要求任何前导都是空格
  • x[grepl("^disposabl$",trimws(x$text))]修剪空白,原来的图案会在这里工作

最新更新