python 带缩略语的空间分裂句

idv4meu8  于 2023-04-04  发布在  Python
关注(0)|答案(2)|浏览(77)

spaCy在有点表示缩写时会错误地拆分句子。

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

产生两个句子而不是一个。我如何正确地做到这一点?

lo8azlld

lo8azlld1#

如果你使用的是标准的英语模型,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]
yeotifhr

yeotifhr2#

在@augustomen的anwser -- update for spaCy v3. 5之后
从spaCy v3.0开始,从快捷方式加载模型已过时

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

tokenizer无法覆盖token的引理,请使用norm代替

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

相关问题