我正在使用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的矢量
答案 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()
......以及由此产生的条形图: