Найти частоту терминов из функции - PullRequest
0 голосов
/ 01 ноября 2018

Мне нужно найти частоту терминов из созданной мной функции, которая находит термины с пунктуацией в них.

library("tm")
my.text.location <- "C:/Users/*/"
newpapers <- VCorpus(DirSource(my.text.location))

Я читаю, затем выполняю функцию:

library("stringr")
punctterms <- function(x){str_extract_all(x, "[[:alnum:]]{1,}[[:punct:]]{1,}?[[:alnum:]]{1,}")}
terms <- lapply(newpapers, punctterms)

Теперь я заблудился относительно того, как я найду частоту для каждого термина в каждом файле. Я превращаю его в DTM или есть лучший способ без него?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Итак, я заставил его работать без использования Quanteda:

m <- as.data.frame(table(unlist(terms)))
names(m) <- c("Terms", "Frequency")
0 голосов
/ 01 ноября 2018

Это задание лучше подходит для квантеды, а не тм. Ваша функция создает список и удаляет все из корпуса. Используя Quanteda, вы можете просто использовать команды Quanteda, чтобы получить все, что вы хотите.

Поскольку вы не предоставили никаких воспроизводимых данных, я буду использовать набор данных, который поставляется с Quanteda. Комментарии над кодом объясняют, что происходит. Наиболее важной функцией в этом коде является dfm_select. Здесь вы можете использовать разнообразный набор шаблонов выбора, чтобы найти термины в тексте.

library(quanteda)

# load corpus
my_corpus <- corpus(data_corpus_inaugural)
# create document features (like document term matrix)
my_dfm <- dfm(my_corpus)

# dfm_select can use regex selections to select terms
my_dfm_punct <- dfm_select(my_dfm, 
                     pattern = "[[:alnum:]]{1,}[[:punct:]]{1,}?[[:alnum:]]{1,}",
                     selection = "keep",
                     valuetype = "regex")

# show frequency of selected terms.
head(textstat_frequency(my_dfm_punct))

          feature frequency rank docfreq group
1 fellow-citizens        39    1      19   all
2       america's        35    2      11   all
3 self-government        30    3      16   all
4         world's        24    4      15   all
5        nation's        22    5      13   all
6           god's        15    6      14   all
...