2012-03-26 9 views
2

Windows 7コンピュータでRのためにwordnetパッケージを使用して並列処理を使用しようとしています。特に、私は名詞のリストの同義語を見つけようとしています。私は何をしようとしているのかを示すために、いくつかのサンプルコードを作成しましたが、それは正しく並行して実行されないようです。それは労働者を立ち上げ始めており、労働者の1人で計算していますが、他の人は計算していません。私が下で作ったリストは、各スロットに4ワードの長さがあります。利用可能なコアの数でリストを分割しようとしていて、リストのサブセットを各コアに送信しようとしています。次に、sapply関数は(並列ループ内の)4ワードの同義語を取得します。私もSnowfallでこれをやってみましたが、辞書をエクスポートすることができませんでした(sfExportはそれをしていないようでした)。私はforeachループ内で ".export"を使用していません。なぜなら、辞書には位置していないエラーも出ていますが、それを並列ループ内に置くことは、動作させるようです。どんな助けでも大歓迎です。r(Windows 7の場合)でのwordnetの並列使用

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

答えて

1

私はあなたの問題はどのようにセットアップあなたのforeachi変数であると思います。これがループするのは、コアの数ではなく、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にそれを切り替え、しかし、あなたが好きなバックエンド使用することができますように見えます。

+0

ありがとう、コードの。私は昨日、私の主な問題は私が自分の環境変数を適切に定義していなかったということでした。ユーザーとシステムにWNHOMEを定義する必要がありました。私はすでにWNSEARCHDIRを持っていましたが、WNHOMEなしでは辞書を見つけることができないようです。私はあなたのコードがより好きですが、私は最近doSMPに悩まされています。クラスターの開始と終了に関してはかなり予測できないので、私は雪(または降雪)に切り替えると思います。 –

関連する問題