Мне нужна небольшая помощь с деревьями NLTK.
Я пытаюсь извлечь некоторые поддеревья из этого французского дерева:
(SENT (NP-SUJ↓ (PRO=H Personne)) (VN=H (ADV* ne) (V=H sait)) (ADV* exactement) (PONCT* .))
Я хочу только извлечь деревья, имеющие «= H» в конце метки POS, а затем добавить родительский узел:
Вот так: (NP-SUJ↓ (PRO=H Personne)) and this: (VN=H (V=H sait))
И я написал функцию для этого:
def AddParent(tree):
grammar = []
for subtree in tree.subtrees():
if subtree.height()==2 and subtree.label().endswith("=H"):
PartialTree = ParentedTree(subtree.parent().label(),
[ParentedTree(subtree.label(), subtree)])
grammar.append(PartialTree)
return grammar
#Test
pt = ParentedTree.fromstring("(SENT (NP-SUJ↓ (PRO=H Personne)) (VN=H (ADV* ne) (V=H sait)) (ADV* exactement) (PONCT* .))")
AddParent(pt)
[ParentedTree('NP-SUJ↓', [ParentedTree('PRO=H', ['Personne'])]),
ParentedTree('VN=H', [ParentedTree('V=H', ['sait'])])]
У меня здесь две проблемы: во-первых, я хочу продолжать добавлять информацию в эти поддеревья из исходного дерева. Например, я хочу продолжать добавлять узлы-предки, а затем дочерние, чтобы сделать что-то вроде этого:
(SENT (NP-SUJ↓ ) (VN=H (V=H sait)))
Но я потерял след оригинального дерева...
Во-вторых, функция parent()
возвращает все содержащиеся в ней поддеревья. И я просто хочу иметь определенные узлы.
Каким будет хороший подход для извлечения этого последнего поддерева???
Большое спасибо за Вашу помощь! Я новичок в этом, но мне очень нравится!