斯坦福 NLP:"No annotator named sentiment" 错误
Stanford NLP: "No annotator named sentiment" error
我正在尝试对包含我已经收集的推文的数据集应用情绪分析,对于一些实验,我 运行 用于我的论文。我已经按照 Internet 上的各种教程进行操作,到目前为止我的代码如下:
public class SentimentAnalyzer {
public static StanfordCoreNLP pipeline;
public SentimentAnalyzer() {
Properties props = new Properties();
props.setProperty("annotators", "tokenize, ssplit, parse, sentiment");
pipeline = new StanfordCoreNLP(props);
}
public static int getSentiment(String tweet) {
int mainSentiment = 0;
if (tweet != null && tweet.length() > 0) {
int longest = 0;
Annotation annotation = pipeline.process(tweet);
for (CoreMap sentence : annotation.get(CoreAnnotations.SentencesAnnotation.class)) {
Tree tree = sentence.get(SentimentCoreAnnotations.AnnotatedTree.class);
int sentiment = RNNCoreAnnotations.getPredictedClass(tree);
String partText = sentence.toString();
if (partText.length() > longest) {
mainSentiment = sentiment;
longest = partText.length();
}
}
}
return mainSentiment;
}
}
问题是,当我 运行 这段代码时, Java returns 一个非法参数异常:
Adding annotator tokenize
Adding annotator ssplit
Adding annotator parse
Loading parser from serialized file
edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz ... done [1,4 sec].
Adding annotator sentiment
Exception in thread "main" java.lang.IllegalArgumentException: No annotator named sentiment
at edu.stanford.nlp.pipeline.AnnotatorPool.get(AnnotatorPool.java:78)
at edu.stanfoJava Result: 1
但每个教程都将 "sentiment" 列为有效的注释器!该程序在调用 StanfordCoreNLP 构造函数(在 SentimentAnalyzer 构造函数内部)时特别挂起,尽管我已经尝试了我能想到的所有配置(使管道非静态,在 getSentiment() 方法中创建管道 eveytime,使用 .properties 文件相反),问题仍然存在。
我正在使用 StanfordCoreNLP 3.3.1,以及模型 .jar(虽然是 3.5.2 版本)和 ejml 0.23 - 我使用了 3.5.2 版本,但没有成功。
编辑:
我用 3.5.2 替换了 3.3.2,现在错误改变了:
Loading parser from text file edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz Exception in thread "main" java.lang.RuntimeException: edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz: expecting BEGIN block; got ��
其余部分不可读,也无法复制。看来是models库的问题,至少错误指向的目录是models的。我还更新了他们 GitHub 存储库中的最新库,但错误是一样的。
事实证明,自 8 月以来,StanfordCoreNLP v.1.3.4 被排除在先前的实施之外。当我删除它时,代码开始正常工作。
我正在尝试对包含我已经收集的推文的数据集应用情绪分析,对于一些实验,我 运行 用于我的论文。我已经按照 Internet 上的各种教程进行操作,到目前为止我的代码如下:
public class SentimentAnalyzer {
public static StanfordCoreNLP pipeline;
public SentimentAnalyzer() {
Properties props = new Properties();
props.setProperty("annotators", "tokenize, ssplit, parse, sentiment");
pipeline = new StanfordCoreNLP(props);
}
public static int getSentiment(String tweet) {
int mainSentiment = 0;
if (tweet != null && tweet.length() > 0) {
int longest = 0;
Annotation annotation = pipeline.process(tweet);
for (CoreMap sentence : annotation.get(CoreAnnotations.SentencesAnnotation.class)) {
Tree tree = sentence.get(SentimentCoreAnnotations.AnnotatedTree.class);
int sentiment = RNNCoreAnnotations.getPredictedClass(tree);
String partText = sentence.toString();
if (partText.length() > longest) {
mainSentiment = sentiment;
longest = partText.length();
}
}
}
return mainSentiment;
}
}
问题是,当我 运行 这段代码时, Java returns 一个非法参数异常:
Adding annotator tokenize
Adding annotator ssplit
Adding annotator parse
Loading parser from serialized file
edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz ... done [1,4 sec].
Adding annotator sentiment
Exception in thread "main" java.lang.IllegalArgumentException: No annotator named sentiment
at edu.stanford.nlp.pipeline.AnnotatorPool.get(AnnotatorPool.java:78)
at edu.stanfoJava Result: 1
但每个教程都将 "sentiment" 列为有效的注释器!该程序在调用 StanfordCoreNLP 构造函数(在 SentimentAnalyzer 构造函数内部)时特别挂起,尽管我已经尝试了我能想到的所有配置(使管道非静态,在 getSentiment() 方法中创建管道 eveytime,使用 .properties 文件相反),问题仍然存在。 我正在使用 StanfordCoreNLP 3.3.1,以及模型 .jar(虽然是 3.5.2 版本)和 ejml 0.23 - 我使用了 3.5.2 版本,但没有成功。
编辑: 我用 3.5.2 替换了 3.3.2,现在错误改变了:
Loading parser from text file edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz Exception in thread "main" java.lang.RuntimeException: edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz: expecting BEGIN block; got ��
其余部分不可读,也无法复制。看来是models库的问题,至少错误指向的目录是models的。我还更新了他们 GitHub 存储库中的最新库,但错误是一样的。
事实证明,自 8 月以来,StanfordCoreNLP v.1.3.4 被排除在先前的实施之外。当我删除它时,代码开始正常工作。