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

Find frequency of a custom word in R TermDocumentMatrix using TM package

我将大约 50,000 行 varchar 数据转换成一个语料库,然后使用 TM 包继续清理该语料库,去除停用词、标点符号和数字。

然后我将其转换为 TermDocumentMatrix 并使用函数 findFreqTerms 和 findMostFreqTerms 进行 运行 文本分析。 findMostFreqTerms return 常用词及其在数据中出现的次数。

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

TM中有没有实现这个功能的?我是否必须将我的数据更改为 data.frame 并使用不同的包和功能?

由于您没有给出可重现的示例,我将使用 tm 包中可用的 crude 数据集给出一个示例。

您可以(至少)通过 2 种不同的方式来完成。但是任何将稀疏矩阵变成密集矩阵的东西都会使用大量内存。所以我会给你2个选择。第一个对内存更友好,因为它使用稀疏 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