2012-08-06 31 views
18

Java ve Stanford NLP araç takımı ile yeni bir kullanıcıyım ve bunları bir proje için kullanmaya çalışıyorum. Özellikle, bir metin (Netbeans ve komut satırı ile değil) bir açıklama eklemek için Stanford Corenlp araç seti kullanmaya çalışıyorum ve http://nlp.stanford.edu/software/corenlp.shtml#Usage (Stanford CoreNLP API kullanma) üzerinde sağlanan kodu kullanmaya çalıştım. Soru: Herkes bana nasıl söyleyebilir Çıktıyı bir dosyaya alabilirim böylece daha fazla işleyebilirim?stanford core nlp java çıktısı

Sadece içeriği görmek için grafikleri ve tümceyi konsola yazdırmayı denedim. Bu işe yarıyor. Temel olarak neye ihtiyacım var açıklamalı belgeyi döndürmek, böylece onu ana sınıfımdan çağırabilir ve bir metin dosyası verebilirim (eğer mümkünse). Ben stanford corenlp'in API'sine bakmaya çalışıyorum, ama deneyimsizliğimden dolayı, bu tür bilgileri geri vermenin en iyi yolunun ne olduğunu gerçekten bilmiyorum. İşte

kodudur:

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

içeriği görmek için: Somut olarak, burada (bunu uygun komut satırı argümanları verirseniz) dosyaları gönderilen çıktıyı gösteren basit bir tam örnek . Bu işe yarıyor. Temel olarak neye ihtiyacım var açıklamalı belgeyi döndürmek, böylece onu ana sınıfımdan çağırabilir ve bir metin dosyası verebilirim (eğer mümkünse). Ben stanford corenlp API bakmaya çalışıyorum, ama ben deneyim eksikliği bana verilen böyle bir bilgi dönmek için en iyi yolu gerçekten bilmiyorum .. Teşekkür peşin Teşekkürler – SophieM

+0

@SophieM Ben ekledim soruya bu bilgi. Gelecekte, düzenleme yoluyla kendiniz yapmaktan çekinmeyin (hatta bir rozetiniz olsun!) – SomeKittens

+0

Teşekkürler! @SomeKittens – SophieM

cevap

24

doğal dilin herhangi bir veya tüm kod örneğinde gösterildiği analizleri sonra, yapmanız gereken tek şey, normal bir Java moda bir dosyaya göndermek, Örneğin, metin formatı çıkışı için bir FileWriter ile. Ben, grafikler ve konsola cümleyi baskı denedim

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

Milyonlarca kez teşekkür ederim, @Christopher Manning – SophieM

İlgili konular