#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 удаляет точки и запятые из чисел.