VCorpus 和 DTM 的词频不匹配
Term frequencies from VCorpus and DTM do not match
我计算了来自 Corpus 和 DTM 的测试文档的词频,如下所示。但他们彼此并不匹配。
谁能告诉我不匹配是从哪里来的?是不是我提取词频的方法不对?
library("tm")
library("stringr")
library("dplyr")
test1 <- VCorpus(DirSource("test_papers"))
mytable1 <- lapply(test1, function(x){str_extract_all(x, boundary("word"))}) %>% unlist() %>% table() %>% sort(decreasing=T)
test2 <- DocumentTermMatrix(test1)
mytable2 <- apply(test2, 2, sum) %>% sort(decreasing=T)
head(mytable1)
.
and of the to in on
148 116 111 69 61 54
head(mytable2)
and the this that are political
145 120 35 34 33 33
使用的方法不同。
str_extract_all
和 boundary("word")
删除句子中的标点符号。将文本变成文档术语矩阵不会。要获得相同的数字,您需要使用 DocumentTermMatrix(test1, control = list(removePunctuation = TRUE))
.
详细解释:
第一种情况:"this is a text." 会 return 没有句号的四个词。在第二种情况下,您会在文档术语矩阵中获得带有句点 ("text.") 的文本。现在,如果文本如下所示:"text and text." 第一种情况将计为 "text" = 2,文档术语矩阵将其计为 "text" = 1 和 "text." = 1。
使用 removePunction 将删除句点并且计数将相等。
您可能还想先删除数字,因为 removePunctuation 会从数字中删除点和逗号。
我计算了来自 Corpus 和 DTM 的测试文档的词频,如下所示。但他们彼此并不匹配。 谁能告诉我不匹配是从哪里来的?是不是我提取词频的方法不对?
library("tm")
library("stringr")
library("dplyr")
test1 <- VCorpus(DirSource("test_papers"))
mytable1 <- lapply(test1, function(x){str_extract_all(x, boundary("word"))}) %>% unlist() %>% table() %>% sort(decreasing=T)
test2 <- DocumentTermMatrix(test1)
mytable2 <- apply(test2, 2, sum) %>% sort(decreasing=T)
head(mytable1)
.
and of the to in on
148 116 111 69 61 54
head(mytable2)
and the this that are political
145 120 35 34 33 33
使用的方法不同。
str_extract_all
和 boundary("word")
删除句子中的标点符号。将文本变成文档术语矩阵不会。要获得相同的数字,您需要使用 DocumentTermMatrix(test1, control = list(removePunctuation = TRUE))
.
详细解释:
第一种情况:"this is a text." 会 return 没有句号的四个词。在第二种情况下,您会在文档术语矩阵中获得带有句点 ("text.") 的文本。现在,如果文本如下所示:"text and text." 第一种情况将计为 "text" = 2,文档术语矩阵将其计为 "text" = 1 和 "text." = 1。
使用 removePunction 将删除句点并且计数将相等。
您可能还想先删除数字,因为 removePunctuation 会从数字中删除点和逗号。