Ho alcune domande sulle funzioni dell'albero di NLTK. Sto cercando di estrarre una determinata parola dalla struttura ad albero come quella indicata di seguito.Estrazione di un valore foglia specifico dalla struttura ad albero nltk con Python
test = Tree.parse('(ROOT(SBARQ(WHADVP(WRB How))(SQ(VBP do)(NP (PRP you))(VP(VB ask)(NP(DT a)(JJ total)(NN stranger))(PRT (RP out))(PP (IN on)(NP (DT a)(NN date)))))))')
print "Input tree: ", test
print test.leaves()
(SBARQ
(WHADVP (WRB How))
(SQ
(VBP do)
(NP (PRP you))
(VP
(VB ask)
(NP (DT a) (JJ total) (NN stranger))
(PRT (RP out))
(PP (IN on) (NP (DT a) (NN date)))))))
['How', 'do', 'you', 'ask', 'a', 'total', 'stranger', 'out', 'on', 'a', 'date']
È possibile trovare un elenco di tutte le parole che utilizzano la funzione leaves(). C'è un modo per ottenere solo una foglia specifica? Ad esempio: mi piacerebbe ottenere solo il nome/cognome dalla frase NP? La risposta sarebbe "straniera" per il primo nome e "data" come ultimo nome.
Grazie funziona. Ora ho solo bisogno di prendere il primo oggetto della lista. – Cryssie
Utilizzando Python 3.4.1 e NLTK 3.2.1, usare 'x.label()' piuttosto che 'x.node' per cercare i risultati, altrimenti si otterrà un' NotImplementedError ("Use label() per accedere a un'etichetta di nodo . ")' eccezione. I.e: 't = list (r.subtrees (filter = lambda x: x.label() == 'NP'))' – InfectedPacket