nltk wordpunct_tokenize vs word_tokenize

时间:2018-05-08 18:25:03

标签: python nltk

有谁知道nltk' wordpunct_tokenizeword_tokenize之间的区别?我使用nltk=3.2.4并且wordpunct_tokenize的文字字符串上没有任何内容可以解释其中的差异。我无法在nltk的文档中找到此信息(也许我没有在正确的位置搜索!)。我原本以为第一个会摆脱标点符号等,但它并没有。

enter image description here

2 个答案:

答案 0 :(得分:16)

wordpunct_tokenize基于简单的正则表达式标记化。它被定义为

wordpunct_tokenize = WordPunctTokenizer().tokenize

你可以找到here。基本上它使用正则表达式\w+|[^\w\s]+来分割输入。

另一方面,

word_tokenize基于TreebankWordTokenizer,请参阅文档here。它基本上像Penn Treebank中那样标记文本。这是一个愚蠢的例子,应该说明两者有何不同。

sent = "I'm a dog and it's great! You're cool and Sandy's book is big. Don't tell her, you'll regret it! 'Hey', she'll say!"
>>> word_tokenize(sent)
['I', "'m", 'a', 'dog', 'and', 'it', "'s", 'great', '!', 'You', "'re", 
 'cool', 'and', 'Sandy', "'s", 'book', 'is', 'big', '.', 'Do', "n't", 'tell',
 'her', ',', 'you', "'ll", 'regret', 'it', '!', "'Hey", "'", ',', 'she', "'ll", 'say', '!']
>>> wordpunct_tokenize(sent)
['I', "'", 'm', 'a', 'dog', 'and', 'it', "'", 's', 'great', '!', 'You', "'",
 're', 'cool', 'and', 'Sandy', "'", 's', 'book', 'is', 'big', '.', 'Don',
 "'", 't', 'tell', 'her', ',', 'you', "'", 'll', 'regret', 'it', '!', "'", 
 'Hey', "',", 'she', "'", 'll', 'say', '!']

正如我们所看到的,wordpunct_tokenize将在所有特殊符号上分开,并将它们视为单独的单元。另一方面,word_tokenize're之类的内容保存在一起。它似乎并不那么聪明,因为我们可以看到它无法将初始单引号与'Hey'分开。

有趣的是,如果我们改写这样的句子(单引号为字符串分隔符,双引号为“Hey”):

sent = 'I\'m a dog and it\'s great! You\'re cool and Sandy\'s book is big. Don\'t tell her, you\'ll regret it! "Hey", she\'ll say!'

我们得到了

>>> word_tokenize(sent)
['I', "'m", 'a', 'dog', 'and', 'it', "'s", 'great', '!', 'You', "'re", 
 'cool', 'and', 'Sandy', "'s", 'book', 'is', 'big', '.', 'Do', "n't", 
 'tell', 'her', ',', 'you', "'ll", 'regret', 'it', '!', '``', 'Hey', "''", 
 ',', 'she', "'ll", 'say', '!']

所以word_tokenize会拆分双引号,但它也会将它们转换为``''wordpunct_tokenize不会这样做:

>>> wordpunct_tokenize(sent)
['I', "'", 'm', 'a', 'dog', 'and', 'it', "'", 's', 'great', '!', 'You', "'", 
 're', 'cool', 'and', 'Sandy', "'", 's', 'book', 'is', 'big', '.', 'Don', 
 "'", 't', 'tell', 'her', ',', 'you', "'", 'll', 'regret', 'it', '!', '"', 
 'Hey', '",', 'she', "'", 'll', 'say', '!']

答案 1 :(得分:-1)

Word_tokenize用于标记句子中的单词,而wordpunct_tokenize则用于去除句子中的非英语单词。