使用术语文档矩阵上的lapply来计算单词频率

时间:2015-03-18 19:40:03

标签: r lapply term-document-matrix

给定三个TermDocumentMatrix,text1,text2和text3,我想计算每个词的频率到一个数据帧并且rbind所有的数据帧。三个是样本 - 我有几百个现实,所以我需要功能化这个。

为一个TDM计算单词频率很容易:

apply(x, 1, sum)

rowSums(as.matrix(x))

我想列出一些TDM:

tdm_list <- Filter(function(x) is(x, "TermDocumentMatrix"), mget(ls()))

并为每个计算单词freq并将其放入数据框中:

data.frame(lapply(tdm_list, sum)) # this is wrong. it simply sums frequency of all words instead of frequency by each word.

然后再绑定:

do.call(rbind, df_list)

我无法弄清楚如何在TDM上使用lapply来计算字频率。

添加样本数据以使用:

require(tm)
text1 <- c("apple" , "love", "crazy", "peaches", "cool", "coke", "batman", "joker")
text2 <- c("omg", "#rstats" , "crazy", "cool", "bananas", "functions", "apple")
text3 <- c("Playing", "rstats", "football", "data", "coke", "caffeine", "peaches", "cool")

tdm1 <- TermDocumentMatrix(Corpus(VectorSource(text1)))
tdm2 <- TermDocumentMatrix(Corpus(VectorSource(text2)))
tdm3 <- TermDocumentMatrix(Corpus(VectorSource(text3)))

1 个答案:

答案 0 :(得分:2)

好的,我认为我拥有它,这实际上可能会帮助那些想要做同样事情的人。最后这很简单。

combineddf <- do.call(rbind, lapply(tdm_list, function (x) {
 data.frame(apply(x, 1, sum))
}))

上面列出了TermDocumentMatrices列表,并为数据框中的所有数据提供了字数,并对所有内容进行了修改。