2017-03-04 56 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