Согласно этой теме: Как получить дерево зависимостей с помощью spaCy? Я знаю, как составить список, а также выбрать свойства для печати.
Что я не знаюзнать, как получить уровень для каждого элемента (не обязательно в дереве, но, по крайней мере, в виде списка).Я запустил код из https://github.com/explosion/spaCy/issues/533, чтобы получить формат "CoNLL", но индекс указывает на другое значение, кроме уровня.
Как установить этот итератор для получения уровня?(например: корень равен 0, листья - это номер самого высокого уровня)
Итератор:
head_idx = word.i-sent[0].i+1
Пробовал различные проверки, такие как количество перечислений в .children
или .root.ancestors
, новыдает странные результаты.
РЕДАКТИРОВАТЬ
Найден некоторый намек, но он не работает правильно:
Дерево:
Tree('conversion:NN:ROOT', ['proposed:VBN:amod', Tree('of:IN:prep', [Tree('dwelling:VBG:pobj', ['existing:VBG:amod', 'two:CD:nummod', 'storey:NNS:amod'])]), Tree('into:NNP:prep', [Tree('1x:NN:pobj', ['1:CD:nummod'])])])
Я повторяю, используя:
for pos in t.treepositions():
print(t[pos][0], len(pos))
, но результат странный:
proposed:VBN:amod 0
p 1
(dwelling:VBG:pobj existing:VBG:amod two:CD:nummod storey:NNS:amod) 1
existing:VBG:amod 2
e 3
t 3
s 3
(1x:NN:pobj 1:CD:nummod) 1
1:CD:nummod 2
1 3
Также с настройкой print(t[pos], len(pos))
не все в порядке.Что я не понимаю здесь?Значения глубины (отметка уровня) кажутся нормальными, а имена полей - нет.