Stanford CoreNLP Webサイトからサンプルアプリケーションを構築するときに、奇妙な例外が発生しました。
Exception in thread "main" Java.lang.RuntimeException: edu.stanford.nlp.io.RuntimeIOException: Unrecoverable error while loading a tagger model
at edu.stanford.nlp.pipeline.StanfordCoreNLP$4.create(StanfordCoreNLP.Java:493)
…
Caused by: Java.io.IOException: Unable to resolve "edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger" as either class path, filename or URL
…
これは、プロパティpos
とそれ以降のプロパティがプロパティに含まれている場合にのみ発生しました。
Properties props = new Properties();
props.put("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
これが私のpom.xmlからの依存関係です:
<dependencies>
<dependency>
<groupId>edu.stanford.nlp</groupId>
<artifactId>stanford-corenlp</artifactId>
<version>3.2.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
Stackoverflowの別の質問の問題の説明で、実際にその答えを見つけました。
Mavenはモデルファイルを自動的にダウンロードしませんが、モデル行を.pomに追加した場合に限ります。これは、コードとモデルの両方をフェッチする.pomスニペットです。
これが私の依存関係が今どのように見えるかです:
<dependencies>
<dependency>
<groupId>edu.stanford.nlp</groupId>
<artifactId>stanford-corenlp</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>edu.stanford.nlp</groupId>
<artifactId>stanford-corenlp</artifactId>
<version>3.2.0</version>
<classifier>models</classifier>
</dependency>
</dependencies>
注意すべき重要な部分は、下部のエントリ<classifier>models</classifier>
です。 Eclipseが両方の参照を維持するためには、各stanford-corenlp-3.2.0
とstanford-corenlp-3.2.0-models
の依存関係を構成する必要があります。
他の言語(中国語、スペイン語、アラビア語など)のモデルを使用する必要がある場合は、次の部分を_pom.xml
_ファイルに追加できます(_models-chinese
_を_models-spanish
_または_models-arabic
_これら2つの言語のそれぞれ):
_<dependency>
<groupId>edu.stanford.nlp</groupId>
<artifactId>stanford-corenlp</artifactId>
<version>3.8.0</version>
<classifier>models-chinese</classifier>
</dependency>
_