Обычно голова nounfrase является существительным, которое является самым правым из NP, как показано ниже. Дерево - это головка родительского 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]: Дерево ('S', [Дерево ('NP', [Дерево ('NP', [Дерево ('DT', ['The']), Дерево ('JJ', [' old ']), Tree (' NN ', [' oak ']), Tree (' NN ', [' tree '])]), Tree (' PP ', [Tree (' IN ', [' from ' ]), Tree ('NP', [Tree ('NNP', ['India'])])])]), Tree ('VP', [Tree ('VBD', ['fall']), Tree ('PRT', [Tree ('RP', ['down'])])])])
Следующий код на основе java-реализации использует упрощенное правило для поиска главы NP, но мне нужно основываться на 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)
Приведенный выше код дает результат:
NP: ['', 'old', 'oak', 'tree', 'from', 'India'] NPhead: Индия NP: ['', 'старый', 'дуб', 'дерево'] NPhead: дерево NP: [ 'Индия'] NPhead: Индия
Хотя теперь он дает правильный результат для данного предложения, но мне нужно включить условие, которое только самое большее существительное извлекается как голова, в настоящее время он не проверяет, было ли оно существительным (NN)
print 'NPhead:'+str(t.leaves()[-1])
Итак, что-то вроде следующего в состоянии np head в приведенном выше коде:
t.leaves().getrightmostnoun()
Майкл Коллинз (Приложение A) содержит правила поиска главы для Penn Treebank, и, следовательно, нет необходимости, чтобы только самые правые существительное - это голова. Следовательно, вышеуказанные условия должны включать такой сценарий.
В следующем примере, приведенном в одном из ответов:
(NP (NP человек), который дал (NP разговор)) пошел домой
Главным существительным предмета является человек, но последний отпуск node NP - это тот, кто дал разговор.