Я использую пакет edu.stanford.nlp.simple
для генерации деревьев разбора предложений на нескольких разных языках. Английские и китайские модели дают ожидаемые результаты, например
> val s = new Sentence("The quick brown fox jumps over the lazy dog.")
> s.parse
res1: edu.stanford.nlp.trees.Tree = (ROOT (NP (NP (DT The) (JJ quick) (JJ brown) (NN fox)) (NP (NP (NNS jumps)) (PP (IN over) (NP (DT the) (JJ lazy) (NN dog))))))
(я использую Scala здесь, но это не должно иметь никакого значения.)
Однако другие языки, такие как немецкий, ведут себя странно:
> val p = new Properties()
> p.load(IOUtils.readerFromString("StanfordCoreNLP-german.properties"))
> val s = new Sentence("Ich hoffe, dass es funktionieren wird.")
> s.parse(p)
10:48:34.127 [main] INFO e.s.nlp.parser.common.ParserGrammar - Loading parser from serialized file edu/stanford/nlp/models/lexparser/germanFactored.ser.gz ... done [1.4sec].
java.lang.NullPointerException
edu.stanford.nlp.pipeline.ProtobufAnnotationSerializer.toProto(ProtobufAnnotationSerializer.java:672)
edu.stanford.nlp.simple.Document.runParse(Document.java:933)
edu.stanford.nlp.simple.Sentence.parse(Sentence.java:637)
ammonite.$sess.cmd3$.<init>(cmd3.sc:1)
ammonite.$sess.cmd3$.<clinit>(cmd3.sc)
> s.parse(p)
res4: edu.stanford.nlp.trees.Tree = (ROOT (S (PPER Ich) (VVFIN hoffe) ($, ,) (S (KOUS dass) (PPER es) (VP (VVINF funktionieren)) (VAFIN wird)) ($. .)))
Я проверил свойства p
, чтобы убедиться, что они не изменились - синтаксический анализатор последовательно выдает NullPointerException
при первом вызове, а затем корректно работает для того же предложения.
Я просмотрел источник для CoreNLP, но не могу найти явную причину, по которой это может происходить ... Интересно, я что-то упустил?
Я использую версию Stanford-CoreNLP 3.9.1
. Модели иностранных языков, на которые я ссылаюсь, - это модели из репозитория Maven, также обсуждаемые на веб-сайте Stanford CoreNLP .