我需要从我创建的函数中找到词频,该函数可以找到带有标点符号的词。
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还是没有它有更好的方法?
谢谢!
答案 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")