大型术语文档矩阵/ simple_triplet_matrix 的行总和? tm 包

Posted

技术标签:

【中文标题】大型术语文档矩阵/ simple_triplet_matrix 的行总和? tm 包【英文标题】:Row sum for large term-document matrix / simple_triplet_matrix ?? tm package大型术语文档矩阵/ simple_triplet_matrix 的行总和? tm 包 【发布时间】:2014-03-22 04:47:40 【问题描述】:

所以我有一个非常大的术语文档矩阵:

> class(ph.DTM)
[1] "TermDocumentMatrix"    "simple_triplet_matrix"

> ph.DTM
A term-document matrix (109996 terms, 262811 documents)

Non-/sparse entries: 3705693/28904453063
Sparsity           : 100%
Maximal term length: 191 
Weighting          : term frequency (tf)

如何获得每个术语的 rowSum(频率)?我试过了:

> apply(ph.DTM, 1, sum)
Error in vector(typeof(x$v), nr * nc) : vector size cannot be NA
In addition: Warning message:
In nr * nc : NAs produced by integer overflow

显然,我知道removeSparseTerms

ph.DTM2 <- removeSparseTerms(ph.DTM, 0.99999)

这会稍微减小尺寸:

> ph.DTM2
A term-document matrix (28842 terms, 262811 documents)

Non-/sparse entries: 3612620/7576382242
Sparsity           : 100%
Maximal term length: 24 
Weighting          : term frequency (tf)

但我仍然无法对其应用任何与矩阵相关的函数:

> as.matrix(ph.DTM2)
Error in vector(typeof(x$v), nr * nc) : vector size cannot be NA
In addition: Warning message:
In nr * nc : NAs produced by integer overflow

我怎样才能在这个对象上得到一个简单的行总和?谢谢!!

【问题讨论】:

【参考方案1】:

好的,经过一番谷歌搜索,我发现了 slam 包,它启用了:

ph.DTM3 <- rollup(ph.DTM, 2, na.rm=TRUE, FUN = sum)

哪个有效。

【讨论】:

啊,这真是太有帮助了! 挖了一圈,发现了slam的row_sums函数,好像快了一点。【参考方案2】:

正如@badpanda 在其中一个 cmets 中所提到的,slam 现在具有用于稀疏数组的 row_sumscol_sums 函数:

slam::row_sums(dtm, na.rm = T)
slam::col_sums(tdm, na.rm = T)

【讨论】:

【参考方案3】:

我认为:

 rowSums(as.matrix(ph.DTM))

也可以。

【讨论】:

对于非常大的矩阵,这似乎会产生相同的错误。 @badpanda 如果没有“非常大”的定义,您的评论将毫无用处。 Ray Bao的回答也有用吗?请提供对其他人有用的具体信息。 Slam 的 row_sums 函数(根据 bskaggs)对我有用。我的 TDM 约为 300,000 个术语 x 100,000 个文档。 @TylerRinker 我正在尝试使用 rowSums 来执行此操作,但我收到错误消息“无法分配大小为 33.7 Gb 的向量”。我很惊讶矢量会这么大,但你能解释一下吗? dim(dtm) 返回 137090 x 32981

以上是关于大型术语文档矩阵/ simple_triplet_matrix 的行总和? tm 包的主要内容,如果未能解决你的问题,请参考以下文章

文档术语矩阵的频率分布图

文本挖掘——如何构建术语-文档矩阵

将术语-文档矩阵限制为最常见的一元组

如何在 Python 中将 PCA 用于术语文档矩阵?

将新文档添加到术语文档矩阵以进行相似度计算

术语文档矩阵中的SVD不能给出我想要的值