2013-09-27 12 views
7

Ho il seguente codice in Python.Come generare più alberi di analisi per una frase ambigua 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() 

L'output è:

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

Ma l'uscita dovrebbe avere un altro 2 alberi di analisi.

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

Il problema è che solo la prima espressione regolare viene presa dal RegexpParser. Come posso generare tutti i possibili alberi di analisi contemporaneamente?

risposta

3

Questo non è possibile con la classe RegexpParser. Esso eredita il metodo nbest_parse dall'interfaccia di ParserI e, guardando il codice sorgente (https://github.com/nltk/nltk/blob/master/nltk/parse/api.py), si può vedere che è appena configurato per eseguire il metodo di analisi della classe base e restituirlo come iterabile.

Come qualcuno ha cercato di spiegare in Chunking with nltk, le classi di chunking non sono lo strumento da utilizzare per questo scopo (ancora!), Dare un'occhiata a http://nltk.org/book/ch08.html, ci sono alcuni esempi rapidi, che ti porterebbero solo a metà strada con quello che vuole raggiungere, richiedendo un sacco di pre-elaborazione e design intelligente.

Problemi correlati