in generale Una testa di un sostantivo è un nome che è più a destra del NP come mostrato sotto l'albero è la testa del padre NP . CosìTrovare la testa di una frase nominale in NLTK e stanford parse secondo le regole di trovare la testa di un NP
ROOT | S ___|________________________ NP | ___|_____________ | | PP VP | ____|____ ____|___ NP | NP | PRT ___|_______ | | | | DT JJ NN NN IN NNP VBD RP | | | | | | | | The old oak tree from India fell down
Out [40]: Albero ('S', [Albero ('NP', [Albero ('NP', [Albero ('DT', [ 'La']), Albero (' JJ ', [' old ']), Tree (' NN ', [' oak ']), Tree (' NN ', [' tree '])]), Tree (' PP ', [Tree (' IN ' , ['da']), Albero ('NP', [Albero ('NNP', ['India'])])])]), Albero ('VP', [Albero ('VBD', ['fell ']), Albero (' PRT ', [Albero (' RP ', [' basso '])])])])
Il seguente codice based on a java implementation utilizza una regola semplicistica per trovare la testa del NP, ma ho bisogno di essere basata sul rules:
parsestr='(ROOT (S (NP (NP (DT The) (JJ old) (NN oak) (NN tree)) (PP (IN from) (NP (NNP India)))) (VP (VBD fell) (PRT (RP down)))))'
def traverse(t):
try:
t.label()
except AttributeError:
return
else:
if t.label()=='NP':
print 'NP:'+str(t.leaves())
print 'NPhead:'+str(t.leaves()[-1])
for child in t:
traverse(child)
else:
for child in t:
traverse(child)
tree=Tree.fromstring(parsestr)
traverse(tree)
Th e sopra il codice dà uscita:
NP: [ 'The', 'vecchio', 'quercia', 'albero', 'da', 'India'] NPhead: India NP: [ 'The', ' vecchio', 'quercia', 'albero'] NPhead: albero NP: [ 'India'] NPhead: India
Anche se ora il suo dando uscita corretta per la sentenza data, ma ho bisogno di incorporare una condizione che solo la maggior parte dei sostantivi viene estratta come testa, attualmente non controlla se si tratta di un sostantivo (NN)
print 'NPhead:'+str(t.leaves()[-1])
Quindi, qualcosa come seguire nella condizione testa np nel codice di cui sopra:
t.leaves().getrightmostnoun()
Michael Collins dissertation (Appendix A) include regole di testa di accertamento per la Penn Treebank, e, quindi, non è necessario che solo il sostantivo più a destra è la testa. Quindi le condizioni di cui sopra dovrebbero incorporare tale scenario.
Per il seguente esempio, come indicato in una delle risposte:
(NP (NP la persona) che ha dato (NP il discorso)) è andato a casa
Il sostantivo capo della il soggetto è la persona, ma l'ultimo nodo di uscita del NP è la persona che ha dato il discorso.
Qual è la tua domanda? – barny
@barny come trovare la testa e NP – stackit
Si prega di leggere la pagina di aiuto http://stackoverflow.com/help/mcve. In questo caso, mostra l'output che * do * get: "non funziona" non è sufficiente per StackOverflow. Inoltre, prova ad aggiungere ulteriori dichiarazioni di stampa al tuo codice (come ad esempio prima di attraversare (figlio) e un altro in entrata per attraversare). Pubblica l'output di quella traccia di esecuzione, a condizione che non mostri immediatamente * te * il problema. – Prune