换行时的Spacy自定义句子分割

问题描述 投票:0回答:1

我正在尝试将this文档拆分为多个段落。具体来说,只要有换行符(<br>

,我就想分割文本

这是我正在使用的代码,但未产生希望的结果

nlp = spacy.load("en_core_web_lg")

def set_custom_boundaries(doc):
    for token in doc[:-1]:
        if token.text == "<br>":
            doc[token.i+1].is_sent_start = True
    return doc

nlp.add_pipe(set_custom_boundaries, before="parser")
doc = nlp(text)
print([sent.text for sent in doc.sents])

使用NLTK's TextTilingTokenizer可以实现类似的解决方案,但想检查Spacy中是否存在相似的事物

python nlp nltk data-science spacy
1个回答
0
投票

您快到了,但是问题是默认的Tokenizer在''上分开,因此条件token.text == "<br>"永远不会为真。我要在<br>之前和之后添加空间。例如:

import spacy
from spacy.symbols import ORTH


def set_custom_boundaries(doc):
    for token in doc[:-1]:
        if token.text == "<br>":
            doc[token.i+1].is_sent_start = True
    return doc

nlp = spacy.load("en_core_web_sm")
text = "the quick brown fox<br>jumps over the lazy dog"
text = text.replace('<br>', ' <br> ')
special_case = [{ORTH: "<br>"}]
nlp.tokenizer.add_special_case("<br>", special_case)

nlp.add_pipe(set_custom_boundaries, first=True)
doc = nlp(text)
print([sent.text for sent in doc.sents])

也请看一下此PR,在将其合并到母版后,将不再需要在空格中换行。

https://github.com/explosion/spaCy/pull/4259

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.