为什么scikit learn标记器不能正确标记utf8(葡萄牙语)文本?

2024-06-09 18:58:56 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是一些文本,一个numpy数组中只有两个字符串:

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)

我期望sklearn的CountVectorizer中的矢量器能够正确地分割单词,但它似乎没有(注意,它未能标记单词“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.6.7


Tags: socialsklearncvactokenizerdostitlesgrupos
1条回答
网友
1楼 · 发布于 2024-06-09 18:58:56

^{} [scikit-doc]使用默认为(?u)\b\w\w+\btoken_pattern参数

现在\w不幸的是not capture combining diacritics。然而,可能是一个解决办法。我们可以传递以下正则表达式:

cv = CountVectorizer(token_pattern=r'\b(?:[^\s]){2,}\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']]

但是我不太熟悉有很多变音符号的语言来测试这是否适用于所有可能的组合变音符号

相关问题 更多 >