Ich versuche, Teil der Rede Tagging von den openNLP / NLP-Paketen parallel zu verwenden. Ich brauche den Code, um auf jedem Betriebssystem zu arbeiten, also benutze ich die parLapply
-Funktion parallel (aber bin offen für andere OS-unabhängige Optionen). In der Vergangenheit habe ich tagPOS
function aus dem openNLP-Paket in parLapply
ohne Probleme ausgeführt. Das Paket openNLP enthielt jedoch einige Änderungen, die tagPOS
eliminierten und einige flexiblere Optionen hinzufügten. Kurt war so freundlich, mir dabei zu helfen, die Funktion tagPOS
aus den Tools des neuen Pakets neu zu erstellen. Ich kann die lapply
Version zum Funktionieren bringen, aber nicht die parallele Version. Es sagt weiter, dass die Knoten mehr Variablen benötigen, die an sie übergeben werden, bis sie schließlich nach einer nicht exportierten Funktion von openNLP fragen. Das scheint merkwürdig, es würde immer wieder nach immer mehr Variablen fragen, die mir sagen, dass ich die parLapply
falsch aufstelle. Wie kann ich das tagPOS
so einrichten, dass es parallel und unabhängig vom Betriebssystem arbeitet?
BEARBEITEN: nach Steves Vorschlag
Beachten Sie, dass openNLP brandneu ist. Ich habe ver 2.1 von einem tar.gz von CRAN installiert. Ich bekomme den folgenden Fehler, obwohl diese Funktion existiert.
Bibliothek (openNLP); Bibliothek (NLP); Bibliothek (parallel)
%Vor% Da Sie für die Cluster-Worker Funktionen von NLP
aufrufen, sollten Sie sie vor dem Aufruf von parLapply
auf jeden der Worker laden. Sie können dies von der Worker-Funktion aus tun, aber ich neige dazu, direkt nach dem Erstellen des Cluster-Objekts clusterCall
oder clusterEvalQ
zu verwenden:
Da as.String
und Maxent_Word_Token_Annotator
in diesen Paketen enthalten sind, sollten sie nicht exportiert werden.
Beachten Sie, dass ich beim Ausführen Ihres Beispiels auf meinem Computer festgestellt habe, dass das Objekt PTA
nicht funktioniert, nachdem es auf die Arbeitscomputer exportiert wurde. Vermutlich befindet sich etwas in diesem Objekt, das nicht sicher serialisiert und unserialisiert werden kann. Nachdem ich dieses Objekt auf den Arbeitern erstellt habe, die clusterEvalQ
verwenden, wurde das Beispiel erfolgreich ausgeführt. Hier ist es, mit openNLP 0.2-1:
Wenn clusterEvalQ
fehlschlägt, weil Maxent_POS_Tag_Annotator nicht gefunden wird, laden Sie möglicherweise die falsche Version von openNLP auf die Worker. Sie können bestimmen, welche Paketversionen Sie für die Worker erhalten, indem Sie sessionInfo
mit clusterEvalQ
ausführen:
Dadurch werden die Ergebnisse der Ausführung von sessionInfo()
für jeden der Cluster-Worker zurückgegeben. Hier sind die Versionsinformationen für einige der Pakete, die ich verwende und die für mich arbeiten:
Tags und Links r parallel-processing