住所を入力させるシステムを考えた場合、様々な問題が考えられます。例えば、入力された住所と、データベースに登録されている住所を照合する場合を考えてみましょう。
- 登録住所:大阪府大阪市〇〇区〇〇町1丁目2番3号
- 入力住所:大阪府大阪市〇〇区〇〇町1−2−3
このまま単純に文字列比較をすると、違う住所として判断されるので、何らかの正規化が必要ですね。入力住所の「1−2−3」の部分を「1丁目2番3号」と変換すれば、簡単に出来ると思いがちですが…日本の住所表記は想像以上にカオス状態です。
- 丁目は必ず町大字の下にあるとは限らないので、「市区町村」と「○丁目」の間には必ず何か文字がある」というルールにはできない
- 静岡県下田市2丁目4-26(静岡の下田郵便局:区も町もなくて○丁目)
- ○丁目の○は漢数字しか駄目な場合があるので、「○丁目」は、アラビア数字+丁目に統一するというルールにはできない
- 埼玉県春日部市八丁目4-○○(八は序数ではなく固有名詞の町名なので、「8丁目」は誤表記)
- 街区符号や番地は数字とは限らない
- 大阪市中央区上町A−12(水資源機構の関西吉野川支社)
- 大阪市中央区久太郎町四丁目渡辺(大阪の坐摩(いかすり)神社)
- 千葉県八街市八街は18番地2(千葉県の八街北小学校)
- 「は」の部分をカタカナで「ハ」と表示しても可だが、その場合、高確率で漢字の「八(8)」が誤入力される。
- 千葉県香取市佐原ロ2127(千葉県香取市役所)
- 「さわらぐち」ではなく「さわらろ」なので、高確率で漢字の「口(くち)」が誤入力される。
- 都道府県名や市区町村名が住所中に出現するのが一回だけとは限らない
- 長野県長野市南長野県町477−1(長野県の長野教会)
- 住居表示の住所がユニークとは限らない
- 東京都渋谷区道玄坂2−6−2(全く別のビルに同住所が割り当てられている)
- スパゲッティーのパンチョ渋谷店
- 渋谷駅前のとんかつ屋さん「渋谷げんかつ」
- 特定の地域特有の表示方法
- 京都府京都市東山区大和大路通正面下る大和大路2(京都の住所の「通り名」)
- 大阪府堺市北花田口町3丁2−6(「丁目」ではない)
- 東京都青ヶ島無番地
- 岩手県八幡平市大更第35地割62
- 東京都渋谷区道玄坂2−6−2(全く別のビルに同住所が割り当てられている)
これはほんの一例ですが、日本の住所表記の正規化にまともに取り組もうとすると、果てしなく困難な作業が待ち受けています。実際にそれをされているエンジニアの方々には、敬意を評します。