269)住所の正規化は大変
住所の正規化の話しがツイッターで盛り上がっていた。正規化とは、ある文字列を指定したフォーマットに合わせてデータを区切り必要があれば文字列を置換することだ。たとえば、「カナザワシコウリンボウ」を「カナザワシ コウリンボウ」にしたり「広坂1丁目1番地金沢市役所2階」を「広坂 1-1 金沢市役所 2F」にしたりすることである。
この話題の嚆矢は、河野太郎のマイナンバーの住所の表記ゆれについての(正規化されてない)発言だが、アホらしいので今回は置いておく。(マイナ保険証トラブル、河野大臣「AIでの再発防止」に言及」2023-06-05)
前述した住所だけなら正規化は難しくないが、話しはそう簡単ではない。たとえば、住所には「字・大字」が入っていたり、ひらがなの「の」が含まれるなど、例外が多岐に渡るからだ。そこに建物名が入ったり住所が省略されたりするともう分からない。
たとえば、石川県の末町は丁目ではなく「15の」と表記する。また「イロハ・甲乙丙・子丑寅・仁義礼」や、さらにはそれらが組み合わさった「ロ丙」なんてパターンも存在する(マイナビ「石川県の七不思議? 住所に「イロハ」「甲乙丙」「子丑寅」など謎の地名が」)。このように、石川県の住所だけでも正規化が簡単でないことが分かる。
もし、ぼくが住所を正規化するなら次のようにする。
すでに住所データがあるなら、まず郵便区番号から都道府県ごとに分け、47個の全体集合Uを作る。次に、正規化が難しい住所を部分集合Aとし、町域番号がAにマッチするなら更に部分集合に分けて個別の専用パターンで正規化する。そうでない(補集合)なら普通に正規化する。それでも難しい場合は人間が確認する。つまり、論理的な繰り返し処理をデジタルに任せ、難しい場面は人間がやればいい、という思想だ。
住所データがなく、住所をユーザーに入力させるなら、入力段階で地図や郵便番号から住所をダイアログで選択させる方法も考えられる。このように選択させる方法であれば複雑な正規化は不要になるし、スマホからも入力しやすい。もし、どうしてもフィールドに入力させるなら、都道府県だけダイアログから選択させて、その都道府県の住所に合わせた入力チェックを行う。建物名は別フィールドにしておく。
簡単そうに、そして偉そうに書いたけど、絶対にやりたくない。
2023-06-06