我一直在使用tm软件包运行一些文本分析。我的问题是创建一个列表与单词和他们的频率相关联的相同
library(tm)
library(RWeka)
txt <- read.csv("HW.csv",header=T)
df <- do.call("rbind", lapply(txt, as.data.frame))
names(df) <- "text"
myCorpus <- Corpus(VectorSource(df$text))
myStopwords <- c(stopwords('english'),"originally", "posted")
myCorpus <- tm_map(myCorpus, removeWords, myStopwords)
#building the TDM
btm <- function(x) NGramTokenizer(x, Weka_control(min = 3, max = 3))
myTdm <- TermDocumentMatrix(myCorpus, control = list(tokenize = btm))
字符串
我通常使用下面的代码来生成频率范围内的单词列表
frq1 <- findFreqTerms(myTdm, lowfreq=50)
型
有没有什么方法可以自动化,这样我们就可以得到一个包含所有单词及其频率的框架?
我面临的另一个问题是将术语文档矩阵转换为数据框架。当我处理大量数据样本时,我遇到了内存错误。有简单的解决方案吗?
7条答案
按热度按时间2w3kk1z51#
试试这个
字符串
qij5mzcb2#
我在R中有以下几行,可以帮助创建单词频率并将它们放在一个表中,它读取.txt格式的文本文件并创建单词的频率,我希望这可以帮助任何感兴趣的人。
字符串
0vvn1miw3#
查看
findFreqTerms
的源代码,似乎函数slam::row_sums
在对术语-文档矩阵调用时会发挥作用。例如,尝试:字符串
4ngedf3f4#
根据您的需要,使用一些
tidyverse
函数可能是一个粗略的解决方案,在如何处理大写,标点符号和停用词方面提供了一些灵活性:字符串
mzsu5hc05#
字符串
似乎工作,以获得简单的频率。我用扫描,因为我有一个txt文件,但它应该与read.csv太。
fnx2tebb6#
apply(myTdm, 1, sum)
或rowSums(as.matrix(myTdm))
是否给予您想要的ngram计数?xt0899hw7#
使用
qdap
包:字符串
默认情况下,该函数只显示前20名,因此我们设置
top = Inf
。您可以将任何字符向量传递给stopwords
参数:c(tm::stopwords(), "other", "stop", "words")
。