我想知道如何用词标记以下句子(字符串):
"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。
答案 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字符的正向查找中与"."
匹配。
另一方面,句号将作为独立符号匹配,其格式如下,该符号未绑定到正向或负向前瞻或包含在一组字母中:
'[][.,;"'?():_`-]'