Я пытаюсь использовать параллельную обработку с пакетом wordnet для R на компьютере с Windows 7.В частности, я пытаюсь найти синонимы для списка существительных.Я сделал несколько примеров кода ниже, чтобы показать, что я пытаюсь сделать, но, похоже, он не выполняется должным образом параллельно.Он запускает рабочих и рассчитывает на одного из рабочих, но не на других. Список, который я сделал ниже, имеет длину 4 с 4 словами в каждом слоте.Я пытаюсь разделить список на количество доступных ядер и отправить подмножество списка каждому ядру.Затем функция sapply получает синонимы для 4 слов (в параллельном цикле).Я также пытался сделать это со Snowfall, но не смог заставить его экспортировать словарь (sfExport, похоже, этого не делал).Я не использую «.export» в цикле foreach, потому что он также выдавал ошибки, когда словарь не был найден, но, похоже, что его включение в параллельный цикл заставляет его работать.Любая помощь будет высоко ценится.
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")}