2013-09-27 3 views
7

Ich habe den folgenden Code in Python.Wie generieren Sie mehrere Parsebäume für einen mehrdeutigen Satz in NLTK?

sent = [("very","ADJ"),("colourful","ADJ"),("ice","NN"),("cream","NN"),("van","NN")] 
patterns= r""" 
    NP:{<ADJ>*<NN>+} 

""" 
NPChunker=nltk.RegexpParser(patterns) # create chunk parser 
for s in NPChunker.nbest_parse(sent): 
    print s.draw() 

Die Ausgabe lautet:

(S (NP very/ADJ colourful/ADJ ice/NN cream/NN van/NN)) 

Aber die Ausgabe sollte noch 2 Parse-Bäume haben.

Das Problem ist, dass nur der erste reguläre Ausdruck von RegexpParser genommen wird. Wie kann ich alle möglichen Parse Bäume auf einmal erzeugen?

Antwort

3

Dies ist mit der RegexpParser-Klasse nicht möglich. Er erbt die nbest_parse-Methode von der ParserI-Schnittstelle, und beim Betrachten des Quellcodes (https://github.com/nltk/nltk/blob/master/nltk/parse/api.py) ist ersichtlich, dass er standardmäßig die Parse-Methode der Basisklasse ausführt und diese als iterable zurückgibt.

Als jemand versuchte, in Chunking with nltk zu erklären, sind die Chunking-Klassen nicht das Werkzeug für diesen Zweck (noch!), Schauen Sie sich http://nltk.org/book/ch08.html, gibt es einige schnelle Beispiele, die Sie nur zur Hälfte mit, was Sie nehmen würde erreichen wollen, erfordern eine Menge Vorverarbeitung und intelligentes Design.