2014-08-27 57 views
6

我正在嘗試使用tm對R中的大數據進行文本挖掘。在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數據集複製到足夠大的文檔中,則可以複製該錯誤。

UPDATE

我一直在嘗試,試圖更小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

是你所有的代碼在一個單一的功能?或者一個腳本? – 2014-08-27 17:36:52

+0

這是一個腳本 – 2014-08-27 17:37:41

+0

我猜你的代碼可能會製作太多副本......但我會等待專家。 – 2014-08-27 17:38:56

回答

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

遺憾沒能問之前算出這個對我自己。我用其他方式組合對象嘗試失敗。

相關問題