2017-08-22 48 views
1

我有一個超過10M文檔的大型語料庫。每當我嘗試在多個內核的改造利用mc.cores的說法,我得到錯誤:無法獲取tm_map使用mc.cores參數

Error in FUN(content(x), ...) : unused argument (mc.cores = 10) 

我在我目前的託管[R工作室15個可用內核。

# I have a corpus 
> inspect(corpus[1]) 
<<VCorpus>> 
Metadata: corpus specific: 0, document level (indexed): 0 
Content: documents: 1 

[[1]] 
<<PlainTextDocument>> 
Metadata: 7 
Content: chars: 46 

> length(corpus) 
[1] 10255313 

觀看時,我儘量讓轉換使用tm_map

library(tidyverse) 
library(qdap) 
library(stringr) 
library(tm) 
library(textstem) 
library(stringi) 
library(SnowballC) 

例如發生了什麼

> corpus <- tm_map(corpus, content_transformer(replace_abbreviation), mc.cores = 10) 
Error in FUN(content(x), ...) : unused argument (mc.cores = 10) 

嘗試添加懶= T

corpus <- tm_map(corpus, content_transformer(replace_abbreviation), mc.cores = 10, lazy = T) # read the documentation, still don't really get what this does 

改造後,如果我去例如

> corpus[[1]][1] I get: 
Error in FUN(content(x), ...) : unused argument (mc.cores = 10) 

而在此之前,我會得到:

> corpus.beforetransformation[[1]][1] 
$content 
[1] "here is some text" 

我在做什麼錯在這裏?我如何使用mc.cores參數來使用更多的處理器?

重複的例子:

sometext <- c("cats dogs rabbits", "oranges banannas pears", "summer fall winter") %>% 
    data.frame(stringsAsFactors = F) %>% DataframeSource %>% VCorpus 

corpus.example <- tm_map(sometext, content_transformer(replace_abbreviation), mc.cores = 2, lazy = T) 
corpus.example[[1]][1] 
+0

其一,傳遞給'tm_map'通過'...'額外的參數傳遞給'FUN' 。所以你的'mc.cores'參數被傳遞給'content_transformer(replace_abbreviation)'。我*想*您可能需要使用並行程序包註冊一個羣集,然後使用'tm_parLapply_engine'函數告訴tm程序包使用該羣集,但這有點推測。 –

+0

嘗試將mc.cores參數移至content_transformer,但出現同樣的錯誤。重新註冊一個羣集......讓我感到奇怪?我最初通過創建集羣來開始此任務,然後通過另一個SO員額被告知只使用mc.cores arg而不是這樣做 –

+0

有關更多信息,請參閱tm軟件包文檔的第14頁。 https://cran.r-project.org/web/packages/tm/tm.pdf –

回答

2

tm documentation,請嘗試以下操作:

options(mc.cores = 10) # or whatever 
tm_parLapply_engine(parallel::mclapply) # mclapply gets the number of cores from global options 
tm_map(sometext, content_transformer(replace_abbreviation)) 
+0

剛剛運行它,我看到所有te處理器在外殼中點亮。我現在很快就退出了!讓我們看看它的結果是否如預期,給它幾分鐘。第二行是什麼呢? –

+0

'tm_parLapply_engine'設置tm用於並行化的方法。如果你通過'NULL',它會使用'lapply'(無並行)。 –

+0

@DougFir如果這回答了您的問題,請提出答案和/或接受它。 – G5W