Оценка Стэнфордского анализа настроений 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 4

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 

Это дает оценочную вероятность. В онлайн-демонстрации вы можете увидеть эти значения в %.

Вы можете найти мою реализацию здесь.

Надеюсь, это поможет!!!