Я пытаюсь пересечь дерево и получить определенные поддеревья в конкретную структуру данных. Я думаю, что пример это лучший способ объяснить это:Обход дерева и получение соседних дочерних узлов в Python
Для этого дерева, я хочу корневой узел и его дети. Тогда все дети, у которых есть свои дети, должны проходить одинаково, и так далее. Так для приведенного выше дерева, мы в конечном итоге со структурой данных, такие как:
[
(a, [b, c]),
(c, [d, e, f]),
(f, [g, h]),
]
У меня есть некоторый код, до сих пор для производства, но есть проблема, что он останавливается слишком рано (или, что то, что кажется):
from spacy.en import English
def _subtrees(sent, root=None, subtrees=[]):
if not root:
root = sent.root
children = list(root.children)
if not children:
return subtrees
subtrees.append((root, [child for child in children]))
for child in children:
return _subtrees(sent, child, subtrees)
nlp = English()
doc = nlp('they showed us an example')
print(_subtrees(list(doc.sents)[0]))
Обратите внимание, что этот код не будет воспроизводить то же дерево, что и на изображении. Я чувствую, что генератор будет лучше подходит и здесь, но мой генератор-фу еще хуже, чем моя рекурсия-фу.
Вы видите [этот вопрос] (http://stackoverflow.com/questions/3009935/looking-for-a-good-python-tree-data-structure)? – Selcuk
Нет, но просматривая это сейчас, пока я вижу много обхода дерева вообще, ничего, что вдохновило меня на то, чтобы уладить мою проблему. –
Можете ли вы предоставить полный пример запуска в конце вашего вопроса, даже, возможно, с помощью примера ввода, чтобы мы могли скопировать его в редактор и попытаться работать над ним? –