Python: extraction du sujet et de ses phrases dépendantes du texte
J'essaye de suivre le fil ( Comment extraire des sujets dans une phrase et leurs expressions dépendantes respectives? ). Je souhaite également extraire le sujet et ses dépendants du texte.
import spacy
from textpipeliner import PipelineEngine, Context
from textpipeliner.pipes import *
text = 'No Offline Maps! It used to have offline maps but they disappeared. It now has a menu option to watch a video in exchange for maps but it never downloads the map. Makes the app useless to me.'
pipes_structure = [
SequencePipe([
FindTokensPipe("VERB/nsubj/*"),
NamedEntityFilterPipe(),
NamedEntityExtractorPipe()
]),
FindTokensPipe("VERB"),
AnyPipe([
SequencePipe([
FindTokensPipe("VBD/dobj/NNP"),
AggregatePipe([
NamedEntityFilterPipe("GPE"),
NamedEntityFilterPipe("PERSON")
]),
NamedEntityExtractorPipe()
]),
SequencePipe([
FindTokensPipe("VBD/**/*/pobj/NNP"),
AggregatePipe([
NamedEntityFilterPipe("LOC"),
NamedEntityFilterPipe("PERSON")
]),
NamedEntityExtractorPipe()
])
])
]
engine = PipelineEngine(pipes_structure, Context(text), [0, 1, 2])
engine.process()
Lorsque j'ai exécuté le code ci-dessus, l'erreur suivante est générée:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-22-5f5a5c9e8e51> in <module>()
----> 1 engine = PipelineEngine(pipes_structure, Context(text), [0, 1, 2])
2 engine.process()
~/anaconda3/lib/python3.6/site-packages/textpipeliner/context.py in __init__(self, doc)
4 self._current_sent_idx = -1
5 self._paragraph = self._sents[0:9]
----> 6 for s in doc.sents:
7 self._sents.append(s)
8 self.doc = doc
AttributeError: 'str' object has no attribute 'sents'
Je ne sais pas où je fais l'erreur. Quelqu'un pourrait-il aider à résoudre le problème?
Réponses
Bibliothèque intéressante.
Votre contexte doit être un objet différent. L'erreur le dit explicitement. Consultez l' exemple officiel du package :
nlp = spacy.load("en")
text = nlp('No Offline Maps! It used to have offline maps but they disappeared. It now has a menu option to watch a video in exchange for maps but it never downloads the map. Makes the app useless to me.')
Il semble que vous transmettez une chaîne comme textvariable dans cette ligne
engine = PipelineEngine(pipes_structure, Context(text), [0, 1, 2])
Remplacez la ligne 4 par
nlp = spacy.load("en")
text = nlp('No Offline Maps! It used to have offline maps but they disappeared. It now has a menu option to watch a video in exchange for maps but it never downloads the map. Makes the app useless to me.')
car c'est ce qu'ils font dans le post auquel vous avez fait référence.
Cette façon textn'est pas une chaîne, mais c'est le type que la fonction nlp crache, donc cela fonctionne de la 2ème à la dernière ligne.