ふくふくHukuhuku Inc.
EP.05Prep 8分公開: 2026-05-10

文字列正規化:全角半角・大小文字・Unicode 合字

「ふくふく」「フクフク」「FUKUFUKU」「Fuku Fuku」── 全部同じ会社。だが文字列としては別物。Unicode 正規化と日本語固有の正規化を体系的に。

#文字列#Unicode#正規化
CO📔 Google Colab で開く(上から順にセルを実行)
シェア

「同じ会社」だが文字列は別物な状況は、日本語データでは特に頻発します。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 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。

シリーズの外も探す:

まずは、現状を聞かせてください。

要件が固まっていなくて大丈夫です。現状診断と方針提案までを無料でお手伝いします。

無料相談フォームへ hello [at] hukuhuku [dot] co [dot] jp