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);
}
}
注意:大部分的代碼被註釋,這樣只有相關的輸出被控制檯
好的,我只是在檢查:)謝謝 – user7575479
我還有一個簡單的問題,我通過Eclipse運行我的代碼,我想知道是否有一種方法可以通過Eclipse在代碼上運行評估工具,而不是通過命令行? – user7575479