Кратные частоты от VCorpus и DTM не совпадают

#r #text-mining #tm #corpus

#r #интеллектуальный анализ текста #tm #corpus

Вопрос:

Я рассчитал кратность тестовых документов как из Corpus, так и из DTM, как показано ниже. Но они не совпадали друг с другом. Кто-нибудь может сказать мне, откуда взялось несоответствие? Это потому, что я использовал неправильные методы для извлечения частоты term?

 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:

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

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

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

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

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

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