2015-02-23 5 views
5

Ich habe ein Korpus von Sätzen, die Stanford CoreNLP-Systeme vorverarbeitet wurden. Eine der Sachen, die es zur Verfügung stellt, ist der Parse-Baum des Satzes (konstituentenbasiert). Während ich ein Parse-Baum verstehen kann, wenn es (wie ein Baum) gezogen ist, ich bin nicht sicher, wie es in diesem Format zu lesen:Wie lesen Sie Wahlkreis basierten Parse-Baum

ZB:

  (ROOT 
      (FRAG 
      (NP (NN sent28)) 
      (: :) 
      (S 
      (NP (NNP Rome)) 
      (VP (VBZ is) 
      (PP (IN in) 
      (NP 
      (NP (NNP Lazio) (NN province)) 
      (CC and) 
      (NP 
      (NP (NNP Naples)) 
      (PP (IN in) 
      (NP (NNP Campania)))))))) 
      (. .))) 

Der ursprüngliche Satz ist:

sent28: Rome is in Lazio province and Naples in Campania . 

Wie soll ich diesen Baum lesen, oder gibt es alternativ einen Code (in Python), der es richtig macht? Danke.

Antwort

10

NLTK hat eine Klasse zum Lesen von Parse-Bäumen: nltk.tree.Tree. Die entsprechende Methode heißt fromstring. Sie können dann seine Teilbäume, Blätter, etc. iterieren

Als Nebenbemerkung: Sie möchten möglicherweise das Bit entfernen, das sent28: sagt, wie es den Parser verwirrt (es ist auch nicht ein Teil des Satzes). Sie erhalten keinen vollständigen Syntaxbaum, sondern nur einen Satzfragment.

+5

Thank you! und ich fügte 'from nltk.draw.tree import draw_trees >>> draw_trees (tree)' hinzu, um es als echten Baum zu visualisieren :-) [Oh, und ich kann 'sent28' nicht ausziehen, es ist Teil einer Aufgabe. ..] – Cheshie

+2

Vergessen zu sagen: 'Tree.pprint' ist auch sehr praktisch – mbatchkarov

-3

Sie können einfach verwenden Stanford-Parser wie:

sentences = parser.raw_parse_sents(["Hello, My name is Melroy.", "What is your name?"]) #probably raw_parse(just a string) or parse_sents(list but has been splited) 
for line in sentences: 
    for sentence in line: 
     ***sentence.draw()*** 
Verwandte Themen