我需要从我创建的函数中找到术语的频率,以查找带有标点符号的术语。
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还是有更好的方法没有它?
谢谢!
这个任务更适合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
所以我没有使用quanteda就让它工作了:
m <- as.data.frame(table(unlist(terms)))
names(m) <- c("Terms", "Frequency")