2016-07-20 2 views
0

Я пытаюсь понять, почему добавление аргумента -nthreads {int} к Stanford CoreNLP (версия stanford-corenlp-full-2015-12-09) приводит к тому, что все токены имеют выходное значение NER для O (= not именованный объект).Stanford CoreNLP: -nthreads флаг вызывает все значения ner O

Как простой пример, создайте файл sample-file.txt и произведите его содержимое Samuel Huntington. Затем запустите:

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

Это произведет ожидаемый результат, с «Самуила» признан как человек:

{ 
    "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": " " 
     }, ... 

Если добавить -nthreads 8 в команду выше, однако, выход не указывает Самуилу это человек. Полная команда:

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

, который генерирует:

{ 
    "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": " " 
     }, 

Для чего это стоит, -nthread {int} (то есть нить, не с) решает эту проблему, так что я могу просто использовать эту команду. Я оставлю этот вопрос здесь, если другие попробуют использовать флаг -nthreads.

P.S. Вот мой CLASSPATH (получено из echo $CLASSPATH), который содержит только распределение Stanford CoreNLP я скачал на прошлой неделе: /Users/dduhaime/Desktop/everett/wiki_facts/stanford-corenlp-full-2015-12-09/*:

ответ

0

Использование -nthread {int} вместо -nthreads {int} генерирует ожидаемый выход NER.

0

Я выполнил эту команду:

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

с образцом-file.txt только, содержащее текст «Самуил Хантингтон ", и он обнаружил, что оба токена - ЧЕЛОВЕК.

В моем CLASSPATH содержатся все банки в раздаче.

Две вещи, которые вы должны начать, - это перепродать дистрибутив 2015-12-09 (мы иногда делаем небольшие изменения к этому до его завершения), чтобы убедиться, что у вас есть последняя версия и исследуйте в своем коде на Python, что CLASSPATH есть. Возможно, перед запуском java-команды добавьте «echo $ CLASSPATH». Поскольку, глядя на вашу команду java, вы не устанавливаете CLASSPATH, поэтому не совсем понятно, что используется CLASSPATH.

+0

Thanks @StanfordNLPПомощь! Ваша команда работает так, как ожидалось, но кажется, что добавление '-nthreads 8' к этой команде приводит к тому, что ner tokens для sample-file.txt указывают« O ». Вы знаете, почему это так, или что я могу сделать, чтобы получить тот же результат для этой разработанной команды, как и для вашей команды выше? Любая помощь очень ценится! – duhaime

+1

Это, кажется, ошибка с многопоточным кодом. Спасибо за указание на это. – StanfordNLPHelp

+0

Большое спасибо! Я рад, что это было довольно легко заметить. – duhaime