MorphAnnotator.addLemma создает исключение NullPointerException для определенного текстового потока

(def ^:private props
  (doto (java.util.Properties.)
    (.put "annotators" "tokenize, ssplit, pos, lemma, parse")
    (.put "parse.maxlen" (str (-> config :nlp :max-sentence-length)))
    (.put "pos.maxlen" (str (-> config :nlp :max-sentence-length)))))

(def ^:private pipeline (StanfordCoreNLP. props))

(defn- annotated-doc [s]
   (.process pipeline s))

(def input-text (slurp "/home/you/some.txt"))

(annotated-doc input-text)

Который затем производит либо должным образом аннотированный результат, как и ожидалось, или это исключение:

java.lang.NullPointerException: ноль MorphaAnnotator.java:68 pipe.AnnotationPipeline.annotate StanfordCoreNLP.java:881 edu.stanford.nlp.pipeline.StanfordCoreNLP.annotate StanfordCoreNLP.java:910 edu.stanford.nlp.pipeline. Java:43 sun.reflect.DelegatingMethodAccessorImpl.invoke Method.java:606 java.lang.reflect.Method.invoke Reflector.java:93 clojure.lang.Reflector.invokeMatchingMethod Reflector.java:28

Текстовый файл очень ванильный. Я сократил свой список аннотаторов до того, что вызывает проблему. У меня настроено 6 ГБ памяти. Текстовый файл имеет длину 3886 символов, форматированный файл UTF-8 BOM. Он работает с частичным текстом из этого файла просто отлично. Это даже работает, если я беру весь файл как в (взять 3886 input-text). Так что я в тупике. Не уверен, что с этим делать. Какие-либо предложения?

Вот ссылка на текстовый файл, который я использовал: http://nectarineimp.com/spooky-action.txt

Из моего файла project.clj:

 :dependencies [[org.clojure/clojure "1.6.0"]
                 [edu.stanford.nlp/stanford-corenlp "3.3.1"]
                 [edu.stanford.nlp/stanford-corenlp "3.3.1" :classifier "models"]]

1 ответ

Я согласен, что это ошибка в Annotator. Я не уверен, для чего нужны ваши настройки:

(def ^:private props
  (doto (java.util.Properties.)
    (.put "annotators" "tokenize, ssplit, pos, lemma, parse")
    (.put "parse.maxlen" (str (-> config :nlp :max-sentence-length)))
    (.put "pos.maxlen" (str (-> config :nlp :max-sentence-length)))))

Но они не имели отношения к воспроизведению проблемы. Я недавно обновил проект до версии 3.5.2 и ваш блок кода работал без проблем ( CoreNLP Version History).

Работает в 3.1.1 дает ваши результаты точно. Похоже на версию 3.5.0 требуется Java 1.8 JVM.

Эта ошибка, кажется, исправлена ​​в версии 3.4 CoreNLP, который не требует обновлений JVM.

Ваш вопрос был опубликован некоторое время назад, поэтому я почти уверен, что вы уже все поняли, но ради Google я оставил эти комментарии.

Другие вопросы по тегам