2013-08-17 12 views
17

Używam R 3.0.1 na platformie: x86_64-apple-darwin10.8.0 (64-bitowym)tm_map ma równoległe :: mclapply błąd w R 3.0.1 na Mac

Próbuję użyć tm_map od biblioteka TM. Ale kiedy uruchomić ten kod

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

otrzymuję ten błąd:

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

Czy ktoś zna rozwiązanie tego problemu?

Odpowiedz

29

Podejrzewam, że nie masz zainstalowanego pakietu SnowballC, który wydaje się być wymagany. tm_map ma działać stemDocument na wszystkich dokumentach przy użyciu mclapply. Spróbuj po prostu uruchamiając funkcję stemDocument na jednym dokumencie, dzięki czemu można wyodrębnić błąd:

stemDocument(crude[[1]]) 

Dla mnie, mam błąd:

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

Więc po prostu poszedł do przodu i zainstalowane SnowballC i to działało . Oczywistym jest, że powinna być zależność SnowballC.

17

Po prostu w to wpadłem. Zajęło mi trochę kopania, ale dowiedziałem się, co się dzieje.

  1. miałem linii kodu 'rdevel < - tm_map (rdevel, asPlainTextDocument)'

  2. Running to produkowane błąd

 

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

  1. Okazuje się, że "tm_map" wywołuje jakiś kod w "równoległym", który próbuje dowiedzieć się, ile masz rdzeni. Aby zobaczyć, co ona myśli, typ
 

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

  1. Aha chwila! Powiedz wywołanie "tm_map", aby używać tylko jednego rdzenia!
 

    > 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 
    > 

Więc ... z więcej niż jednym rdzeniu, zamiast dać się komunikat o błędzie, „równoległy” po prostu mówi, wystąpił błąd w każdym rdzeniu. Nieprzydatne, równoległe! Zapomniałem kropki - nazwa funkcji ma być "as.PlainTextDocument"!

Tak więc, jeśli pojawi się ten błąd, dodaj "mc.cores = 1" do wywołania "tm_map" i uruchom je ponownie.

3

Mam do czynienia z tym samym problemem, ale w końcu go naprawić. Domyślam się, że jeśli nazwę korpusu jako "longName" lub "companyNewsCorpus", pojawia się problem, ale jeśli użyję wartości korpusu jako "a", to działa dobrze. Bardzo dziwne.

Poniżej kod daje ten sam komunikat o błędzie opisany w tym wątku

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

Ale jeśli przekonwertować to na poniżej, działa bez problemów.

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

dziękuję to było naprawdę pomocne – Jijo

11

znalazłem odpowiedzi na to, że był udany dla mnie w tym question: Karola Copley, jego answer, wskazuje on uważa, że ​​nowy pakiet tm wymaga lazy = TRUE być wyraźnie zdefiniowane.

Tak Twój kod będzie wyglądać następująco

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

ja też próbuje go bez SnowballC, aby zobaczyć, czy to połączenie tych dwóch odpowiedzi. Nie wpłynęło to na wynik w żaden sposób.

1

Wystąpił również ten sam problem podczas korzystania z funkcji removeWords biblioteki tm. Niektóre inne odpowiedzi, takie jak ustawienie liczby rdzeni na 1, działały w celu usunięcia zestawu angielskich słów stop, chciałem jednak również usunąć niestandardową listę imion i nazwisk z mojego korpusu, a te listy przekroczyły 100 000 słowa długie.

Żadna z innych sugestii nie pomogłaby w rozwiązaniu tego problemu i okazało się, że niektóre próby i błędy, które usunięto, wydawały się ograniczać do 1000 słów w wektorze. Więc napisałem tę funkcję, które rozwiązały problem dla mnie:

# 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 

} 

Funkcja ta zasadniczo liczy ile słowa są w wektorze słów chcę usunąć, a następnie dzieli się przez 1000 i zaokrągla się do najbliższego liczba całkowita, n. Następnie przechodzimy przez wektor słów, aby usunąć n razy. Dzięki tej metodzie nie musiałem używać leniwy = PRAWDA ani zmieniać liczby rdzeni do użycia, jak widać z rzeczywistego wywołania removeWords w funkcji. Mam nadzieję że to pomoże!

0

byłem w pracy na danych Twitterze i dostał ten sam błąd w oryginalne pytanie, a ja starałem się przekształcić cały tekst na niższe tm_map() funkcji

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

instalacji i pakietu załadunku SnowballC rozwiązało problemu całkowicie. Mam nadzieję że to pomoże.

3

wpadłem na ten sam problem w tm używając quad core I7 Intel z systemem Mac OS X 10.10.5 i dostał następujące ostrzeżenie:

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

byłem tworząc korpus po pobraniu danych Twitterze.

Rozwiązanie Charlesa Copleya działało również dla mnie. Użyłem: tm_map(*filename*, stemDocument, lazy = TRUE) po utworzeniu mojego korpusu, a następnie tm działało poprawnie.

Powiązane problemy