【问题标题】:Python: Extracting subject and its dependent phrases from textPython:从文本中提取主题及其相关短语
【发布时间】:2020-09-12 23:55:43
【问题描述】:

我正在尝试关注线程 (How to extract subjects in a sentence and their respective dependent phrases?)。我还想从文本中提取主题及其依赖项。

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()

当我运行上面的代码时,它会抛出以下错误:

---------------------------------------------------------------------------
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'

我不确定我在哪里犯了错误。谁能帮忙解决这个问题?

【问题讨论】:

    标签: python nlp nltk spacy


    【解决方案1】:

    有趣的图书馆。

    您的上下文需要是不同的对象。该错误明确表示。查看包官方example

    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.')
    

    【讨论】:

      【解决方案2】:

      看起来您正在将一个字符串作为text 变量传递到这一行

      engine = PipelineEngine(pipes_structure, Context(text), [0, 1, 2])
      

      将第 4 行替换为

      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.')
      

      因为这是他们在您引用的帖子中所做的。

      这种方式text 不是字符串,而是 nlp 函数吐出的任何类型,所以它在倒数第二行起作用。

      【讨论】:

        猜你喜欢
        • 2019-08-16
        • 1970-01-01
        • 2017-10-16
        • 1970-01-01
        • 2020-08-16
        • 1970-01-01
        • 1970-01-01
        • 2021-06-16
        • 1970-01-01
        相关资源
        最近更新 更多