Cap*_*ook 14 text memory-management r matrix mining
我们来做一些Text Mining
在这里,我站在一个文档术语矩阵(来自tm包)
dtm <- TermDocumentMatrix(
myCorpus,
control = list(
weight = weightTfIdf,
tolower=TRUE,
removeNumbers = TRUE,
minWordLength = 2,
removePunctuation = TRUE,
stopwords=stopwords("german")
))
Run Code Online (Sandbox Code Playgroud)
当我做的时候
typeof(dtm)
Run Code Online (Sandbox Code Playgroud)
我看到它是一个"列表",结构看起来像
Docs
Terms 1 2 ...
lorem 0 0 ...
ipsum 0 0 ...
... .......
Run Code Online (Sandbox Code Playgroud)
所以我试试了
wordMatrix = as.data.frame( t(as.matrix( dtm )) )
Run Code Online (Sandbox Code Playgroud)
这适用于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
Run Code Online (Sandbox Code Playgroud)
向量中的错误...:向量不能是NA附加:在nr*nc由整数溢出创建的NAs
所以我看了as.matrix,结果证明函数不知何故将它转换为带有as.vector的向量而不是矩阵.转换为向量但不是从向量到矩阵的转换.
你有什么建议可能是什么问题吗?
谢谢,船长
Jor*_*eys 17
整数溢出可以准确地告诉您问题所在:对于40000文档,您有太多数据.它是在转换为矩阵时问题从btw开始,如果你看一下底层函数的代码就可以看到:
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)
...
}
Run Code Online (Sandbox Code Playgroud)
这是错误消息引用的行.发生了什么,可以通过以下方式轻松模拟:
as.integer(40000 * 60000) # 40000 documents is 40000 rows in the resulting frame
[1] NA
Warning message:
NAs introduced by coercion
Run Code Online (Sandbox Code Playgroud)
该函数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))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22416 次 |
| 最近记录: |