K_DM Book
用語集
対象者 標準
対象者別の入口 →

対象者の設定はこのブラウザの中にだけ保存されます。

言語 JA

日本語データ特有の前処理

01.7

日本語データ特有の前処理

まとめ
日本語のデータには、全角と半角の混在、「令和5年」のような和暦、「時々」の踊り字、「三千五百二十」の漢数字など、英語圏のデータにはない表記のゆれがあります。この章では unicodedata.normalize("NFKC") による正規化から、文字コードのオフセット 0x60 を使うカタカナ・ひらがな変換、ERA_TABLE を使った和暦変換、都道府県リストの前方一致による住所分割まで、10 本のレシピを扱います。どれも標準ライブラリの re と unicodedata だけで動くので、pandas の列に apply してそのまま使えます。読み終えると、名寄せ・集計・形態素解析の前にどの順番で何を揃えるべきかを判断できるようになります。

直感 #

顧客リストに「ABC株式会社」「ABC(株)」「エービーシー」の 3 行があれば、人の目には同じ会社でも groupby は 3 社として数えます。日本語前処理の仕事は、こうした「同じものの別表記」をプログラムが同一視できる 1 つの形に寄せることです。寄せる単位は 4 段階あります。文字をそろえる段階(全角→半角、カタカナ→ひらがな、々→元の漢字)、値に直す段階(和暦→西暦、漢数字→整数)、構造に分ける段階(住所→都道府県と市区町村、氏名→敬称なし)、そして文章を整える段階(ストップワード除去、ルビ除去、文分割)です。順番を守ると、たとえば NFKC で半角カナを全角にそろえたあとにカタカナ→ひらがな変換をかけられるので、後ろの処理が単純になります。

このチャプターで学べること #

  • 全角・半角のゆれを unicodedata.normalize("NFKC") と str.translate の置換テーブルで正規化する方法
  • カタカナ・ひらがなをコードポイントの差 0x60 で相互変換する手法
  • 「々」「ゝ」「ヽ」などの踊り字を直前の文字に展開し、「時々」で検索して「時時」を取り逃がすようなキーワードマッチの漏れを防ぐ方法
  • 「三千五百二十」「12億3000万」のような漢数字を整数に変換する実装パターン
  • 和暦(令和・平成・昭和など)を、元号ごとの基準年を入れた ERA_TABLE と正規表現 ERA_PATTERN で西暦へ変換する処理
  • 住所を 47 都道府県リストの前方一致と「市区町村」の最長一致で分割し、集計やジオコーディングに使う方法
  • 氏名から「様」「さん」などの敬称とカッコ書きを除去する手法
  • 日本語ストップワードの除去で TF-IDF やキーワード抽出のノイズを減らし、特徴語を際立たせる方法
  • 「漢字(かな)」形式と <ruby><rt> タグのルビから読み仮名を抽出・除去する処理
  • 句点・疑問符・括弧を考慮したルールで日本語文を分割する方法

これがわかるとできること #

  • 日本語データの表記ゆれを自動的に正規化し、groupby や drop_duplicates での名寄せ・重複排除の精度を高められる
  • 和暦・住所・漢数字を西暦・都道府県列・整数列に変換し、pandas の分析基盤に統合できる
  • NFKC 正規化からトークン化、ストップワード除去までの日本語テキスト前処理パイプラインを構築できる

学習の進め方 #

まず 3.7.1 の全角・半角正規化と 3.7.2 のカタカナ・ひらがな統一で、1 文字単位の表記ゆれを unicodedata.normalize とコードポイントの足し引きで潰す感覚をつかみます。次に 3.7.3 の踊り字展開、3.7.4 の漢数字変換、3.7.5 の和暦変換で、文字列を元の漢字や整数に「読み替える」処理を学びます。3.7.6 の住所分割と 3.7.7 の敬称除去は、1 列の文字列を複数の列に構造化する練習です。最後に 3.7.8 から 3.7.10 のストップワード除去・ルビ処理・文分割で、形態素解析や TF-IDF に渡す直前の整形を身に付けます。