我正在研究使用Ngrams的文本预测模型。我有一个文本文件(推文),我转换成DTM。 DTM是7.3Mb。我希望使用以下代码将其转换为Ngram;
createNgramTable <- function(x)
{
m <- matrix(nrow = x$ncol, ncol = 2)
m[,1] <- x$dimnames$Terms
m[,2] <- colSums(as.matrix(x))
colnames(m) <- c("ngram", "freq")
m <- m[order(m[,2], decreasing=TRUE),]
return(m)
}
此代码创建一个矩阵,其中术语为第1列,出现次数为第2列。然后对其进行排序以获得良好的度量。它适用于小型数据集,但是,当我在上面提到的DTM上运行它时,它会失败。 R尝试分配超过我必须执行此功能的8Gb RAM。我在做什么就是这样的记忆力,我怎么能避免这样做呢?
以下是DTM的str()
:
List of 6
$ i : int [1:226963] 1 1 1 2 2 2 2 2 2 2 ...
$ j : int [1:226963] 9142 22286 25985 5235 6822 8736 10336 15883
20888 22652 ...
$ v : num [1:226963] 1 1 1 1 1 1 2 1 1 1 ...
$ nrow : int 23601
$ ncol : int 44619
$ dimnames:List of 2
..$ Docs : chr [1:23601] "1" "2" "3" "4" ...
..$ Terms: chr [1:44619] "''iran" "''true" "''when" "'-)" ...
- attr(*, "class")= chr [1:2] "DocumentTermMatrix" "simple_triplet_matrix"
- attr(*, "weighting")= chr [1:2] "term frequency" "tf"
答案 0 :(得分:0)
如果没有更多信息,我不能说太多,但我的猜测是这些陈述中的任何一个:m[,2] <- colSums(as.matrix(x))
或m[order(m[,2], decreasing=TRUE),]
。
您可能需要考虑的一些问题是:您是否必须将其转换为矩阵?你必须通过一个清单吗?为什么不使用更精简的方法或像data.table这样的引用类型来节省内存?
希望这有帮助!