使用TM包在R TermDocumentMatrix中查找自定义单词的频率

时间:2018-05-07 21:25:21

标签: r tm corpus word-frequency term-document-matrix

我将大约50,000行varchar数据转换为语料库,然后使用TM包清理所述语料库,获取停用词,标点符号和数字。

然后我将其转换为TermDocumentMatrix并使用函数findFreqTerms和findMostFreqTerms来运行文本分析。 findMostFreqTerms返回公共单词及其在数据中显示的次数。

但是,我想使用一个函数来搜索" word"并返回多少次" word"出现在TermDocumentMatrix中。

TM中是否有功能可以实现这一目标?我是否必须将数据更改为data.frame并使用其他包和&功能

1 个答案:

答案 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