Я предполагаю, что пытаюсь ориентироваться в дереве разбора SpaCy более тупым способом, чем это предусмотрено.
Например, если у меня есть предложения типа: «Он был гением» или «Пес был зеленым», я хочу иметь возможность сохранять объекты в переменных («гений» и «зеленый»).
token.children предоставляет IMMEDIATE синтаксические зависимости, поэтому в первом примере дочерние элементы «was» - это «он» и «гений», а затем «a» - это потомок «гения». Это не так полезно, если я просто хочу, чтобы весь компонент был «гением». Я не уверен, как восстановить это из token.children или есть лучший способ.
Я могу выяснить, как сопоставить «есть» и «был», используя token.text (часть того, что я пытаюсь сделать), но я не могу понять, как вернуть всю составляющую «гений», используя информацию предоставлено о детях.
import spacy
nlp = spacy.load('en_core_web_sm')
sent = nlp("He was a genius.")
for token in sent:
print(token.text, token.tag_, token.dep_, [child for child in token.children])
Это вывод:
Он PRP nsubj []
был VBD ROOT [Он, гений,.]
DT det []
гений Н.Н.
, , пунктировать []