单词标记化NLTK的缩写问题

时间:2019-03-16 20:41:35

标签: python nltk

我想知道如何用词标记以下句子(字符串):

"I am good. I e.g. wash the dishes."

输入以下字词:

["I", "am", "good", ".", "I", "e.g.", "wash", "the", "dishes"]

现在,问题是当涉及"e.g."这样的缩写时,NLTK word_tokenizer将其标记为["e.g", "."]

我尝试使用受过"e.g."训练的punkt来首先对它进行标记化,但是我意识到,对文字进行标记化后,我会得到相同的结果。

关于如何实现目标的任何想法。

注意:我只能使用NLTK。

1 个答案:

答案 0 :(得分:0)

NLTK regexp_tokenize模块使用正则表达式将字符串拆分为子字符串。可以定义一个正则表达式pattern,它将构建一个与该模式中的组匹配的令牌生成器。我们可以为您的特定用例编写一个模式,以查找单词,缩写(大写和小写)以及诸如'.'';'等符号。

import nltk
sent = "I am good. I e.g. wash the dishes."
pattern = r'''(?x)          # set flag to allow verbose regexps
        (?:[A-Za-z]\.)+        # abbreviations(both upper and lower case, like "e.g.", "U.S.A.")
        | \w+(?:-\w+)*        # words with optional internal hyphens 
        | [][.,;"'?():_`-]    # these are separate tokens; includes ], [
    '''
nltk.regexp_tokenize(sent, pattern)
#Output:
['I', 'am', 'good', '.', 'I', 'e.g.', 'wash', 'the', 'dishes', '.']

缩写的Regex模式为(?:[A-Za-z]\.)+\.在包含A-Z或a-z字符的正向查找中与"."匹配。

另一方面,句号将作为独立符号匹配,其格式如下,该符号未绑定到正向或负向前瞻或包含在一组字母中:

'[][.,;"'?():_`-]'