【发布时间】:2018-05-04 23:50:53
【问题描述】:
我正在使用一个 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 的向量
【问题讨论】:
-
找到如何直接从
dtm中提取你想要的频率?该对象似乎存在于内存中。你真的需要把它转换成一个大得离谱的矩阵吗? -
如您所见,dtm 是一个稀疏矩阵,零条目不存储为零,这样可以节省内存。只要您使用
as.matrix()进行转换,零条目就会用真零填充。因此,尽量避免这种转换并在稀疏矩阵上进行操作。你打算用 dtm 做什么? -
另一件事,您可能会使用 tf-idf 加权或其他加权选项来丢弃不重要的条款。这会显着减小矩阵的大小。
-
感谢您的反馈。我想找到最常用的单词并绘制直方图。让我试试建议的方式
-
如果你只寻找最常用的,你可以丢弃很多术语。例如,您可以计算 colSums 或 rowSums(取决于整体频率或文档频率是否更重要)并丢弃所有不满足阈值的术语。使用
Matrix包,这些函数应该可用于稀疏矩阵。
标签: r text-mining