使用tm的语料库函数和R中的大数据

时间:2014-08-27 17:33:52

标签: r bigdata text-mining tm

我尝试使用tm对R中的大数据进行文本挖掘。

我经常遇到内存问题(例如can not allocation vector of size....)并使用已建立的方法来解决这些问题,例如

  • 使用64位R
  • 尝试不同的操作系统(Windows,Linux,Solaris等)
  • memory.limit()设置为最大值
  • 确保服务器上有足够的RAM和计算(有)
  • 自由使用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"

1 个答案:

答案 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)>>

很抱歉在询问之前不要自己解决这个问题。我尝试了其他组合对象的方式并尝试失败。