文字の正規化

禁止文字の検出などはWebフォームでよく使いますが、一方ですでにお客さんから受け取ってしまった業務データファイルについては、突っ返すわけにもいきませんので、文字の正規化や統一などの操作を行ってから名寄せや情報の統合を図ったりします。

## Unicode正規化
from unicodedata import normalize
print normalize('NFKC', u"ドーモ、ダークニンジャ=サン、ニンジャスレイヤーです")
print normalize('NFKC', u"123㌻")
ドーモ、ダークニンジャ=サン、ニンジャスレイヤーです
123ページ

Unicode正規化を行うと英数字は半角、カナは全角になり、より標準的な表現になります。
引数の「NFKC」は正規化の方法で、以下のページを参照のこと。

## 波ダッシュ問題対策
TR_TABLE = {
  0xFF5E: u'\u301C',
  0x2225: u'\u2016',
  0xFF0D: u'\u2212',
  0xFFE0: u'\u00A2',
  0xFFE1: u'\u00A3',
  0xFFE2: u'\u00AC',
}
print u"―‖−〜¢£¬".translate(TR_TABLE)

(※端末によって表示が異なります)

―‖−〜¢£¬

他にも、環境ごとのUnicode変換テーブルの違いから、波ダッシュ(〜)が上下逆になったり、全角マイナス(−)がゲタ(〓)になったりする問題がありますが、これについては正規化のような決められた手順はないため、Unicodeの文字置換を使って統一を図ることにします。