タグ

2010年10月15日のブックマーク (2件)

  • Unicode正規化

    正しい並び替えでは、表示は(A)のままですが、間違った並び替えでは、正規結合クラスが互いに等しいMACRONとACUTEを並び替えたため、表示は(B)のように、eの上のアクセント記号の位置が入れ替わってしまいます。 正規分解・互換分解 ある文字列の正規分解 (Canonical Decomposition) を得るには、まず、それぞれの文字を正規マッピングによって再帰的に、可能な限り、分解します。すなわち、1回分解した後に現れた文字がなおも分解可能であればさらに分解します。分解マッピングがその文字自身である場合は、分解不可能なので、そのままです。 しかし、分解しただけでは必ずしも正しい結果が得られません。つまり、結合文字の順序の一意性を保証するため、分解後の文字列に対して正規順序アルゴリズムを適用しなければなりません。このように、正規マッピングによる再帰的分解と、正規順序アルゴリズムによ

    kjirouu
    kjirouu 2010/10/15
    Unicodeの正規化に関して NFD / NFC / NFKD / NFKC の違いの解説。やや下の対応表を見るとわかる。大体 NFKC が便利なはず
  • Pythonで unicodedata.normalize を使って全角半角を正規化する方法

    (この記事は 2008年03月14日に別のブログに投稿した記事を移動・編集したものです。) インターネット上の日語を扱っていると、全角半角が統一されていない事による表記揺れをなんとかしたい場面に出くわします。半角で書かれた iPod も、全角で書かれたiPodも同じものとして扱いたいときや、あるいは単に見た目がきれいになるように、英数字は半角に、カタカナは全角にそろえたい、という場合です。 Python では setomitsさんによる zenhan.py を使うと、文字種ごとに全角半角を選択して変換することができ、除外文字も設定できるので便利です。ただ、そこまで柔軟でなくても良く、単に表記揺れがなくなれば良い、という場合も多いかと思います。その場合はPythonの標準ライブラリに含まれる unicodedata モジュールの normalize 関数を使うと便利です。 >>> impo

    kjirouu
    kjirouu 2010/10/15
    Unicode正規化を行うには unicodedata.normalize('NFKC', ustr) | 第一引数は 'NFKC' で大体良い "ヴ"→"ヴ" になる