Частотные частоты от VCorpus и DTM не совпадают - PullRequest
0 голосов
/ 20 марта 2019

Я вычислил периодичность тестирования документов из корпусов и 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 

1 Ответ

0 голосов
/ 20 марта 2019

Разница в используемых методах.

str_extract_all с boundary("word") удаляет знаки препинания в предложениях. Превращение текста в матрицу терминов документа - нет. Чтобы получить одинаковые номера, вам нужно использовать DocumentTermMatrix(test1, control = list(removePunctuation = TRUE)).

Подробное объяснение:

В первом случае: «это текст». вернет четыре слова без точки. Во втором случае вы получите текст с точкой («текст») в матрице терминов документа. Теперь, если текст выглядит так: «текст и текст». первый случай будет считать «текст» = 2, а матрица термина документа будет считать его «текст» = 1 и «текст». = 1.

Использование removePunction удалит период, и количество будет равно.

Возможно, вы также захотите сначала удалить числа, потому что removePunctuation удаляет точки и запятые из чисел.

...