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

Hac*_*k-R 6 r text-mining bigdata tm

我正在尝试对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?)
Run Code Online (Sandbox Code Playgroud)

我可以(并且应该)Corpus在源数据帧的行块上递增运行然后合并结果吗?有没有更有效的方法来运行它?

产生此错误的数据大小取决于运行它的计算机,但如果您使用内置crude数据集并复制文档直到它足够大,那么您可以复制错误.

UPDATE

我一直在尝试尝试结合较小的corpa,即

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

ds.1 <- Corpus(DataframeSource(test1))
ds.2 <- Corpus(DataframeSource(test2))
Run Code Online (Sandbox Code Playgroud)

虽然我都没有成功,我也发现tm_combine这是应该解决这个确切的问题.唯一的问题是,由于某种原因,我的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"
Run Code Online (Sandbox Code Playgroud)

Hac*_*k-R 2

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

这篇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)
Run Code Online (Sandbox Code Playgroud)

这给你:

DS.12

<<VCorpus (documents: 200000, metadata (corpus/indexed): 0/0)>>
Run Code Online (Sandbox Code Playgroud)

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