2016-07-20 9 views
0

Ich versuche herauszufinden, warum das Hinzufügen des -nthreads {int} Arguments der Stanford CoreNLP (Version stanford-corenlp-full-2015-12-09) bewirkt, dass alle Token einen Ausgabe-NER-Wert von O haben (= nicht eine benannte Entität).Stanford CoreNLP: -threads Flag verursacht alle ner Werte

Als ein einfaches Beispiel, erstellen Sie eine Datei mit dem Namen sample-file.txt und seinen Inhalt sagen Samuel Huntington. Dann läuft:

java -Xmx6g edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner -file sample-file.txt -outputFormat json 

Dies wird die erwartete Ausgabe mit „Samuel“ als Person anerkannt generieren:

{ 
    "sentences": [ 
    { 
     "index": 0, 
     "parse": "SENTENCE_SKIPPED_OR_UNPARSABLE", 
     "tokens": [ 
     { 
      "index": 1, 
      "word": "Samuel", 
      "originalText": "Samuel", 
      "lemma": "Samuel", 
      "characterOffsetBegin": 0, 
      "characterOffsetEnd": 6, 
      "pos": "NNP", 
      "ner": "PERSON", 
      "before": "", 
      "after": " " 
     }, ... 

Wenn Sie -nthreads 8 auf den Befehl oben hinzufügen, jedoch der Ausgang nicht an, Samuel Ist eine Person. Voll Befehl:

java -Xmx6g edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner -file sample-file.txt -outputFormat json -nthreads 8 

Welche erzeugt:

{ 
    "sentences": [ 
    { 
     "index": 0, 
     "parse": "SENTENCE_SKIPPED_OR_UNPARSABLE", 
     "tokens": [ 
     { 
      "index": 1, 
      "word": "Samuel", 
      "originalText": "Samuel", 
      "lemma": "Samuel", 
      "characterOffsetBegin": 0, 
      "characterOffsetEnd": 6, 
      "pos": "NNP", 
      "ner": "O", 
      "before": "", 
      "after": " " 
     }, 

Für das, was es wert ist, -nthread {int} (das heißt, Gewinde ohne s) löst das Problem, so kann ich nur diesen Befehl verwenden. Ich werde diese Frage hier für den Fall lassen, dass andere versuchen, das -Thread-Flag zu verwenden.

P.S. Hier ist mein CLASSPATH (erhalten von echo $CLASSPATH), die nur die Stanford CoreNLP Distribution enthält ich letzte Woche heruntergeladen /Users/dduhaime/Desktop/everett/wiki_facts/stanford-corenlp-full-2015-12-09/*:

Antwort

0

Mit -nthread {int} anstelle von -nthreads {int} wird der erwartete NER-Ausgang generiert.

0

ich diesen Befehl lautete:

java -Xmx6g edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner -file sample-file.txt -outputFormat json 

mit Probe-datei.txt enthält nur den Text „Samuel Huntington "und es wurden beide Marker PERSON.

Mein CLASSPATH enthält alle Gläser in der Verteilung.

Zwei Dinge, mit denen Sie beginnen sollten, sind die 2015-12-09-Distribution erneut herunterzuladen (wir machen manchmal kleine Änderungen, bevor es abgeschlossen ist), nur um sicherzustellen, dass Sie die neueste Version haben und in Ihrem Python-Code untersuchen der CLASSPATH ist. Vielleicht fügen Sie vor dem Ausführen des Befehls java ein "echo $ CLASSPATH;" hinzu. Da Sie Ihren Java-Befehl betrachten, setzen Sie CLASSPATH nicht, daher ist nicht vollständig klar, welcher CLASSPATH verwendet wird.

+0

Danke @StanfordNLPHelp! Ihr Befehl funktioniert wie erwartet, aber es scheint, dass das Hinzufügen von '-nthreads 8' zu diesem Befehl bewirkt, dass die ner-Token für sample-file.txt beide" O "anzeigen. Weißt du, warum das so ist oder was ich tun kann, um die gleiche Ausgabe für diesen ausgearbeiteten Befehl zu erhalten, wie ich es oben für deinen Befehl getan habe? Jede Hilfe wird sehr geschätzt! – duhaime

+1

Dies scheint ein Fehler mit dem Multithreading-Code zu sein. Danke, dass du darauf hingewiesen hast. – StanfordNLPHelp

+0

Vielen Dank! Ich bin froh, dass es ziemlich leicht zu erkennen war. – duhaime