2013-09-27 12 views
7

Mam następujący kod w Pythonie.Jak wygenerować wiele drzew parsowanych dla niejednoznacznego zdania w 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() 

Wyjście jest:

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

Ale wyjście powinno mieć kolejne 2 drzewo wyprowadzenia.

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

Problem polega na tym, że RegexpParser pobiera tylko pierwsze wyrażenie regularne. Jak mogę wygenerować wszystkie możliwe drzewa analizy jednocześnie?

Odpowiedz

3

Nie jest to możliwe z klasą RegexpParser. Dziedziczy on metodę nbest_parse z interfejsu ParserI i patrząc na kod źródłowy (https://github.com/nltk/nltk/blob/master/nltk/parse/api.py) można zauważyć, że domyślnie uruchamia metodę parsowania klasy bazowej i zwraca ją jako iterowalną.

Jak ktoś próbował wyjaśnić w Chunking with nltk, klasy chunking nie są narzędziem do wykorzystania w tym celu (jeszcze!), Spójrz na http://nltk.org/book/ch08.html, istnieje kilka szybkich przykładów, które tylko zabiorą Cię w połowie z tym, co ty chcesz osiągnąć, wymagając dużej ilości wstępnego przetwarzania i inteligentnego projektu.

Powiązane problemy