在将stanford情绪分析与java集成时获取错误

我正在使用stanford情感nlp库和java进行情绪分析。 但是当我执行代码时,我收到错误。 无法搞清楚。

我的代码如下:

package com.nlp; import java.util.Properties; import edu.stanford.nlp.ling.CoreAnnotations; import edu.stanford.nlp.pipeline.Annotation; import edu.stanford.nlp.pipeline.StanfordCoreNLP; import edu.stanford.nlp.rnn.RNNCoreAnnotations; import edu.stanford.nlp.sentiment.SentimentCoreAnnotations; import edu.stanford.nlp.trees.Tree; import edu.stanford.nlp.util.CoreMap; public class SemanticAnalysis { public static void main(String args[]) { sentimentAnalysis sentiment = new sentimentAnalysis(); sentiment.findSentiment("france is a good city"); } } class sentimentAnalysis { public String findSentiment(String line) { Properties props = new Properties(); props.setProperty("annotators", "tokenize, ssplit, parse, sentiment"); StanfordCoreNLP pipeline = new StanfordCoreNLP(props); int mainSentiment = 0; if (line != null && line.length() > 0) { int longest = 0; Annotation annotation = pipeline.process(line); 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(); } } } if (mainSentiment == 2 || mainSentiment > 4 || mainSentiment < 0) { return null; } return ""; } } 

但是当我运行代码时,我收到以下错误。

  Exception in thread "main" java.lang.NoClassDefFoundError: org/ejml/simple/SimpleBase at edu.stanford.nlp.pipeline.SentimentAnnotator.(SentimentAnnotator.java:45) at edu.stanford.nlp.pipeline.StanfordCoreNLP$14.create(StanfordCoreNLP.java:845) at edu.stanford.nlp.pipeline.AnnotatorPool.get(AnnotatorPool.java:81) 

你缺少ejml-0.23.jar,将它添加到你的类路径,它应该工作。

您缺少类路径中对Efficient Java Matrix Library(EJML)的引用。

BTW。 尝试将代码拆分为较小的单一任务方法,以获得更清晰的代码。

 class SentimentAnalysis { public String findSentiment(String line) { if(line == null || line.isEmpty()) { throw new IllegalArgumentException("The line must not be null or empty."); } Annotation annotation = processLine(line); int mainSentiment = findMainSentiment(annotation); if(mainSentiment < 0 || mainSentiment == 2 || mainSentiment > 4) { //You should avoid magic numbers like 2 or 4 try to create a constant that will provide a description why 2 return null; //You shold avoid null returns } return ""; } private int findMainSentiment(Annotation annotation) { int mainSentiment = Integer.MIN_VALUE; int longest = Integer.MIN_VALUE; for (CoreMap sentence : annotation.get(CoreAnnotations.SentencesAnnotation.class)) { int sentenceLength = String.valueOf(sentence).length(); if(sentenceLength > longest) { Tree tree = sentence.get(SentimentCoreAnnotations.AnnotatedTree.class); mainSentiment = RNNCoreAnnotations.getPredictedClass(tree); longest = sentenceLength ; } } return mainSentiment; } private Annotation processLine(String line) { StanfordCoreNLP pipeline = createPieline(); return pipeline.process(line); } private StanfordCoreNLP createPieline() { Properties props = createPipelineProperties(); StanfordCoreNLP pipeline = new StanfordCoreNLP(props); return pipeline; } private Properties createPipelieProperties() { Properties props = new Properties(); props.setProperty("annotators", "tokenize, ssplit, parse, sentiment"); return props; } } 

我得到了同样的错误,我添加了所有jar文件,代码被执行了。 然后我发现删除一个jar文件并运行代码并回答是添加以下文件。

图片 在此处输入图像描述