我尝试使用tm
对R中的大数据进行文本挖掘。
我经常遇到内存问题(例如can not allocation vector of size....
)并使用已建立的方法来解决这些问题,例如
memory.limit()
设置为最大值gc()
但是,当尝试在一百万左右的文本字段的向量上运行Corpus
时,我遇到的内存错误与平时略有不同,我不知道如何解决问题。错误是:
> ds <- Corpus(DataframeSource(dfs))
Error: memory exhausted (limit reached?)
我可以(并且应该)在源数据帧的行块上逐步运行Corpus
然后合并结果吗?有没有更有效的方法来运行它?
产生此错误的数据大小取决于运行它的计算机,但如果您使用内置的crude
数据集并复制文档直到它足够大,那么您可以复制错误。
更新
我一直试图尝试组合较小的corpa,即
test1 <- dfs[1:10000,]
test2 <- dfs[10001:20000,]
ds.1 <- Corpus(DataframeSource(test1))
ds.2 <- Corpus(DataframeSource(test2))
虽然我没有成功,但我确实发现tm_combine
supposed to solve this exact problem。唯一的问题是,出于某种原因,我的64位版本的R 3.1.1和最新版本的tm
无法找到函数tm_combine
。也许它出于某种原因被从包中删除了?我正在调查......
> require(tm)
> ds.12 <- tm_combine(ds.1,ds.2)
Error: could not find function "tm_combine"
答案 0 :(得分:2)
我不知道tm_combine
是否已被弃用,或者为什么在tm
命名空间中找不到它,但我确实通过在数据帧的较小块上使用Corpus
找到了解决方案合并它们。
This StackOverflow帖子在没有tm_combine
的情况下有一个简单的方法:
test1 <- dfs[1:100000,]
test2 <- dfs[100001:200000,]
ds.1 <- Corpus(DataframeSource(test1))
ds.2 <- Corpus(DataframeSource(test2))
#ds.12 <- tm_combine(ds.1,ds.2) ##Error: could not find function "tm_combine"
ds.12 <- c(ds.1,ds.2)
给你:
ds.12
<<VCorpus (documents: 200000, metadata (corpus/indexed): 0/0)>>
很抱歉在询问之前不要自己解决这个问题。我尝试了其他组合对象的方式并尝试失败。