带缩写的spacy拆分句子

时间:2018-12-29 09:30:46

标签: spacy

spaCy在有缩写点的情况下错误地拆分句子。

import spacy
tool = spacy.load('en')
x = tool('It starts at 9:00 a.m. Eastern Standard Time.')
list(x.sents)

产生两个句子,而不是一个。如何正确执行此操作?

1 个答案:

答案 0 :(得分:1)

如果您使用的是标准英语模型en_core_web_smen_core_web_mden_core_web_lg,则应该已经处理过像这样的最常见缩写:

>>> import spacy
>>> nlp = spacy.load('en_core_web_sm')
>>> doc = nlp('It starts at 9:00 a.m. Eastern Standard Time.')
>>> list(doc.sents)
[It starts at 9:00 a.m. Eastern Standard Time.]

但是,如果您使用的模型无法识别您的缩写,则可以使用add_special_case来正确处理它。例如,在以下情况下,Pres.不被识别为缩写,因此返回两个句子,而不仅仅是一个句子:

>>> import spacy
>>> nlp = spacy.load('en_core_web_sm')
>>> doc = nlp('I want to talk to Pres. Michael')
>>> list(doc.sents)
[I want to talk to Pres., Michael]

您必须加载自己的特殊情况库,以便告知模型这是缩写,而不是句子的结尾。令牌(ORTH)的逐字记录文本可以是您想要的任何内容,也可以包含点。

>>> from spacy.attrs import ORTH, LEMMA
>>> nlp.tokenizer.add_special_case('Pres.', [{ORTH: 'Pres', LEMMA: 'president'}])
>>> doc = nlp('I want to talk to Pres. Michael')
>>> list(doc.sents)
[I want to talk to Pres Michael]