Предотвращение расщепления при апострофиях при токенизации слов с помощью nltk

Я использую nltk разделить предложения на слова. например,

 nltk.word_tokenize("The code didn't work!")
 -> ['The', 'code', 'did', "n't", 'work', '!']

токенизация хорошо работает при разбиении границ слова [т. е. разбиении пунктуации от слов], но иногда над разбиениями, а модификаторы в конце слова обрабатываются как отдельные части. Например, didn't разбивается на части did и n't и i've разделяется на I и 've. Очевидно, это связано с тем, что такие слова разделены надвое в исходном корпусе, что nltk используется и может быть желательно в некоторых случаях.

есть ли какой-либо встроенный способ преодоления этого поведения? Возможно, аналогично тому, как nltk's MWETokenizer способен агрегировать несколько слов в фразы, но в этом случае просто агрегировать компоненты слов в слова.

кроме того, есть ли другой токенизатор, который не разделяет части слов?

1 ответов


Это на самом деле работает, как ожидалось:

это правильный / ожидаемый результат. Для обозначения слов сокращения считаются двумя словами, потому что они имеют смысл.

разные nltk tokenizers ручка английский язык сокращения по-разному. Например, я обнаружил, что TweetTokenizer не разделяет сужение на две части:

>>> from nltk.tokenize import TweetTokenizer
>>> tknzr = TweetTokenizer()
>>> tknzr.tokenize("The code didn't work!")
[u'The', u'code', u"didn't", u'work', u'!']

подробнее информация и обходные пути по адресу: