Оценка Стэнфордского анализа настроений java
Я использую библиотеку Stanford core NLP для анализа настроений. Приведенный ниже код возвращает класс примера, но как я могу получить оценку? например -0.3 для отрицательного etc
private int getScore(String line) {
boolean isrun = false;
StanfordCoreNLP pipeline = null;
if(!isrun){
Properties props = getProperties();
pipeline = new StanfordCoreNLP(props);
isrun = true;
}
Annotation annotation;
int sentiment = -1;
if (line != null && line.length() > 0) {
annotation = pipeline.process(line);
for (CoreMap sentence : annotation.get(CoreAnnotations.SentencesAnnotation.class)) {
Tree tree = sentence.get(SentimentCoreAnnotations.AnnotatedTree.class);
sentiment = RNNCoreAnnotations.getPredictedClass(tree);
}
}
return sentiment;
}
EDIT
В online demo когда мышь находится на Корне на графике, мы можем видеть, что пример отрицательный 72%. Как можно получить этот номер?
2 ответа:
0.Скачайте Stanford NLP Core Lib и импортируйте внешние lib stanford-corenlp-3.5.2-models.банку, Стэнфордского corenlp-3.5.2.банку, Стэнфордского corenlp-3.5.2-источников.jar и ejml-0,23.банку в этот пакет.
1.Постройте этот класс NLP в Eclipse
import java.util.Properties; import org.ejml.simple.SimpleMatrix; import edu.stanford.nlp.ling.CoreAnnotations; import edu.stanford.nlp.neural.rnn.RNNCoreAnnotations; import edu.stanford.nlp.pipeline.Annotation; import edu.stanford.nlp.pipeline.StanfordCoreNLP; import edu.stanford.nlp.sentiment.SentimentCoreAnnotations; import edu.stanford.nlp.sentiment.SentimentCoreAnnotations.SentimentAnnotatedTree; import edu.stanford.nlp.trees.Tree; import edu.stanford.nlp.util.CoreMap; public class NLP { static StanfordCoreNLP pipeline; public static void init() { Properties props = new Properties(); props.setProperty("annotators", "tokenize, ssplit, parse, sentiment"); pipeline = new StanfordCoreNLP(props); } public static int findSentiment(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(SentimentAnnotatedTree.class); int sentiment = RNNCoreAnnotations.getPredictedClass(tree); SimpleMatrix sentiment_new = RNNCoreAnnotations.getPredictions(tree); String partText = sentence.toString(); if (partText.length() > longest) { mainSentiment = sentiment; longest = partText.length(); } } } return mainSentiment; } }
2.Создайте новый класс для разбора вашего предложения с помощью NLP
import java.util.ArrayList; public class What2Think { public static void main(String[] args) { ArrayList<String> tweets = new ArrayList<String>(); tweets.add("In this country, \"democracy\" means pro-government. #irony"); NLP.init(); for(String tweet : tweets) { System.out.println(tweet + " : " + NLP.findSentiment(tweet)); } } }
Запустите его
У меня было аналогичное требование. Вы можете получить эту информацию от SimpleMatrix
SimpleMatrix sm = RNNCoreAnnotations.getPredictions(tree);
Если вы печатаете переменную см выход имеет что-то вроде этого
Type = dense , numRows = 5 , numCols = 1 0.111 0.758 0.087 0.035 0.009
Это дает оценочную вероятность. В онлайн-демонстрации вы можете увидеть эти значения в %.
Вы можете найти мою реализацию здесь.
Надеюсь, это поможет!!!