如何避免 NLTK 的句子分词器在缩写时分裂?

How to avoid NLTK's sentence tokenizer splitting on abbreviations?

我目前正在使用NLTK进行语言处理,但是我遇到了句子分词的问题。

问题来了: 假设我有一句话:"Fig. 2 shows a U.S.A. map." 当我使用 punkt tokenizer 时,我的代码如下所示:

from nltk.tokenize.punkt import PunktSentenceTokenizer, PunktParameters
punkt_param = PunktParameters()
abbreviation = ['U.S.A', 'fig']
punkt_param.abbrev_types = set(abbreviation)
tokenizer = PunktSentenceTokenizer(punkt_param)
tokenizer.tokenize('Fig. 2 shows a U.S.A. map.')

它returns这个:

['Fig. 2 shows a U.S.A.', 'map.']

分词器无法检测缩写 "U.S.A.",但可以检测 "fig"。 现在,当我使用 NLTK 提供的默认分词器时:

import nltk
nltk.tokenize.sent_tokenize('Fig. 2 shows a U.S.A. map.')

这次我得到:

['Fig.', '2 shows a U.S.A. map.']

它能识别更常见的 "U.S.A." 但无法识别 "fig"!

如何结合这两种方法?我想使用默认缩写选项以及添加我自己的缩写。

我认为缩写列表中 u.s.a 的小写对您来说很合适 试试这个,

from nltk.tokenize.punkt import PunktSentenceTokenizer, PunktParameters
punkt_param = PunktParameters()
abbreviation = ['u.s.a', 'fig']
punkt_param.abbrev_types = set(abbreviation)
tokenizer = PunktSentenceTokenizer(punkt_param)
tokenizer.tokenize('Fig. 2 shows a U.S.A. map.')

它returns对我来说:

['Fig. 2 shows a U.S.A. map.']