簡體   English   中英

在R中並行使用Wordnet(使用Windows 7)

[英]parallel use of wordnet in r (with windows 7)

我正在嘗試使用Windows 7計算機上R的wordnet軟件包的並行處理。 具體來說,我正在嘗試查找名詞列表的同義詞。 我在下面制作了一些示例代碼來說明我要嘗試執行的操作,但是它似乎無法正確並行執行。 它正在啟動工作程序,並且正在計算其中一個工作程序,而不是其他工作程序。我在下面列出的列表的長度為4,每個插槽中有4個單詞。 我試圖將列表除以可用內核數,然后將列表的子集發送給每個內核。 然后sapply函數獲取4個單詞的同義詞(在並行循環內)。 我也嘗試過使用Snowfall進行此操作,但無法導出字典(sfExport似乎沒有這樣做)。 我沒有在foreach循環中使用“ .export”,因為它也由於找不到字典而出現了錯誤,但是將其放在並行循環中似乎可以使它工作。 任何幫助將非常感激。

library(wordnet)
library(foreach)
library(doSMP)
library(rJava)

NbrOfCores <- 2

workers <- startWorkers(NbrOfCores) # number of cores
registerDoSMP(workers)
getDoParName() # check name of parallel backend
getDoParVersion() # check version of parallel backend
getDoParWorkers() # check number of workers
set.seed(1)

setDict<-setDict("C:\\Program Files (x86)\\WordNet\\2.1\\dict\\")
initDict<-initDict("C:\\Program Files (x86)\\WordNet\\2.1\\dict\\")
dict<-getDictInstance()

words <- list(c("cat", "dog", "bird"),c("mouse", "iguana", "fish"),c("car", "tree", "house"),c("shoe", "shirt", "hat"))

rows=length(words) #4
prow<-floor(rows/NbrOfCores) #2

nouns<-foreach(i=1:NbrOfCores, .combine = c, .packages ="wordnet","rJava") %dopar% {
setDict<-setDict("C:\\Program Files (x86)\\WordNet\\2.1\\dict\\")
initDict<-initDict("C:\\Program Files (x86)\\WordNet\\2.1\\dict\\")
dict<-getDictInstance()    
foreach(j=(prow*(i-1)+1):(prow*i)) %do% sapply(words[[j]],synonyms,"NOUN")}

我認為您的問題在於如何在foreach設置i變量。 這應該循環通過的是對象words ,而不是核心數。 此代碼有效:

library(wordnet)
library(foreach)
# library(doSMP) # I don't think you want to use this package anymore.
library(rJava)
require(snow) # Add the snow packages
require(doSNOW) 

NbrOfCores <- 2
cl.tmp = makeCluster(rep('localhost',NbrOfCores), type='SOCK')
registerDoSNOW(cl.tmp)

words <- list(c("cat", "dog", "bird"),c("mouse", "iguana", "fish"),c("car", "tree", "house"),c("shoe", "shirt", "hat"))

foreach(words=iter(words), .packages='wordnet') %dopar% {
    setDict<-setDict("C:\\Program Files (x86)\\WordNet\\2.1\\dict\\")
    initDict<-initDict("C:\\Program Files (x86)\\WordNet\\2.1\\dict\\")
    dict<-getDictInstance() 
    sapply(words,synonyms,pos='NOUN')
}

看起來doSMP軟件包不適用於我的R版本,因此我將其切換為snow ,但是您可以使用所需的任何后端。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM