我有一个数据帧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))]
修剪空白,原来的图案会在这里工作