Pytanie stanford core nlp java output


Jestem początkującym z zestawem narzędzi Java i Stanford NLP i próbuję wykorzystać je do projektu. W szczególności, próbuję użyć zestawu narzędzi Stanford Corenlp do adnotowania tekstu (z Netbeans, a nie wiersza poleceń) i próbowałem użyć kodu podanego na http://nlp.stanford.edu/software/corenlp.shtml#Usage (Korzystanie z interfejsu Stanford CoreNLP API). Pytanie brzmi: czy ktoś może mi powiedzieć, w jaki sposób mogę uzyskać dane wyjściowe w pliku, aby móc go dalej przetwarzać?

Próbowałem wydrukować wykresy i zdanie na konsoli, aby zobaczyć zawartość. To działa. Zasadniczo potrzebowałbym zwrócić dokument z adnotacjami, aby móc go wywołać z mojej głównej klasy i wydrukować plik tekstowy (jeśli to możliwe). Próbuję zajrzeć do API stanu Stanford corenlp, ale tak naprawdę nie wiem, jaki jest najlepszy sposób na zwrot takich informacji, biorąc pod uwagę mój brak doświadczenia.

Oto kod:

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);

18
2017-08-06 16:46


pochodzenie


Próbowałem wydrukować wykresy i zdanie na konsoli, aby zobaczyć zawartość. To działa. Zasadniczo potrzebowałbym zwrócić dokument z adnotacjami, aby móc go wywołać z mojej głównej klasy i wydrukować plik tekstowy (jeśli to możliwe). Próbuję zajrzeć do API stanu Stanford corenlp, ale tak naprawdę nie wiem, jaki jest najlepszy sposób na zwrot takich informacji, biorąc pod uwagę mój brak doświadczenia .. Z góry dziękuję - SophieM
@SophieM Dodałem te informacje do pytania. W przyszłości możesz to zrobić samodzielnie, edytując (nawet dostaniesz odznakę!) - SomeKittens
Dziękuję Ci! @SomeKittens - SophieM
@SophieM Czy możesz napisać kod? - Kenston Choi
@SophieM: Czy możesz mi powiedzieć, jak to zrobiłeś na netbeans? - user123


Odpowiedzi:


Po pokazaniu wszystkich lub wszystkich analiz języka naturalnego w przykładowym kodzie, wystarczy wysłać je do pliku w normalny sposób Java, np. Za pomocą FileWriter dla wyjścia formatu tekstowego. Konkretnie, oto prosty, kompletny przykład, który pokazuje dane wyjściowe wysłane do plików (jeśli podasz mu odpowiednie argumenty wiersza polecenia):

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);
    }
  }

}

24
2017-08-11 21:10



Dziękuję milion razy, @ Christopher Manning - SophieM