1. ホーム
  2. python

[解決済み] Pythonのunicode文字列のアクセントを除去(正規化)する最良の方法は何ですか?

2022-03-15 05:36:22

質問

PythonでUnicodeの文字列を持っていて、すべてのアクセント(発音区分)を削除したいのですが、どうすればよいですか?

私はこれを行うためのエレガントな方法をウェブで見つけました(Javaで)。

  1. ユニコード文字列をその 長い正規化形式 (文字と発音記号は別の文字で)
  2. Unicode タイプが "diacritic" であるすべての文字を削除します。

pyICUなどのライブラリをインストールする必要があるのでしょうか、それともPythonの標準ライブラリだけで可能なのでしょうか? また、Python3ではどうでしょうか?

重要:アクセント記号付きの文字からアクセント記号なしの文字への明示的なマッピングがあるコードは避けたいです。

解決方法は?

こんなのはどうでしょう。

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'
>>> 

文字カテゴリ の略です。 Nonspacing_Mark これはMiniQuarkの回答にあるunicodedata.combiningに似ています(私はunicodedata.combiningを考えませんでしたが、より明確なので、おそらく良い解決策だと思います)。

そして、これらの操作はテキストの意味を大きく変える可能性があることに留意してください。アクセントやウムラウトなどは、quot;decoration"ではありません。