无法将CoreNLP Shift-Reduce模型加载到CoreNLP jar中

时间:2016-01-13 22:27:01

标签: java maven stanford-nlp

我不明白如何从我的java应用程序加载CoreNLP的Shift-Reduce选区解析器(SRCP)。

我使用Apache Maven来管理项目的依赖项。根据文档,SRCP模型没有与CoreNLP捆绑在一起,所以我分别下载了stanford-srparser-2014-10-23-models.jar(http://nlp.stanford.edu/software/srparser.shtml)并将该文件放在:

~/.m2/repository/edu/stanford/nlp/stanford-corenlp/3.5.2/stanford-srparser-2014-10-23-models.jar 

这是与核心依赖jar

相同的目录
~/.m2/repository/edu/stanford/nlp/stanford-corenlp/3.5.2/stanford-corenlp-3.5.2.jar

以下是我项目的相关部分pom.xml:

    <dependency>
        <groupId>edu.stanford.nlp</groupId>
        <artifactId>stanford-corenlp</artifactId>
        <version>3.5.2</version>
    </dependency>
    <dependency>
        <groupId>edu.stanford.nlp</groupId>
        <artifactId>stanford-corenlp</artifactId>
        <version>3.5.2</version>
        <classifier>models</classifier>
    </dependency>

编译成功:

mvn clean compile

但是当我尝试加载应用时,我会收到:

java.lang.reflect.InvocationTargetException
...
Caused by: edu.stanford.nlp.io.RuntimeIOException: java.io.IOException: Unable to resolve "edu/stanford/nlp/models/srparser/englishSR.ser.gz" as either class path, filename or URL

我解压缩了已编译的项目战,&#34; edu / stanford / nlp / models / srparser / englishSR.ser.gz&#34;不存在。

以下是我在我的应用中调用模型的方式:

// Initialize a CoreNLP pipeline
public static Properties props = new Properties();
public static StanfordCoreNLP pipeline;

// Set the CoreNLP pipeline annotators.
props.setProperty("annotators", "tokenize, ssplit, parse, sentiment");
props.setProperty("parse.model", "edu/stanford/nlp/models/srparser/englishSR.ser.gz");
pipeline = new StanfordCoreNLP(props);

如何更新我的Maven配置以强制我的CoreNLP依赖项包含srparser模型?请记住,我需要在其他开发人员中运行此配置。环境,因此如果可能的话,解决方案应该是干净的并且可以重复使用。

谢谢!

编辑:

在回应@ jah的评论时,以下是mvn dependency:tree的结果。构建成功,但srparser模型未编译/存在:

[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ [REDACTED] ---

Downloading:

...

[INFO] com.[REDACTED].nlp:nlp:war:0.1.0
[INFO] +- com.strategicgains:RestExpress:jar:0.11.2:compile
[INFO] |  +- com.strategicgains:RestExpress-Common:jar:0.11.2:compile
[INFO] |  +- com.strategicgains:DateAdapterJ:jar:1.1.4:compile
[INFO] |  +- com.thoughtworks.xstream:xstream:jar:1.4.7:compile
[INFO] |  |  +- xmlpull:xmlpull:jar:1.1.3.1:compile
[INFO] |  |  \- xpp3:xpp3_min:jar:1.1.4c:compile
[INFO] |  +- io.netty:netty-all:jar:4.0.29.Final:compile
[INFO] |  +- org.owasp.encoder:encoder:jar:1.1.1:compile
[INFO] |  \- com.jcraft:jzlib:jar:1.1.3:compile
[INFO] +- junit:junit:jar:4.11:test
[INFO] |  \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] +- edu.stanford.nlp:stanford-corenlp:jar:3.5.2:compile
[INFO] |  +- com.io7m.xom:xom:jar:1.2.10:compile
[INFO] |  |  +- xml-apis:xml-apis:jar:1.3.03:compile
[INFO] |  |  +- xerces:xercesImpl:jar:2.8.0:compile
[INFO] |  |  \- xalan:xalan:jar:2.7.0:compile
[INFO] |  +- joda-time:joda-time:jar:2.1:compile
[INFO] |  +- de.jollyday:jollyday:jar:0.4.7:compile
[INFO] |  |  \- javax.xml.bind:jaxb-api:jar:2.2.7:compile
[INFO] |  +- com.googlecode.efficient-java-matrix-library:ejml:jar:0.23:compile
[INFO] |  \- javax.json:javax.json-api:jar:1.0:compile
[INFO] +- edu.stanford.nlp:stanford-corenlp:jar:models:3.5.2:compile
[INFO] +- org.json:json:jar:20151123:compile
[INFO] +- com.fasterxml.jackson.core:jackson-databind:jar:2.6.4:compile
[INFO] |  +- com.fasterxml.jackson.core:jackson-annotations:jar:2.6.0:compile
[INFO] |  \- com.fasterxml.jackson.core:jackson-core:jar:2.6.4:compile
[INFO] \- commons-io:commons-io:jar:1.3.2:compile

3 个答案:

答案 0 :(得分:3)

首先,下载srparser jar并将其放在项目根目录中:http://nlp.stanford.edu/software/stanford-srparser-2014-10-23-models.jar

其次,从项目根目录执行以下命令,通过Maven安装srparser模型依赖项:

mvn install:install-file -Dfile=stanford-srparser-2014-10-23-models.jar -DgroupId=edu.stanford.nlp -DartifactId=stanford-srparser -Dversion=3.5.2 -Dpackaging=jar

注意命令中的自定义artifactId和缺少分类器 - 这是为了防止命名空间与其他CoreNLP模块混淆。

第三,将依赖项添加到Maven项目的pom.xml:

<dependencies>
...
    <dependency>
         <groupId>edu.stanford.nlp</groupId>
         <artifactId>stanford-srparser</a‌​rtifactId>
         <version>3.5.2</version>
    </dependency>
...
</dependencies>

最后,清理安装:

mvn clean install

如果您仍然遇到问题,清除Maven依赖项可能会有所帮助:

mvn dependency:purge-local-repository

不要忘记将download / install命令添加到项目README / environment bootstrap文件中!

(感谢您的帮助@jah和@GaborAngeli。)

答案 1 :(得分:1)

要运行shift-reduce解析器,您需要包含shift-reduce模型jar,可在以下位置找到:http://nlp.stanford.edu/software/srparser.shtml

不确定它是否在maven上,但似乎没有?

答案 2 :(得分:0)

如果从放置了stanford-srparser-2014-10-23-models.jar的文件夹中运行mvn命令,则以下命令应该可以解决问题。

mvn install:install-file -Dfile=stanford-srparser-2014-10-23-models.jar -DgroupId=edu.stanford.nlp -DartifactId=stanford-corenlp -Dversion=3.5.2 -Dclassifier=models -Dpackaging=jar