斯坦福大学NLP:“没有注释者称为情绪”错误

时间:2015-12-03 11:22:21

标签: java stanford-nlp sentiment-analysis

我正在尝试对包含我已经收集的推文的数据集应用情感分析,以便为我的论文运行一些实验。我已经在互联网上关注了各种教程,到目前为止,我的代码如下:

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会返回一个非法的参数异常:

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

但是每一个教程都将“情绪”列为有效的注释器!该程序在调用StanfordCoreNLP构造函数(在SentimentAnalyzer构造函数内)时特别挂起,虽然我已经尝试了所有我能想到的配置(使管道不是静态的,使用.properties文件在getSentiment()方法中创建管道eveytime相反),问题仍然存在。 我正在使用StanfordCoreNLP 3.3.1,以及模型.jar(虽然它是3.5.2版本)和ejml 0.23 -I使用了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 ��

其余部分不可读,也无法复制。似乎模型库存在问题,至少错误指向的目录属于模型。我还使用GitHub存储库中的最新库进行了更新,但错误是相同的。

1 个答案:

答案 0 :(得分:0)

事实证明,自8月以来,StanfordCoreNLP v.1.3.4被遗漏了之前的实施。当我删除它时,代码开始正常工作。