从功能中找到术语的频率

时间:2018-11-01 01:14:02

标签: r rstudio frequency tm

我需要从我创建的函数中找到词频,该函数可以找到带有标点符号的词。

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 :(得分:0)

此任务更适合于Quanteda,而不是tm。您的函数将创建一个列表,并将所有内容从语料库中删除。使用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

答案 1 :(得分:0)

因此我无需使用Quanteda就可以正常工作:

m <- as.data.frame(table(unlist(terms)))
names(m) <- c("Terms", "Frequency")