我在R.创建TermDocumentMatrix
从tm
库TermDocumentMatrix创建稀疏矩阵它看起来是这样的:从
> inspect(freq.terms)
A document-term matrix (19 documents, 214 terms)
Non-/sparse entries: 256/3810
Sparsity : 94%
Maximal term length: 19
Weighting : term frequency (tf)
Terms
Docs abundant acid active adhesion aeropyrum alternative
1 0 0 1 0 0 0
2 0 0 0 0 0 0
3 0 0 0 1 0 0
4 0 0 0 0 0 0
5 0 0 0 0 0 0
6 0 1 0 0 0 0
7 0 0 0 0 0 0
8 0 0 0 0 0 0
9 0 0 0 0 0 0
10 0 0 0 0 1 0
11 0 0 1 0 0 0
12 0 0 0 0 0 0
13 0 0 0 0 0 0
14 0 0 0 0 0 0
15 1 0 0 0 0 0
16 0 0 0 0 0 0
17 0 0 0 0 0 0
18 0 0 0 0 0 0
19 0 0 0 0 0 1
这仅仅是一个矩阵的一个小样本;实际上我有214个术语。在小范围内,这很好。如果我想我的TermDocumentMatrix
转换成普通矩阵,我会做:
data.matrix <- as.matrix(freq.terms)
不过是我上面显示的数据仅仅是我的整体数据的子集。我的整体数据可能至少有10,000个条款。当我尝试从整体数据的TDM,我跑了一个错误:
> Error cannot allocate vector of size n Kb
从这里
所以,我期待为寻找高效的内存分配我的TDM的替代方式。
我试图将我的TDD转换为Matrix
库中的稀疏矩阵,但遇到了同样的问题。
此时我有什么替代方案?我觉得我应该要研究的一个:
我已经试验了两个函数库的功能,但似乎无法实现任何实质性的功能。有谁知道最好的方法是什么?我花了很长时间摆弄这件事,我想我会问比我自己有更多经验的人使用大型数据集,然后再浪费更多时间走错方向。
编辑:改变10,00到10,000。谢谢@nograpes。
我想你的意思是10,000条款。你在看多少个文件?我认为在这里做一些预处理是最容易的:在创建完整的矩阵之前,先去掉一些非常罕见的术语。然后,您可以删除与您试图从数据中提取的任何内容相关性较低的术语。 – nograpes
@nograpes是10,000条款我现在编辑它。做了一些进一步的阅读(尤其是[这里](http://stackoverflow.com/questions/6860715/converting-a-document-term-matrix-into-a-matrix-with-lots-of-data))我认为你是对的;唯一可行的方法是从我的矩阵中删除一些非基本术语。我想我的担心是,将来我可能会使用更大的数据集;至少有10,000条我的条件是必不可少的(不稀疏)会发生什么?无论哪种方式感谢您的评论。 – user1988898
同现集中有多少个非零条目?我用Matrix(稀疏)软件包得到了很好的结果,其中N大约为20Mil IIRC。我打算下次尝试使用data.table。 –