Python 为什么';scikit学习标记器是否正确标记utf-8(葡萄牙语)文本?
以下是一些文本,一个numpy数组中只有两个字符串:Python 为什么';scikit学习标记器是否正确标记utf-8(葡萄牙语)文本?,python,python-3.x,encoding,utf-8,scikit-learn,Python,Python 3.x,Encoding,Utf 8,Scikit Learn,以下是一些文本,一个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的CountVectorize
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.build\u标记器()
[标题中的标记器]
[onda',
“科莫”,
“眩晕”,
"社会",,
“波德”,
“解释”,
“ac”,##使用默认的(?u)\b\w\w+\b
参数的令牌模式
很遗憾,现在\w
确实如此。但是可能有一个解决方法。我们可以传递以下正则表达式:
cv = CountVectorizer(token_pattern=r'\b(?:[^\s]){2,}\b')
但是我不太熟悉有很多变音符号的语言,以测试这是否适用于所有可能的组合变音符号。它有一个标记模式,即(?u)\b\w\w+\b'
。我不明白。?u
标志不是让\w
已经匹配了ç
和ã
之类的东西吗?不是组合的双字符(),你可以交替地使用Unicode规范化来组合表单,例如将Unicode数据导入为ud;ud。规范化('NFC',ação'))
返回长度为4的字符串。它不适用于任何可以想象的基本字符+变音字符的组合,但普通葡萄牙语文本应该可以。
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']]