spaCy在有缩写点的情况下错误地拆分句子。
import spacy
tool = spacy.load('en')
x = tool('It starts at 9:00 a.m. Eastern Standard Time.')
list(x.sents)
产生两个句子,而不是一个。如何正确执行此操作?
答案 0 :(得分:1)
如果您使用的是标准英语模型en_core_web_sm
或en_core_web_md
或en_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]