web-dev-qa-db-ja.com

MavenがCoreNLPモデルのダウンロードに失敗する

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>
26
Jonny Best

Stackoverflowの別の質問の問題の説明で、実際にその答えを見つけました。

W.P。マクニールの引用

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.0stanford-corenlp-3.2.0-modelsの依存関係を構成する必要があります。

51
Jonny Best

他の言語(中国語、スペイン語、アラビア語など)のモデルを使用する必要がある場合は、次の部分を_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>
_
2
Pedram