R中的文本挖掘内存管理

时间:2017-11-21 13:33:20

标签: r text-mining

我正在使用160 MB的文本文件并进行数据挖掘,但似乎有一次我将其转换为矩阵以了解单词频率然后要求太多内存,有人可以帮助我吗

> dtm <- DocumentTermMatrix(clean)
> dtm
<<DocumentTermMatrix (documents: 472029, terms: 171548)>>
Non-/sparse entries: 3346670/80972284222
Sparsity           : 100%
Maximal term length: 126
Weighting          : term frequency (tf)
> as.matrix(dtm)
  

错误:无法分配大小为603.3 Gb的矢量

1 个答案:

答案 0 :(得分:2)

@Vineet这里的数学表明为什么R试图分配603Gb将文档术语矩阵转换为非稀疏矩阵。 R中矩阵中的每个数字单元消耗8个字节。根据问题中文档术语矩阵的大小,数学看起来像:

> # 
> # calculate memory consumed by matrix
> #
> 
> rows <- 472029 # 
> cols <- 171548
> # memory in gigabytes
> rows * cols * 8 / (1024 * 1024 * 1024)
[1] 603.3155

如果你想计算单词频率,你最好生成1克,然后将它们汇总成一个频率分布。

使用quanteda包,代码看起来像这样。

words <- tokenize(...) 
ngram1 <- unlist(tokens_ngrams(words,n=1))
ngram1freq <- data.frame(table(ngram1))

的问候,

莱恩

2017-11-24更新:以下是quanteda软件包中的完整示例,该软件包使用textstat_frequency()函数从文档特征矩阵生成频率分布,以及{ {1}}排名前20位的功能。

这种方法不需要生成和生成。将n-gram聚合成频率分布。

barplot()

......以及由此产生的条形图:

enter image description here