【发布时间】:2017-03-12 13:18:33
【问题描述】:
这是一个相当具体的问题,但希望它也与其他人相关......
有谁知道是否有一种简单的方法可以通过 {tm} 包找到一个术语出现在语料库中的文档数量?
基本上,如果我有一个已构建的术语文档矩阵,我想查看特定术语的行有多稀疏,即矩阵中有多少列具有该行的非零值。 for 循环显然可以工作,但我正在处理一个非常大的矩阵,因此在循环中重复对它进行子集化会让 CPU 感到厌烦。
实际上...(对上述问题的回答会很好,但是)我真正想做的是为矩阵中的 每个 项获取该数字。现在我正在使用:
TDM <- TermDocumentMatrix(somecorpus)
terms <- TDM$dimnames$Terms
idf <- data.frame(term = terms, freq = numeric(length(terms)), stringsAsFactors = F)
for (i in 1:nrow(idf)) {
aa <- as.matrix(TDM[,idf$term[i]])
idf$freq[i] <- length(aa[aa[,1]>0, ])
}
这行得通,但需要 looong 时间。有更好的想法吗? 提前致谢, 赛斯
【问题讨论】:
-
使用
apply应该比for循环更快。不妨试试apply(idf, MARGIN = 1, FUN = function(x) {sum(ifelse(x > 0, 1, 0))})之类的方法,看看是否更快。 -
但是如果你提供一个样本语料库会更容易提供帮助。也许前 10 或 20 个文档使用
dput()。