Почему научный токенизатор scikit не правильно корректирует токен utf-8 (португальский)? - PullRequest
2 голосов
/ 30 июня 2019

Вот некоторый текст, всего две строки в нудистом ndarray:

titles
>>> array(['"a onda": como a psicologia social pode explicar a ação dos grupos?',
       '"beba menos mas beba melhor": entenda o lema da cerveja artesanal'],
      dtype=object)

Я ожидал, что векторизатор в CountVectorizer sklearn правильно разделит слова, но, похоже, это не так (обратите внимание, что это не удалосьчтобы пометить слово «ação», он отбросил непонятные символы):

cv=CountVectorizer()
cv.fit(titles)

tokenizer = cv.build_tokenizer()
[tokenizer(s) for s in titles]

[['onda',
  'como',
  'psicologia',
  'social',
  'pode',
  'explicar',
  'ac', ## <<<< sklearn failed to identify the word "ação"
  'dos',
  'grupos'],
 ['beba',
  'menos',
  'mas',
  'beba',
  'melhor',
  'entenda',
  'lema',
  'da',
  'cerveja',
  'artesanal']]

Я использую версию sklearn 0.21.2 и версию Python 3.60,7 .

1 Ответ

1 голос
/ 30 июня 2019

CountVectorizer [scikit-doc] использует параметр token_pattern, который по умолчанию (?u)\b\w\w+\b.

Теперь \w к сожалению, не захватывает объединяющие диакритические знаки . Там может однако это обходной путь. Вместо этого мы можем передать следующее регулярное выражение:

cv = CountVectorizer(token_pattern=<b>r'\b(?:[^\s]){2,}\b'</b>)

Кажется, это работает для заданного вами ввода:

>>> [tokenizer(s) for s in data]
[['onda',
  'como',
  'psicologia',
  'social',
  'pode',
  'explicar',
  'ação',
  'dos',
  'grupos'],
 ['beba',
  'menos',
  'mas',
  'beba',
  'melhor',
  'entenda',
  'lema',
  'da',
  'cerveja',
  'artesanal']]

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...