在 R 中将 tm 的语料库函数与大数据一起使用

Use tm's Corpus function with big data in R

提问人:Hack-R 提问时间:8/28/2014 最后编辑:ScarabeeHack-R 更新时间:10/20/2017 访问量:3465

问:

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

我经常遇到内存问题(例如),并使用既定的方法来解决这些问题,例如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

更新

我一直在尝试尝试将较小的语料库结合起来,即

test1 <- dfs[1:10000,]
test2 <- dfs[10001:20000,]

ds.1 <- Corpus(DataframeSource(test1))
ds.2 <- Corpus(DataframeSource(test2))

虽然我没有成功,但我确实发现了应该解决这个确切问题的方法。唯一的问题是,由于某种原因,我的 R 3.1.1 的 64 位版本和最新版本的 找不到该函数。也许由于某种原因它已从包装中删除?我正在调查...tm_combinetmtm_combine

> require(tm)
> ds.12 <- tm_combine(ds.1,ds.2)
Error: could not find function "tm_combine"
R BigData Text-Mining TM

评论

0赞 Rich Scriven 8/28/2014
你所有的代码都在一个函数中吗?还是剧本?
0赞 Hack-R 8/28/2014
目前这是一个剧本
0赞 Rich Scriven 8/28/2014
我猜你的代码可能复制了太多......但我会等待专家。
0赞 Hack-R 8/28/2014
很公平。不过,现在它只是源数据帧和环境中的非工作命令。Corpus
0赞 James Tobin 8/28/2014
你能提供一个可重复的例子吗?

答:

2赞 Hack-R 8/28/2014 #1

我不知道是否被弃用了,或者为什么在命名空间中找不到它,但我确实找到了一个解决方案,通过使用较小的数据帧块然后将它们组合在一起。tm_combinetmCorpus

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

很抱歉在问之前我自己没有弄清楚这一点。我尝试了其他组合对象的方法,但失败了。