使用 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
我将大约 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