如何避免NLTK的句子标记器拆分缩写?

joe*_*ong 12 python nlp tokenize nltk

我目前正在使用NLTK进行语言处理,但我遇到了句子标记化的问题.

问题在于:假设我有一句话:"图2显示了美国地图." 当我使用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.')
Run Code Online (Sandbox Code Playgroud)

它返回:

['Fig. 2 shows a U.S.A.', 'map.']
Run Code Online (Sandbox Code Playgroud)

标记器无法检测缩写"USA",但它在"fig"上工作.现在当我使用默认的tokenizer时,NLTK提供:

import nltk
nltk.tokenize.sent_tokenize('Fig. 2 shows a U.S.A. map.')
Run Code Online (Sandbox Code Playgroud)

这次我得到:

['Fig.', '2 shows a U.S.A. map.']
Run Code Online (Sandbox Code Playgroud)

它承认更常见的"美国",但没有看到"无花果"!

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

Pra*_*uri 14

我认为缩写列表中的美国小写将适用于你试试这个,

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.')
Run Code Online (Sandbox Code Playgroud)

它将此返回给我:

['Fig. 2 shows a U.S.A. map.']
Run Code Online (Sandbox Code Playgroud)