Python SpaCy中的自定义句子边界检测

Python SpaCy中的自定义句子边界检测,python,nlp,spacy,Python,Nlp,Spacy,我正试图在spaCy中编写一个自定义分句器,它将整个文档作为一个句子返回 我编写了一个自定义管道组件,它使用中的代码来实现 但我无法让它工作,因为它没有改变句子边界,将整个文档作为一个句子,而是抛出了两个不同的错误 如果我创建一个空白语言实例,并且只将自定义组件添加到管道中,则会出现以下错误: ValueError: Sentence boundary detection requires the dependency parse, which requires a statistical mo

我正试图在spaCy中编写一个自定义分句器,它将整个文档作为一个句子返回

我编写了一个自定义管道组件,它使用中的代码来实现

但我无法让它工作,因为它没有改变句子边界,将整个文档作为一个句子,而是抛出了两个不同的错误

如果我创建一个空白语言实例,并且只将自定义组件添加到管道中,则会出现以下错误:

ValueError: Sentence boundary detection requires the dependency parse, which requires a statistical model to be installed and loaded.
如果我将解析器组件添加到管道中

nlp = spacy.blank('es')
parser = nlp.create_pipe('parser')
nlp.add_pipe(parser, last=True)
def custom_sbd(doc):
    print("EXECUTING SBD!!!!!!!!!!!!!!!!!!!!")
    doc[0].sent_start = True
    for i in range(1, len(doc)):
        doc[i].sent_start = False
    return doc
nlp.begin_training()
nlp.add_pipe(custom_sbd, first=True)
我也犯了同样的错误

如果我更改了它首先解析的顺序,然后更改了句子边界,那么错误将更改为

Refusing to write to token.sent_start if its document is parsed, because this may cause inconsistent state.
因此,如果它抛出一个错误,如果它不存在或在自定义语句边界检测后执行,则需要依赖项分析,并且在第一次执行依赖项分析时出现另一个错误,那么正确的方法是什么


谢谢大家!

spaCy的Ines回答了我的问题

谢谢你提出这个问题,很抱歉,这有点让人困惑。 我很确定你描述的第一个问题已经解决了 大师。spaCy绝对应该尊重自定义语句边界, 即使在没有依赖项解析器的管道中

如果您想在不使用解析器的情况下使用自定义SBD组件,可以使用 简单的解决方案是在自定义文件中设置doc.is_parsed=True 组成部分。因此,当Doc.sents检查依赖项解析时,它看起来 at_已解析,不会抱怨

如果要将组件与解析器一起使用,请确保添加它 在解析器之前。解析器应该始终尊重已设置的 前面处理步骤中的句子边界