L'arbre n'est pas un objet en soi; vous le parcourez simplement en naviguant via les relations entre les jetons. C'est pourquoi la documentation parle de naviguer dans l'arbre, mais pas de le 'récupérer'.
Tout d'abord, analysons un peu de texte pour obtenir un Doc
objet :
>>> import spacy
>>> nlp = spacy.load('fr_core_news_sm')
>>> doc = nlp('D'abord, j'ai écrit quelques phrases. Ensuite, spaCy les a analysées. Hourra!')
doc
est une Séquence
d'objets Jeton
:
>>> doc[0]
D'abord
>>> doc[1]
,
>>> doc[2]
j'
>>> doc[3]
ai
Mais il n'a pas un seul jeton racine. Nous avons analysé un texte composé de trois phrases, donc il y a trois arbres distincts, chacun avec sa propre racine. Si nous voulons commencer notre analyse à partir de la racine de chaque phrase, il sera utile d'obtenir les phrases en tant qu'objets distincts d'abord. Heureusement, doc
nous expose ceux-ci via la propriété .sents
:
>>> phrases = list(doc.sents)
>>> for phrase in phrases:
... print(phrase)
...
D'abord, j'ai écrit quelques phrases.
Ensuite, spaCy les a analysées.
Hourra!
Chacune de ces phrases est une Span
avec une propriété .root
pointant vers son jeton racine. Habituellement, le jeton racine sera le verbe principal de la phrase (bien que cela puisse ne pas être vrai pour des structures de phrase inhabituelles, telles que des phrases sans verbe) :
>>> for phrase in phrases:
... print(phrase.root)
...
écrit
analysées
Hourra
Avec le jeton racine trouvé, nous pouvons naviguer dans l'arbre via la propriété .children
de chaque jeton. Par exemple, trouvons le sujet et l'objet du verbe dans la première phrase. La propriété .dep_
de chaque jeton enfant décrit sa relation avec son parent ; par exemple un dep_
de 'nsubj'
signifie qu'un jeton est le sujet nominal de son parent.
>>> jeton_racine = phrases[0].root
>>> for enfant in jeton_racine.children:
... if enfant.dep_ == 'nsubj':
... sujet = enfant
... if enfant.dep_ == 'dobj':
... obj = enfant
...
>>> sujet
j'
>>> obj
phrases
Nous pouvons également continuer à descendre dans l'arbre en visualisant les enfants de l'un de ces jetons :
>>> list(obj.children)
[quelques]
Ainsi, avec les propriétés ci-dessus, vous pouvez naviguer dans l'ensemble de l'arbre. Si vous souhaitez visualiser certains arbres de dépendances pour des exemples de phrases afin de vous aider à comprendre la structure, je vous recommande d'essayer displaCy.