Encontrar cabeça de uma frase substantiva em NLTK e Stanford analisar de acordo com as regras de encontrar cabeça de um NP
geralmente A cabeça de uma frase substantiva é um substantivo que está mais à direita do NP, como mostrado abaixo na árvore, é a cabeça do NP pai. assim
ROOT | S ___|________________________ NP | ___|_____________ | | PP VP | ____|____ ____|___ NP | NP | PRT ___|_______ | | | | DT JJ NN NN IN NNP VBD RP | | | | | | | | The old oak tree from India fell down
Fora [40]: Árvore ('S', [Árvore ('NP', [Árvore ('NP', [Árvore ('DT', ['The'])), Árvore ('JJ', ['antiga'] ), Árvore ('NN', ['oak']), Árvore ('NN', ['tree'])]), Árvore ('PP', [Árvore ('IN', ['from']), Árvore ('NP', [Árvore ('NNP', ['Índia'])])])]), Árvore ('VP', [Árvore ('VBD', ['caiu'])), Árvore ('PRT ', [Árvore (' RP ', [' abaixo '])])])])
O código a seguirbaseado em uma implementação java usa uma regra simplista para encontrar o chefe do NP, mas preciso basear-me noregras:
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)
O código acima fornece a saída:
NP: ['O', 'velho', 'carvalho', 'árvore', 'de', 'Índia'] NPhead: Índia NP: ['O', 'velho', 'carvalho', 'árvore'] NPhead : tree NP: ['Índia'] NPhead: Índia
Embora agora esteja dando a saída correta para a sentença dada, mas preciso incorporar uma condição que apenas o substantivo mais à direita seja extraído como cabeça, atualmente ele não verifica se era um substantivo (NN)
print 'NPhead:'+str(t.leaves()[-1])
Então, algo como seguir na condição np head no código acima:
t.leaves().getrightmostnoun()
Dissertação de Michael Collins (Apêndice A) inclui regras de busca de cabeças para o Penn Treebank e, portanto, não é necessário que apenas o substantivo mais à direita seja a cabeça. Portanto, as condições acima devem incorporar esse cenário.
Para o exemplo a seguir, conforme indicado em uma das respostas:
(NP (NP a pessoa) que deu (NP a conversa)) foi para casa
O substantivo principal do sujeito é pessoa, mas o último nó de saída do NP é a pessoa que deu a palestra.