「同じ会社」だが文字列は別物な状況は、日本語データでは特に頻発します。Unicode 正規化と全角半角統一の作法を体系的に整理します。
Unicode 正規化形式
| 形式 | 意味 | 用途 |
|---|---|---|
| NFC | 合成形(`が` を 1 文字に) | 保存・表示 |
| NFD | 分解形(`か` + 濁点) | Mac OSX 内部 |
| NFKC | 互換合成(`①` → `1`、半角 → 全角) | 前処理推奨 |
| NFKD | 互換分解 | 検索・比較 |
迷ったら NFKC
前処理ではNFKC を最初にかけるのがほぼ正解。`①②③` → `123`、`㈱` → `(株)`、半角カナ → 全角カナ等を一気に統一できる。
Python での実装
標準的な日本語文字列正規化
Python
import unicodedataimport reimport jaconv # pip install jaconv
def normalize_jp(s: str) -> str: if not s: return "" # 1. NFKC で互換合成 s = unicodedata.normalize("NFKC", s) # 2. 全角アルファ・数字 → 半角、カタカナは全角に s = jaconv.normalize(s) # 3. 大文字統一 s = s.upper() # 4. 空白統一・前後トリム s = re.sub(r"\s+", " ", s).strip() return s
# テストassert normalize_jp("ふくふく") == "ふくふく"assert normalize_jp("フクフク") == "フクフク" # 半角カナ→全角assert normalize_jp("FUKUFUKU") == "FUKUFUKU" # 全角→半角assert normalize_jp("ふく ふく") == "ふく ふく" # 空白は残す順序が結果を変える
正規化の順序
NFKC → 大文字化 → 法人格削除 → 記号除去 の順序は経験則。順序が違うと結果が違う。テストケースを書いて固定してください(EP.06 で詳述)。
ふくふくの進め方
「会社名・人名のマッチが取れない」というご相談には、現状の表記ゆれ調査 → 正規化関数の設計 → テストケース整備を 1 週間で。EP.06 の名寄せの前提となる工程です。
次回予告
EP.06 は名寄せの基礎:完全一致からファジーマッチングまで。本記事の正規化を踏まえた、本格的な同定の話。
この記事の感想を教えてください
あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。