从函数中查找术语的频率

问题描述 投票:0回答:2

我需要从我创建的函数中找到术语的频率,以查找带有标点符号的术语。

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还是有更好的方法没有它?

谢谢!

r rstudio frequency tm
2个回答
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

0
投票

所以我没有使用quanteda就让它工作了:

m <- as.data.frame(table(unlist(terms)))
names(m) <- c("Terms", "Frequency")
© www.soinside.com 2019 - 2024. All rights reserved.