Java 使用StanfordCoreNLP时出错

Java 使用StanfordCoreNLP时出错,java,stanford-nlp,Java,Stanford Nlp,我试图在java程序中使用StanfordCorenlp作为库。我使用IntelliJ作为IDE。 我试图测试库,因此我编写了以下代码: import edu.stanford.nlp.pipeline.StanfordCoreNLP; import java.util.Properties; /** * Created by Benjamin on 15/5/4. */ public class SentimentAnaTest { public static void mai

我试图在java程序中使用StanfordCorenlp作为库。我使用IntelliJ作为IDE。 我试图测试库,因此我编写了以下代码:

import edu.stanford.nlp.pipeline.StanfordCoreNLP;

import java.util.Properties;

/**
 * Created by Benjamin on 15/5/4.
 */
public class SentimentAnaTest {
    public static void main(String[] args) {
        Properties props = new Properties();
        props.setProperty("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref");
        StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
    }
}
它显示了如下错误:

Adding annotator tokenize
TokenizerAnnotator: No tokenizer type provided. Defaulting to PTBTokenizer.
Adding annotator ssplit
Adding annotator pos
Exception in thread "main" java.lang.RuntimeException: edu.stanford.nlp.io.RuntimeIOException: Unrecoverable error while loading a tagger model
    at edu.stanford.nlp.pipeline.AnnotatorFactories$4.create(AnnotatorFactories.java:292)
    at edu.stanford.nlp.pipeline.AnnotatorPool.get(AnnotatorPool.java:85)
    at edu.stanford.nlp.pipeline.StanfordCoreNLP.construct(StanfordCoreNLP.java:289)
    at edu.stanford.nlp.pipeline.StanfordCoreNLP.<init>(StanfordCoreNLP.java:126)
    at edu.stanford.nlp.pipeline.StanfordCoreNLP.<init>(StanfordCoreNLP.java:122)
    at SentimentAnaTest.main(SentimentAnaTest.java:12)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Caused by: edu.stanford.nlp.io.RuntimeIOException: Unrecoverable error while loading a tagger model
    at edu.stanford.nlp.tagger.maxent.MaxentTagger.readModelAndInit(MaxentTagger.java:770)
    at edu.stanford.nlp.tagger.maxent.MaxentTagger.<init>(MaxentTagger.java:298)
    at edu.stanford.nlp.tagger.maxent.MaxentTagger.<init>(MaxentTagger.java:263)
    at edu.stanford.nlp.pipeline.POSTaggerAnnotator.loadModel(POSTaggerAnnotator.java:97)
    at edu.stanford.nlp.pipeline.POSTaggerAnnotator.<init>(POSTaggerAnnotator.java:77)
    at edu.stanford.nlp.pipeline.AnnotatorImplementations.posTagger(AnnotatorImplementations.java:59)
    at edu.stanford.nlp.pipeline.AnnotatorFactories$4.create(AnnotatorFactories.java:290)
    ... 10 more
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
    at edu.stanford.nlp.io.IOUtils.getInputStreamFromURLOrClasspathOrFileSystem(IOUtils.java:481)
    at edu.stanford.nlp.tagger.maxent.MaxentTagger.readModelAndInit(MaxentTagger.java:765)
    ... 16 more
添加注释器标记化
TokenizerNotator:未提供标记器类型。默认为PTBTokenizer。
添加注释器ssplit
添加注释器位置
线程“main”java.lang.RuntimeException:edu.stanford.nlp.io.RuntimeIOException:加载标记器模型时出现不可恢复的错误
位于edu.stanford.nlp.pipeline.AnnotatorFactories$4.create(AnnotatorFactories.java:292)
位于edu.stanford.nlp.pipeline.AnnotatorPool.get(AnnotatorPool.java:85)
位于edu.stanford.nlp.pipeline.StanfordCoreNLP.construct(StanfordCoreNLP.java:289)
位于edu.stanford.nlp.pipeline.StanfordCoreNLP.(StanfordCoreNLP.java:126)
位于edu.stanford.nlp.pipeline.StanfordCoreNLP.(StanfordCoreNLP.java:122)
main(mountainatest.java:12)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:483)
位于com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
原因:edu.stanford.nlp.io.RuntimeIOException:加载标记器模型时出现不可恢复的错误
位于edu.stanford.nlp.tagger.maxent.MaxentTagger.readModelAndInit(MaxentTagger.java:770)
在edu.stanford.nlp.tagger.maxent.MaxentTagger.(MaxentTagger.java:298)
在edu.stanford.nlp.tagger.maxent.MaxentTagger.(MaxentTagger.java:263)
位于edu.stanford.nlp.pipeline.POSTaggerAnnotator.loadModel(POSTaggerAnnotator.java:97)
位于edu.stanford.nlp.pipeline.POSTaggerAnnotator.(POSTaggerAnnotator.java:77)
在edu.stanford.nlp.pipeline.annotatorimplements.posTagger(annotatorimplements.java:59)
位于edu.stanford.nlp.pipeline.AnnotatorFactories$4.create(AnnotatorFactories.java:290)
... 10多
原因:java.io.IOException:无法将“edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger”解析为类路径、文件名或URL
在edu.stanford.nlp.io.IOUtils.getInputStreamFromURLOrClasspathOrFileSystem(IOUtils.java:481)
位于edu.stanford.nlp.tagger.maxent.MaxentTagger.readModelAndInit(MaxentTagger.java:765)
... 还有16个
我阅读了一个解决方案,但无法找出问题所在,因为我添加了Maven中央存储库中的库,其中已经包含了“stanford-corenlp-3.5.2-models.jar”

从错误消息中,程序似乎试图从
edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger加载文件,因此我从下载了tagger文件并将其放入
/edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger
。然而,它仍然不起作用


有人能告诉我这个错误是关于什么的,并帮助我解决它吗?谢谢大家!

标记器文件必须放在项目根目录中

project
-- src --> SentimentAnaTest
-- english-left3words/english-left3words-distsim.tagger

在Eclipse项目中测试。

我也有同样的问题。固定使用:

<dependencies>
<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>
</dependencies>

问题可能是您正在通过jar文件启动服务器,而jar文件必须是从已编译的类创建的,因此请确保在将所需文件放入文件夹位置后重新创建jar,如错误控制台上所示。
重新创建jar后,启动服务器。

我遇到了同样的错误,花了很长时间才弄清楚。实际上,我们需要两个主要的jar文件来解决这个错误。一个是稳定版本3.6.0和当前版本3.7.0

因此,从以下和下载jar文件。现在提取这两个jar文件。到目前为止,3.7.0 jar文件的提取文件夹没有models文件夹。您可以在3.6.0 jar文件解压缩文件夹中找到此文件夹

将该文件夹从3.6版本复制到3.7版本

现在从根文件夹运行以下命令:

java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9000 -timeout 15000
它应该运行得很好。要使用服务器,请遵循以下步骤

java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9000 -timeout 15000