我将大约50,000行varchar数据转换为语料库,然后使用TM包清理所述语料库,获取停用词,标点符号和数字。
然后我将其转换为TermDocumentMatrix并使用函数findFreqTerms和findMostFreqTerms来运行文本分析。 findMostFreqTerms返回公共单词及其在数据中显示的次数。
但是,我想使用一个函数来搜索" word"并返回多少次" word"出现在TermDocumentMatrix中。
TM中是否有功能可以实现这一目标?我是否必须将数据更改为data.frame并使用其他包和&功能
答案 0 :(得分:1)
由于您没有给出可重复的示例,我将使用crude
包中提供的tm
数据集给出一个。
你可以(至少)以两种不同的方式做到这一点。但是任何将稀疏矩阵变成密集矩阵的东西都会占用大量内存。所以我会给你两个选择。第一个是更友好的内存,因为它使用了稀疏的tdm矩阵。第二个,首先在创建频率向量之前将tdm转换为密集矩阵。
library(tm)
data("crude")
crude <- as.VCorpus(crude)
crude <- tm_map(crude, stripWhitespace)
crude <- tm_map(crude, removePunctuation)
crude <- tm_map(crude, content_transformer(tolower))
crude <- tm_map(crude, removeWords, stopwords("english"))
tdm <- TermDocumentMatrix(crude)
# Making use of the fact that a tdm or dtm is a simple_triplet_matrix from slam
my_func <- function(data, word){
slam::row_sums(data[data$dimnames$Terms == word, ])
}
my_func(tdm, "crude")
crude
21
my_func(tdm, "oil")
oil
85
# turn tdm into dense matrix and create frequency vector.
freq <- rowSums(as.matrix(tdm))
freq["crude"]
crude
21
freq["oil"]
oil
85
编辑: 根据评论要求:
# all words starting with cru. Adjust regex to find what you need.
freq[grep("^cru", names(freq))]
crucial crude
2 21
# separate words
freq[c("crude", "oil")]
crude oil
21 85