wordpunct_tokenize
основан на простом токенизации регулярного выражения. Определяется как
wordpunct_tokenize = WordPunctTokenizer().tokenize
который вы можете найти здесь . В основном он использует регулярное выражение \w+|[^\w\s]+
для разделения ввода.
word_tokenize
, с другой стороны, основан на TreebankWordTokenizer
, см. Документы здесь . Это в основном токенизирует текст, как в банке дерева Пенна. Вот глупый пример, который должен показать, как они различаются.
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'
.
Интересно, что если вместо этого мы напишем следующее предложение (одинарные кавычки в качестве разделителя строк и двойные кавычки вокруг «Эй»):
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', '!']