Python: extraction du sujet et de ses phrases dépendantes du texte

Sep 12 2020

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

1 ktalik Sep 12 2020 at 13:11

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.')
1 mazore Sep 12 2020 at 13:13

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.