2013-08-17 23 views
17

我使用的平臺[R 3.0.1中的R 3.0.1平行:: mclapply錯誤:x86_64的 - 蘋果darwin10.8.0(64位)tm_map但在Mac

我試圖從使用tm_map tm庫。但是,當我執行這個代碼

library(tm) 
data('crude') 
tm_map(crude, stemDocument) 

我得到這個錯誤:

Warning message: 
In parallel::mclapply(x, FUN, ...) : 
    all scheduled cores encountered errors in user code 

有誰知道一個解決方案?

回答

29

我懷疑你沒有安裝SnowballC軟件包,這似乎是必需的。對於使用mclapply的所有文檔,tm_map應該運行stemDocument。儘量只運行在一個文檔stemDocument功能,這樣你就可以提取錯誤:

stemDocument(crude[[1]]) 

對於我來說,我得到了一個錯誤:

Error in loadNamespace(name) : there is no package called ‘SnowballC’ 

於是我就繼續和安裝SnowballC和它的工作。顯然,SnowballC應該是一個依賴項。

17

我剛碰到這個。我花了一些時間挖掘,但是我發現發生了什麼。

  1. 我有一行代碼 'rdevel < - tm_map(rdevel,asPlainTextDocument)'

  2. 運行該產生的誤差

 

    In parallel::mclapply(x, FUN, ...) : 
     all scheduled cores encountered errors in user code 

  1. 事實證明'tm_map'在'並行'中調用一些代碼,試圖找出你有多少核心。看看它的思想,類型
 

    > getOption("mc.cores", 2L) 
    [1] 2 
    > 

  1. 啊哈的時刻!告訴'tm_map'調用只使用一個核心!
 

    > rdevel <- tm_map(rdevel, asPlainTextDocument, mc.cores=1) 
    Error in match.fun(FUN) : object 'asPlainTextDocument' not found 
    > rdevel <- tm_map(rdevel, asPlainTextDocument, mc.cores=4) 
    Warning message: 
    In parallel::mclapply(x, FUN, ...) : 
     all scheduled cores encountered errors in user code 
    > 

所以...有一個以上的核心,而不是給你的錯誤訊息,「水貨」只是告訴你有每個內核中的錯誤。沒有幫助,平行! 我忘了點 - 功能名稱應該是'as.PlainTextDocument'!

所以 - 如果你得到這個錯誤,給'tm_map'調用添加'mc.cores = 1'並且再次運行它。

3

我一直面臨同樣的問題,但最終得到了修復。我的猜測是,如果我將該語料庫命名爲「longName」或「companyNewsCorpus」,我會得到該問題,但如果我將語料庫值用作「a」,則效果很好。真奇怪。

下面的代碼給出了這個線程

companyNewsCorpus <-Corpus(DirSource("SourceDirectory"), 
          readerControl = list(language="english")) 
companyNewsCorpus <- tm_map(companyNewsCorpus, 
          removeWords, stopwords("english")) 

提到的相同的錯誤消息但是,如果我這個轉換在下面,它的工作原理沒有問題。

a <-Corpus(DirSource("SourceDirectory"), 
      readerControl = list(language="english")) 
a <- tm_map(a, removeWords, stopwords("english")) 
+0

謝謝你真的很有幫助 – Jijo

11

我找到了答案,這是很成功的我在這question: 查爾斯·科普利,在他answer,表明他認爲新TM包需要lazy = TRUE被明確定義。

所以,你的代碼應該是這樣的

library(tm) 
data('crude') 
tm_map(crude, stemDocument, lazy = TRUE) 

我也試了一下沒有SnowballC,看它是否是這兩個答案的組合。它似乎沒有以任何方式影響結果。

1

我也遇到了同樣的問題,同時使用tm庫的removewords函數。其他一些答案,例如將核心數量設置爲1,可以用於刪除一組英文停用詞,但我也想從我的語料庫中刪除一個名字和姓氏的自定義列表,這些列表超過了100,000單詞長。

沒有其他建議可以幫助解決這個問題,事實證明,通過一些試驗和錯誤,removeWords似乎在向量中有1000個單詞的限制。所以我寫了這個功能解決了這個問題對我來說:

# Let x be a corpus 
# Let y be a vector containing words to remove 
removeManyWords <- function (x, y) { 

     n <- ceiling(length(y)/1000) 
     s <- 1 
     e <- 1000 

     for (i in 1:n) { 

      x <- tm_map(x, content_transformer(removeWords), y[s:e]) 
      s <- s + 1000 
      e <- e + 1000 

     } 

     x 

} 

這個功能基本上是計算有多少字是我想刪除文字的載體,再經1000分,並四捨五入到最接近整數然後,我們遍歷單詞向量以刪除n次。使用這種方法,我不需要使用lazy = TRUE或更改要使用的核心數量,這可以從函數中的實際removeWords調用中看到。希望這可以幫助!

0

我工作的Twitter數據,並得到了在原來的問題相同的錯誤,而我想所有的文字與tm_map()功能

Warning message: In parallel::mclapply(x, FUN, ...) : 
all scheduled cores encountered errors in user code 

安裝和裝載包SnowballC徹底解決這個問題,以降低轉換。希望這可以幫助。

3

我遇到了同樣的問題,在使用tm Mac OS X上運行10.10.5英特爾四核I7,並得到了以下警告:

In mclapply(content(x), FUN, ...) scheduled core 1 encountered error in user code, all values of the job will be affected

我正在下載的Twitter數據後建立語料庫。

Charles Copley的解決方案也適用於我。 我用:tm_map(*filename*, stemDocument, lazy = TRUE)創建我的語料庫後,然後tm工作正常。

相關問題