2012-08-06 19 views
18

私はJavaとスタンフォードNLPツールキットを持つ初心者で、プロジェクトに使用しようとしています。具体的には、Stanford Corenlpツールキットを使用してテキストに注釈を付けることを試みています(コマンドラインではなくNetbeansを使用)。http://nlp.stanford.edu/software/corenlp.shtml#Usage(Stanford CoreNLP APIの使用)で提供されているコードを使用しようとしました。ファイルを出力して処理することができますか?スタンフォードコアnlp java出力

コンテンツを見るために、グラフと文章をコンソールに印刷しようとしました。それは動作します。基本的には、注釈付きのドキュメントを返す必要があるので、メインクラスから呼び出してテキストファイルを出力することができます(可能な場合)。私はstanford corenlpのAPIを調べようとしていますが、経験の不足のため、この種の情報を返すための最良の方法は実際にはわかりません。ここで

コードです:

Properties props = new Properties(); 
    props.put("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref"); 
    StanfordCoreNLP pipeline = new StanfordCoreNLP(props); 

    // read some text in the text variable 
    String text = "the quick fox jumps over the lazy dog"; 

    // create an empty Annotation just with the given text 
    Annotation document = new Annotation(text); 

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

    // these are all the sentences in this document 
    // a CoreMap is essentially a Map that uses class objects as keys and has values with custom types 
    List<CoreMap> sentences = document.get(SentencesAnnotation.class); 

    for(CoreMap sentence: sentences) { 
     // traversing the words in the current sentence 
     // a CoreLabel is a CoreMap with additional token-specific methods 
     for (CoreLabel token: sentence.get(TokensAnnotation.class)) { 
     // this is the text of the token 
     String word = token.get(TextAnnotation.class); 
     // this is the POS tag of the token 
     String pos = token.get(PartOfSpeechAnnotation.class); 
     // this is the NER label of the token 
     String ne = token.get(NamedEntityTagAnnotation.class);  
     } 

     // this is the parse tree of the current sentence 
     Tree tree = sentence.get(TreeAnnotation.class); 

     // this is the Stanford dependency graph of the current sentence 
     SemanticGraph dependencies = sentence.get(CollapsedCCProcessedDependenciesAnnotation.class); 
    } 

    // This is the coreference link graph 
    // Each chain stores a set of mentions that link to each other, 
    // along with a method for getting the most representative mention 
    // Both sentence and token offsets start at 1! 
    Map<Integer, CorefChain> graph = 
     document.get(CorefChainAnnotation.class); 
+0

私は、コンテンツを見るために、コンソールにグラフや文を印刷してみました。それは動作します。基本的には、注釈付きのドキュメントを返す必要があるので、メインクラスから呼び出してテキストファイルを出力することができます(可能な場合)。私はstanford corenlpのAPIを見ようとしていますが、経験の不足を考えれば、この種の情報を返すための最良の方法は何かを実際にはわかりません。あらかじめありがとうございます – SophieM

+0

@SophieM私は追加しましたその情報を質問に返す。将来的には編集を通して自分自身で自由にしてください(バッジを取得しても!) – SomeKittens

+0

ありがとう! @SomeKittens – SophieM

答えて

24

あなたは自然言語のいずれか、またはすべてがあなたのコード例に示す分析したら、あなたがする必要があるすべては通常のJavaの方法でファイルに送信され、たとえば、テキスト形式の出力用のFileWriterを使用します。具体的には、ここ(あなたはそれを適切なコマンドライン引数を与える場合)ファイルに送信された出力を示し、単純な完全な例です:

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

import edu.stanford.nlp.io.*; 
import edu.stanford.nlp.ling.*; 
import edu.stanford.nlp.pipeline.*; 
import edu.stanford.nlp.trees.*; 
import edu.stanford.nlp.util.*; 

public class StanfordCoreNlpDemo { 

    public static void main(String[] args) throws IOException { 
    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]); 
    } 

    StanfordCoreNLP pipeline = new StanfordCoreNLP(); 
    Annotation annotation; 
    if (args.length > 0) { 
     annotation = new Annotation(IOUtils.slurpFileNoExceptions(args[0])); 
    } else { 
     annotation = new Annotation("Kosgi Santosh sent an email to Stanford University. He didn't get a reply."); 
    } 

    pipeline.annotate(annotation); 
    pipeline.prettyPrint(annotation, out); 
    if (xmlOut != null) { 
     pipeline.xmlPrint(annotation, xmlOut); 
    } 
    // An Annotation is a Map and 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 = annotation.get(CoreAnnotations.SentencesAnnotation.class); 
    if (sentences != null && sentences.size() > 0) { 
     CoreMap sentence = sentences.get(0); 
     Tree tree = sentence.get(TreeCoreAnnotations.TreeAnnotation.class); 
     out.println(); 
     out.println("The first sentence parsed is:"); 
     tree.pennPrint(out); 
    } 
    } 

} 
+3

100万回ありがとう、@Christopher Manning – SophieM

関連する問題