小编典典

在 Python unicode 字符串中删除重音(规范化)的最佳方法是什么?

all

我在 Python 中有一个 Unicode 字符串,我想删除所有的重音符号(变音符号)。

我在网上找到了一种优雅的方法(在 Java 中):

  1. 将 Unicode 字符串转换为其 _ 长规范化形式_ (字母和变音符号使用单独的字符)
  2. 删除所有 Unicode 类型为“变音符号”的字符。

我是否需要安装诸如 pyICU 之类的库,或者仅使用 Python 标准库就可以做到这一点?那么python 3呢?

重要提示:我想避免使用从重音字符到非重音字符的显式映射的代码。


阅读 110

收藏
2022-03-04

共1个答案

小编典典

这个怎么样:

import unicodedata
def 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 的答案中的 unicodedata.combining (我没有想到
unicodedata.combining,但它可能是更好的解决方案,因为它更明确)。

请记住,这些操作可能会显着改变文本的含义。口音、变音符号等不是“装饰”。

2022-03-04