2017-03-04 53 views
0

审查实现整体情绪我使用斯坦福CoreNLP为了获得25,000电影评论的情感分析。不过,我已经实现了让每个评论的每个句子的情绪,但我想知道是否有人知道我怎么能得到全面审查,而不是在审查中的每一句话的感悟?如何通过使用斯坦福CoreNLP

使用的代码IM是:

import java.io.*; 
import java.util.*; 

import edu.stanford.nlp.coref.CorefCoreAnnotations; 

import edu.stanford.nlp.coref.data.CorefChain; 
import edu.stanford.nlp.io.*; 
import edu.stanford.nlp.ling.*; 
import edu.stanford.nlp.pipeline.*; 
import edu.stanford.nlp.semgraph.SemanticGraph; 
import edu.stanford.nlp.semgraph.SemanticGraphCoreAnnotations; 
import edu.stanford.nlp.sentiment.SentimentCoreAnnotations; 
import edu.stanford.nlp.trees.*; 
import edu.stanford.nlp.util.*; 

/** This class demonstrates building and using a Stanford CoreNLP pipeline. */ 
public class sentimentMain { 

    /** Usage: java -cp "*" StanfordCoreNlpDemo [inputFile [outputTextFile [outputXmlFile]]] */ 
    public static void main(String[] args) throws IOException { 
    // set up optional output files 
    PrintWriter out; 
    if (args.length > 1) { 
     out = new PrintWriter(args[1]); 
    } else { 
     out = new PrintWriter(System.out); 
    } 
    PrintWriter xmlOut = null; 
    if (args.length > 2) { 
     xmlOut = new PrintWriter(args[2]); 
    } 

    // Create a CoreNLP pipeline. To build the default pipeline, you can just use: 
    // StanfordCoreNLP pipeline = new StanfordCoreNLP(props); 
    // Here's a more complex setup example: 
    // Properties props = new Properties(); 
    // props.put("annotators", "tokenize, ssplit, pos, lemma, ner, depparse"); 
    // props.put("ner.model", "edu/stanford/nlp/models/ner/english.all.3class.distsim.crf.ser.gz"); 
    // props.put("ner.applyNumericClassifiers", "false"); 
    // StanfordCoreNLP pipeline = new StanfordCoreNLP(props); 

    // Add in sentiment 
    Properties props = new Properties(); 
    props.setProperty("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref, sentiment"); 

    StanfordCoreNLP pipeline = new StanfordCoreNLP(props); 
    File[] files = new File("C:/stanford-corenlp-full-2016-10-31/dataset").listFiles(); 

    String line = null; 

    try{ 
     for (File file : files) { 
      if (file.exists()) { 
       BufferedReader in = new BufferedReader(new FileReader(file)); 
       while((line = in.readLine()) != null) 
       { 
        Annotation document = new Annotation(line); 

        // run all the selected Annotators on this text 
        pipeline.annotate(document); 

        // this prints out the results of sentence analysis to file(s) in good formats 
        pipeline.prettyPrint(document, out); 
        if (xmlOut != null) { 
         pipeline.xmlPrint(document, xmlOut); 
        } 

        // An Annotation is a Map with Class keys for the linguistic analysis types. 
        // You can get and use the various analyses individually. 
        // For instance, this gets the parse tree of the first sentence in the text. 
        List<CoreMap> sentences = document.get(CoreAnnotations.SentencesAnnotation.class); 
        if (sentences != null && ! sentences.isEmpty()) { 
         CoreMap sentence = sentences.get(0); 
         /*out.println("The keys of the first sentence's CoreMap are:"); 
         out.println(sentence.keySet()); 
         out.println(); 
         out.println("The first sentence is:"); 
         out.println(sentence.toShorterString()); 
         out.println(); 
         out.println("The first sentence tokens are:");*/ 
         for (CoreMap token : sentence.get(CoreAnnotations.TokensAnnotation.class)) { 
         //out.println(token.toShorterString()); 
         } 
         Tree tree = sentence.get(TreeCoreAnnotations.TreeAnnotation.class); 
         //out.println(); 
         //out.println("The first sentence parse tree is:"); 
         tree.pennPrint(out); 
         //out.println(); 
         //out.println("The first sentence basic dependencies are:"); 
         //out.println(sentence.get(SemanticGraphCoreAnnotations.BasicDependenciesAnnotation.class).toString(SemanticGraph.OutputFormat.LIST)); 
         //out.println("The first sentence collapsed, CC-processed dependencies are:"); 
         SemanticGraph graph = sentence.get(SemanticGraphCoreAnnotations.CollapsedCCProcessedDependenciesAnnotation.class); 
         //out.println(graph.toString(SemanticGraph.OutputFormat.LIST)); 

         // Access coreference. In the coreference link graph, 
         // each chain stores a set of mentions that co-refer with each other, 
         // along with a method for getting the most representative mention. 
         // Both sentence and token offsets start at 1! 
         //out.println("Coreference information"); 
         Map<Integer, CorefChain> corefChains = 
          document.get(CorefCoreAnnotations.CorefChainAnnotation.class); 
         if (corefChains == null) { return; } 
         for (Map.Entry<Integer,CorefChain> entry: corefChains.entrySet()) { 
         //out.println("Chain " + entry.getKey()); 
         for (CorefChain.CorefMention m : entry.getValue().getMentionsInTextualOrder()) { 
          // We need to subtract one since the indices count from 1 but the Lists start from 0 
          List<CoreLabel> tokens = sentences.get(m.sentNum - 1).get(CoreAnnotations.TokensAnnotation.class); 
          // We subtract two for end: one for 0-based indexing, and one because we want last token of mention not one following. 
          /*out.println(" " + m + ", i.e., 0-based character offsets [" + tokens.get(m.startIndex - 1).beginPosition() + 
            ", " + tokens.get(m.endIndex - 2).endPosition() + ")");*/ 
         } 
         } 
         //out.println(); 
         out.println("The first sentence overall sentiment rating is " + sentence.get(SentimentCoreAnnotations.SentimentClass.class)); 
        } 
       } 
       in.close(); 
       //showFiles(file.listFiles()); // Calls same method again. 
      } else { 
       System.out.println("File: " + file.getName() + file.toString()); 
      } 
     } 
    }catch(NullPointerException e){ 
     e.printStackTrace(); 
    } 
    IOUtils.closeIgnoringExceptions(out); 
    IOUtils.closeIgnoringExceptions(xmlOut); 
    } 

} 

注意:大部分的代码被注释,这样只有相关的输出被控制台

回答

0

的情绪模型设计只在一个句子运行上观看并返回一句话的情绪,我们没有任何获取全部文档情绪的方法。

+0

好的,我只是在检查:)谢谢 – user7575479

+0

我还有一个简单的问题,我通过Eclipse运行我的代码,我想知道是否有一种方法可以通过Eclipse在代码上运行评估工具,而不是通过命令行? – user7575479