2013-08-17 6 views
17

Ich bin mit R 3.0.1 auf Plattform: x86_64-Apfel-darwin10.8.0 (64-Bit)tm_map hat parallel :: mclapply Fehler in R 3.0.1 auf Mac

Ich versuche, aus zu verwenden tm_map die tm-Bibliothek. Aber wenn ich die diesen Code

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

ausführen bekomme ich diesen Fehler:

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

Kennt jemand eine Lösung?

Antwort

29

Ich vermute, Sie haben nicht das SnowballC Paket installiert, das scheint erforderlich zu sein. tm_map soll stemDocument auf allen Dokumenten unter Verwendung mclapply laufen lassen. Versuchen Sie, nur die stemDocument Funktion auf ein Dokument, so können Sie den Fehler extrahieren:

stemDocument(crude[[1]]) 

Für mich habe ich einen Fehler:

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

So einfach ging ich weiter und installiert SnowballC und es funktionierte . Offensichtlich sollte SnowballC eine Abhängigkeit sein.

17

Ich bin gerade in das hineingerannt. Ich brauchte ein bisschen zu graben, aber ich fand heraus, was passierte.

  1. hatte ich eine Zeile Code 'rdevel < - tm_map (rdevel, asPlainTextDocument)'

  2. Ausführen dieses den Fehler erzeugt

 

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

  1. Es stellt sich heraus, dass "tm_map" ruft einen Code in "parallel" auf, der versucht herauszufinden, wie viele Kerne Sie haben. Um zu sehen, was es denkt, Typ
 

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

  1. Aha Moment! Sagen Sie dem Aufruf 'tm_map', dass nur ein Kern verwendet werden soll!
 

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

So ... mit mehr als einem Kern, anstatt die Fehlermeldung zu geben, ‚parallel‘ nur sagen Sie ein Fehler in jedem Kern dort sind. Nicht hilfreich, parallel! Ich habe den Punkt vergessen - der Funktionsname soll 'as.PlainTextDocument' sein!

Also - wenn Sie diesen Fehler erhalten, fügen Sie 'mc.cores = 1' zum Aufruf 'tm_map' hinzu und führen Sie es erneut aus.

3

Ich hatte das gleiche Problem, aber endlich wurde es behoben. Meine Vermutung ist, dass wenn ich den Korpus als "longName" oder "companyNewsCorpus" nenne, bekomme ich das Problem, aber wenn ich Corpus-Wert als "a" verwende, funktioniert es gut. Sehr seltsam.

Below Code gibt dieselbe Fehlermeldung in diesem Thread erwähnt

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

Aber wenn ich diese konvertieren in unten, funktioniert es ohne Probleme.

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

danke es war wirklich hilfreich – Jijo

11

ich eine Antwort auf diese gefunden, die für mich in diesem question erfolgreich war: Charles Copley, in seiner answer, zeigt er das neue tm Paket denkt lazy = TRUE explizit definiert werden muss.

Also, Ihr Code würde wie folgt aussehen

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

Ich versuchte es auch ohne SnowballC zu sehen, ob es sich um eine Kombination aus diesen beiden Antworten war. Es schien das Ergebnis in keiner Weise zu beeinflussen.

1

Ich lief auch in dasselbe Problem, während die RemoveWords-Funktion der TM-Bibliothek verwendet. Einige der anderen Antworten, wie das Setzen der Anzahl der Kerne auf 1, funktionierten beim Entfernen der englischen Stoppwörter. Ich wollte jedoch auch eine benutzerdefinierte Liste mit Vor- und Nachnamen aus meinem Korpus entfernen, und diese Listen waren mehr als 100.000 Wörter lang jeder.

Keiner der anderen Vorschläge würde diesem Problem helfen, und es stellt sich heraus, dass removeWords durch einige Versuch und Irrtum eine Beschränkung von 1000 Wörtern in einem Vektor zu haben schien. Also schrieb ich diese Funktion, die das Problem für mich gelöst:

# 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 

} 

Diese Funktion im Wesentlichen zählt, wie viele Wörter in den Vektor von Wörtern, die ich entfernen möchten, und dann teilt es durch 1000 und rundet auf die nächste ganze Zahl, n. Wir durchlaufen dann den Vektor von Wörtern, um n Male zu entfernen. Bei dieser Methode musste ich nicht lazy = TRUE verwenden oder die Anzahl der zu verwendenden Kerne ändern, wie aus dem tatsächlichen removeWords-Aufruf in der Funktion ersichtlich ist. Hoffe das hilft!

0

Ich arbeite an Daten Twitter und bekam den gleichen Fehler in der ursprünglichen Frage, während ich die gesamten Text zu konvertieren versuche mit tm_map() Funktion zu senken

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

Installieren und Laden Paket SnowballC das Problem vollständig gelöst. Hoffe das hilft.

3

Ich lief in das gleiche Problem in tm einen Intel Quad-Core I7 mit auf Mac OS X 10.10.5 ausgeführt wird, und bekam die folgende Warnung:

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

Ich war nach dem Download Twitter Daten ein Korpus zu schaffen.

Die Lösung von Charles Copley hat auch für mich funktioniert. Ich benutzte: tm_map(*filename*, stemDocument, lazy = TRUE) nach dem Erstellen meines Korpus und dann tm funktionierte korrekt.