gpt4 book ai didi

r - 有效地组合许多文档术语矩阵

转载 作者:行者123 更新时间:2023-12-01 23:56:30 24 4
gpt4 key购买 nike

如果我有一个包含许多文档术语矩阵的列表,我可以这样做来组合它们:

# setup for example
require(tm)
data("acq")
data("crude")
acq_dtm <- DocumentTermMatrix(acq)
crude_dtm <- DocumentTermMatrix(crude)
# make list of dtms
list_of_dtms <- list(acq_dtm, crude_dtm)
# convert list of dtms into one big dtm
dtms_combined_into_one <- do.call(tm:::c.DocumentTermMatrix, list_of_dtms)

但这看起来非常慢并且占用大量内存,并且在处理几千个 dtms 时是一个主要瓶颈。我怎样才能更快地组合它们并使用更少的内存?

由于 dtm 是一个稀疏矩阵,我想知道是否有人知道一种可能在这里有用的组合稀疏矩阵的方法。我是我的实际用例,我不是从语料库开始,而是从字数列表开始。

这是一个 rfiddle,以防对快速测试有用:http://www.r-fiddle.org/#/fiddle?id=SojC9ZlA (看起来很有前途,但我发现它不是很可靠,这种快速原型(prototype)设计有什么好用的,可以安装包吗?)

最佳答案

我不认为有一种简单的方法可以加快您已经在做的事情(也许有一种聪明的方法)。看一下 str(acq_dtm):

List of 6
$ i : int [1:4135] 1 1 1 1 1 1 1 1 1 1 ...
$ j : int [1:4135] 20 33 60 135 187 206 238 256 268 286 ...
$ v : num [1:4135] 1 1 2 1 1 2 2 6 1 1 ...
$ nrow : int 50
$ ncol : int 2103
$ dimnames:List of 2
..$ Docs : chr [1:50] "10" "12" "44" "45" ...
..$ Terms: chr [1:2103] "0.5165" "0.523" "0.8" "100" ...
- attr(*, "class")= chr [1:2] "DocumentTermMatrix" "simple_triplet_matrix"
- attr(*, "Weighting")= chr [1:2] "term frequency" "tf"

i 指向Docs组件中的一个文档编号,j 指向一个term(前几个term是数字)。 v 是文档 i 中术语 j 的频率。当你这样做的时候

c(acq_dtm, crude_dtm)

它不仅仅是堆叠一些稀疏矩阵(可以用 slam::abind_simple_sparse_array 完成);必须合并两个矩阵的 v 分量,然后必须重新计算相应的 ij 值。

如果我要对此进行更多研究,我可能会查看 slam 的文档。

tm:::c.TermDocumentMatrix 的代码也显示了 tm 如何进行此计算;不知道是否可以改进它。

关于r - 有效地组合许多文档术语矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23433743/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com