nltk wordpunct_tokenize против word_tokenize - PullRequest
0 голосов
/ 08 мая 2018

Кто-нибудь знает разницу между nltk wordpunct_tokenize и word_tokenize? Я использую nltk=3.2.4 и в строке документа wordpunct_tokenize нет ничего, что объясняет разницу. Я также не смог найти эту информацию в документации nltk (возможно, я не искал в нужном месте!). Я бы ожидал, что сначала можно будет избавиться от знаков препинания или тому подобного, но это не так.

enter image description here

1 Ответ

0 голосов
/ 08 мая 2018

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', '!']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...