Шаблон токена для n-грамма в TfidfVectorizer в python

определяет ли TfidfVectorizer n-граммы с помощью python регулярные выражения?

эта проблема возникает при чтении документации для scikit-learn TfidfVectorizer, Я вижу, что шаблон для распознавания n-граммы на уровне слова token_pattern=u'(?u)bww+b'. Мне трудно понять, как это работает. Рассмотрим случай с биграммой. Если я это сделаю:

    In [1]: import re
    In [2]: re.findall(u'(?u)bww+b',u'this is a sentence! this is another one.')
    Out[2]: []

Я не нахожу никаких биграмм. Тогда как:

    In [2]: re.findall(u'(?u)w+ w*',u'this is a sentence! this is another one.')
    Out[2]: [u'this is', u'a sentence', u'this is', u'another one']

находит некоторые (но не все, например u'is a' и все остальные даже количество биграмм отсутствуют). Что я делаю неправильно, интерпретируя b функции персонажа?

Примечание.: Согласно документации модуля регулярных выражений,b персонаж re предполагается:

B соответствует пустой строке, но только в начале или конце слова. Слово определяется как последовательность буквенно-цифровых или подчеркивающих символов, поэтому конец слова обозначается пробелом или буквы, без подчеркивания.

Я вижу вопросы, касающиеся проблемы идентификации n-граммов в python (см. 1,2), поэтому вторичный вопрос: Должен ли я сделать это и добавить Соединенные n-граммы перед подачей моего текста в TfidfVectorizer?

1 ответов


вы должны добавлять регулярные выражения с r. Следующие работы:

>>> re.findall(r'(?u)\b\w\w+\b',u'this is a sentence! this is another one.')
[u'this', u'is', u'sentence', u'this', u'is', u'another', u'one']

Это известная ошибка в документации, но если вы посмотрите на исходный код они используют необработанные литералы.