我正在尝试使用Stanford CoreNLP作为我的java程序中的库。我使用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
我读了一个解决方案here,但无法弄清问题是什么,因为我从Maven Central Repository中添加了库,其中已经包含了“stanford-corenlp-3.5.2-models.jar”
从错误消息中,程序似乎试图从edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger
加载文件,因此我从here下载了标记文件并将其放入/edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger
。但它仍然没有用。
有人能告诉我这个错误是什么,并帮助我解决它?谢谢!
答案 0 :(得分:6)
我遇到了同样的问题。修正使用:
<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>
或SBT:
"edu.stanford.nlp" % "stanford-corenlp" % "3.5.2",
"edu.stanford.nlp" % "stanford-corenlp" % "3.5.2" classifier "models",
答案 1 :(得分:3)
必须将标记文件放入项目根目录。
project
-- src --> SentimentAnaTest
-- english-left3words/english-left3words-distsim.tagger
在Eclipse项目中测试。
答案 2 :(得分:0)
问题可能是您通过必须从已编译的分类创建的jar文件启动服务器,因此请确保在将所需文件放入文件夹位置后重新创建jar,如上所示错误控制台。 重新创建jar后,启动服务器。
答案 3 :(得分:0)
我遇到了同样的错误,花了很长时间才弄明白。基本上,我们需要两个主要的jar文件来解决错误。一个是稳定版本3.6.0和当前版本3.7.0
因此,请从以下link和link下载两个jar文件。现在提取两个jar文件。 3.7.0 jar文件的解压缩文件夹目前没有models文件夹。您可以在3.6.0 jar文件解压缩文件夹中找到此文件夹。
将该文件夹从3.6版复制到3.7版。
现在从根文件夹运行以下命令:
{{1}}
它应该完美运行。要使用服务器,请按照此py-corenlp
进行操作