Частоты терминов из VCorpus и DTM не совпадают

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

person No Ru    schedule 20.03.2019    source источник


Ответы (1)


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

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

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

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

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

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

person phiver    schedule 20.03.2019