gpt4 book ai didi

r - 将文档术语矩阵转换为包含大量数据的矩阵会导致溢出

转载 作者:行者123 更新时间:2023-12-03 21:48:32 24 4
gpt4 key购买 nike

让我们做一些文本挖掘

在这里,我站在一个文档术语矩阵(来自 tm 包)

dtm <- TermDocumentMatrix(
myCorpus,
control = list(
weight = weightTfIdf,
tolower=TRUE,
removeNumbers = TRUE,
minWordLength = 2,
removePunctuation = TRUE,
stopwords=stopwords("german")
))

当我做一个
typeof(dtm)

我看到它是一个“列表”,结构看起来像
Docs
Terms 1 2 ...
lorem 0 0 ...
ipsum 0 0 ...
... .......

所以我尝试
wordMatrix = as.data.frame( t(as.matrix(  dtm )) ) 

这适用于 1000 个文档。

但是当我尝试使用 40000 时,它不再使用了。

我收到此错误:
Fehler in vector(typeof(x$v), nr * nc) : Vektorgröße kann nicht NA sein
Zusätzlich: Warnmeldung:
In nr * nc : NAs durch Ganzzahlüberlauf erzeugt

向量中的错误...:向量不能为 NA
额外的:
在整数溢出创建的 nr * nc NA


所以我查看了 as.matrix,结果发现该函数以某种方式将其转换为带有 as.vector 的向量,而不是矩阵。
转换为向量有效,但从向量到矩阵的转换无效。

你有什么建议可能是什么问题?

谢谢船长

最佳答案

整数溢出准确地告诉你问题是什么:有 40000 个文档,你有太多的数据。顺便说一句,问题是在转换为矩阵时开始的,如果您查看底层函数的代码,就可以看出:

class(dtm)
[1] "TermDocumentMatrix" "simple_triplet_matrix"

getAnywhere(as.matrix.simple_triplet_matrix)

A single object matching ‘as.matrix.simple_triplet_matrix’ was found
...
function (x, ...)
{
nr <- x$nrow
nc <- x$ncol
y <- matrix(vector(typeof(x$v), nr * nc), nr, nc)
...
}

这是错误消息引用的行。发生了什么,可以通过以下方式轻松模拟:
as.integer(40000 * 60000) # 40000 documents is 40000 rows in the resulting frame
[1] NA
Warning message:
NAs introduced by coercion

函数 vector()接受一个带有长度的参数,在本例中为 nr*nc如果这大于 appx。 2e9 ( .Machine$integer.max ),它将被 NA 替换。此 NA 不能作为 vector() 的参数有效.

底线:您遇到了 R 的限制。至于现在,在 64 位上工作对您没有帮助。你将不得不求助于不同的方法。一种可能性是继续使用您拥有的列表(dtm 是一个列表),使用列表操作选择您需要的数据并从那里开始。

PS:我制作了一个 dtm 对象
require(tm)
data("crude")
dtm <- TermDocumentMatrix(crude,
control = list(weighting = weightTfIdf,
stopwords = TRUE))

关于r - 将文档术语矩阵转换为包含大量数据的矩阵会导致溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6860715/

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