为了账号安全,请及时绑定邮箱和手机立即绑定

在PythonUnicode字符串中删除重音的最佳方法是什么?

在PythonUnicode字符串中删除重音的最佳方法是什么?

九州编程 2019-06-06 14:56:32
在PythonUnicode字符串中删除重音的最佳方法是什么?我在Python中有一个Unicode字符串,我想删除所有的重音(Diacritics)。我在Web上发现了一种用Java实现这一目标的优雅方法:将Unicode字符串转换为它的长规范化形式(字母和数字符号有一个单独的字符)删除Unicode类型为“diacritic”的所有字符。我需要安装像pyICU这样的库吗?或者仅仅用python标准库就可以了吗?那蟒蛇3呢?重要注意事项:我想避免代码从重音字符到非重音字符之间的显式映射。
查看完整描述

3 回答

?
Helenr

TA贡献1780条经验 获得超4个赞

统一码这是正确的答案。它将任何Unicode字符串音译为最接近的ascii文本表示形式。

例子:

accented_string = u'Málaga'# accented_string is of type 'unicode'import unidecode
unaccented_string = unidecode.unidecode(accented_string)# unaccented_string contains 'Malaga'and is of type 'str'


查看完整回答
反对 回复 2019-06-06
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

这个怎么样:

import unicodedatadef strip_accents(s):
   return ''.join(c for c in unicodedata.normalize('NFD', s)
                  if unicodedata.category(c) != 'Mn')

这也适用于希腊字母:

>>> strip_accents(u"A \u00c0 \u0394 \u038E")u'A A \u0394 \u03a5'>>>

这个字符范畴“Mn”代表Nonspacing_Mark,这类似于MiniQuark的答案中的合并(我没有想到独角兽数据,但它可能是更好的解决方案,因为它更明确)。

请记住,这些操作可能会显着地改变文本的意义。口音、乌姆劳斯等不是“装饰”。


查看完整回答
反对 回复 2019-06-06
?
慕仙森

TA贡献1827条经验 获得超8个赞

我刚在网上找到了这个答案:

import unicodedatadef remove_accents(input_str):
    nfkd_form = unicodedata.normalize('NFKD', input_str)
    only_ascii = nfkd_form.encode('ASCII', 'ignore')
    return only_ascii

它运行得很好(例如,法语),但我认为第二步(删除重音)可以比删除非ASCII字符更好,因为对于某些语言(例如希腊语)来说,这将失败。最好的解决方案可能是显式删除被标记为Diacritics的Unicode字符。

编辑:这起作用是:

import unicodedatadef remove_accents(input_str):
    nfkd_form = unicodedata.normalize('NFKD', input_str)
    return u"".join([c for c in nfkd_form if not unicodedata.combining(c)])

unicodedata.combining(c)如果字符为true,则返回true。c可以与前面的字符组合,这主要是如果它是一个对话框。

编辑2remove_accents期望Unicode字符串,而不是字节字符串。如果有字节字符串,则必须将其解码为如下所示的Unicode字符串:

encoding = "utf-8" # or iso-8859-15, or cp1252, or whatever encoding you usebyte_string = b"café"  
# or simply "café" before python 3.unicode_string = byte_string.decode(encoding)


查看完整回答
反对 回复 2019-06-06
  • 3 回答
  • 0 关注
  • 945 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信