住所って大変、というお話
これはPathee Advent Calendar 2019の18日目の記事です。
はじめに
こんにちは、Patheeエンジニアの渡邉です。
弊社Patheeでは「街のお出かけを、便利で楽しく、しなやかに」をコンセプトに、ユーザーの方々がお出かけする際にお店選びができるメディアを運営しています。そして、サービスとしての質を高めることができるように、世の中に点在するお店の情報を収集・整理しています。
そんな私たちが整理しているお店の情報の1つとして欠かせないものに住所について、扱いの難しさや、明日誰かに話したくなるトリビア的な話を紹介出来たらと思います。
住所の表記を統一しよう
サービス開発の観点において、住所はエリアの分類やジオコーディング(緯度経度への変換)などに利用されるため、とても重要な要素です。
ただし、住所は表記方法の自由度が高いために、同一の住所を示す表記が10以上あることがよくあるため、データ整理の観点で住所を統一表記に揃える(正規化する)ことが必要不可欠になります。
弊社では形態素解析器MeCabと独自辞書を用いる方法で、住所の正規化や文章中からの住所を抽出を高速に行える仕組みを開発し利用しています。
...が、住所ってクセが強くて扱いにくいんですよね...。目で見たらすぐ理解できるのに、プログラムで処理しようとすると、非常に扱いづらい...。
扱いづらい住所たちをご紹介!
というわけで、ここからはそんな日本の住所について、特に取り扱いづらいものをピックアップして、解説と独断と偏見に満ち満ちた勝手な評価も合わせて紹介していきたいと思います。
自由すぎる表記
まずは基本編、どの住所にも普遍的に当てはまるものです。
住所の表記は都道府県名、郡名、大字/小字/字の様に省略できるもの、地番/丁目/番地/号の表記方法、数字表記のブレ10/10/一〇/十
、異体字、ケ/ヶ/が
などの表記のブレなど、とにかく表記方法が多様!
例えば、地番表記を抜いた北海道古宇郡泊村大字興志内村字茂岩
という住所に関してでいうと、
2 (都道府県名ありなし) × 2 (郡名ありなし) × 2 (大字
表記ありなし) × 2 (字
表記ありなし) = 16通り
の表記方法があります。
また、丁目/番地/号についても1丁目2番地3号
の表記の方法は
- 1丁目2番地3号
- 1丁目2-3
- 一丁目2-3
- 1-2-3
- etc...
と多くの表記が可能です。
これらを組み合わせた組み合わせ数はもう莫大です。
Patheeの住所正規化では
- 都道府県名 → ない場合補完
- 郡名 → ない場合補完
- 大字/小字/字 → 削除
- 数字表記のブレ、地番/丁目/番地/号 → 半角数字とハイフンに変換
- 異体字、
ケ/ヶ/が
などの表記のブレ → 正しい表記に補正
正規化例
泊村大字興志内村字茂岩225番10 ↓ 北海道古宇郡泊村興志内村茂岩225-10
勝手に評価
取扱難易度 ★★★ / 希少度 ★ / トリビア度 ★ / 文字列処理度 ★★★★ / ダイバーシティ度 ★★★★★
風情ある住所だけど...(京都通り名)
これは住所を扱う人には有名と思いますが、京都市中心部の住所です。
京都市中心部は日本の首都が794年に平安京に遷都されたのがきっかけに整備された碁盤の目状の通りが南北/東西に数多く存在しており、住所にこの通りからどっち方向に進んだところかを併記する(通り名)のが一般的。
例えば、京都市役所の住所については、ホームページでも「京都市中京区寺町通御池上る上本能寺前町488番地」と表記されています。
ただ、この通り名については、
「郵便局で必要としている住所に通り名は入っておらず、通り名は無くても届く。大事なのは町名と番地」(引用: 烏丸経済新聞)
とあるように基本的には無くても通じるものであるとのこと。
Patheeの住所正規化では
Patheeにおける住所の正規化も通り名を省略する形で整理しています。(京都の方には怒られてしまいそうですが...)
ちなみに、脳筋で5000文字くらいの正規表現(掲載自粛)でひっかけて削除しています。
が、しかし!通り名を削除すると同一表記になってしまう厄介な住所もかなり少数ですが、いくつか存在しています。厄介すぎでしょ...。例えば、
これらは通り名を削除すると同じ 京都府京都市上京区亀屋町125
ですが、本来は全く別の場所を表す住所です。
そういう住所については、京都府京都市上京区亀屋町(荒神口通)125
と、通り名を併記するようにしています。
勝手に評価
取扱難易度 ★★★★ / 希少度 ★★★★ / トリビア度 ★★★ / 正規表現お化け度 ★★★★★ / 平安京度 ★★★★★
北海道の碁盤の目も負けてない!(北海道の条・線)
こちらは近代版碁盤の目、北海道です。
北海道は主に明治以降に開拓され、碁盤の目状に道が配置されているケースが多くなっています。碁盤の目の場合、住所も通りの名前を元に設定されています。
例えば、碁盤の目の代表格札幌市では、「北海道札幌市東区北12条東1丁目1番地10号」というように、南北の条→東西の丁目で碁盤の目の中のエリアを示し、番地・号でそのエリア内の場所を示すような住所となっています。
住所を正規化する上で厄介なのは、条/丁目の扱いで、
- 算用数字で書かれる場合
北12条東1丁目
- 漢数字で書かれる場合
北十二条東1丁目
or北一二条東1丁目
- 条/丁目が省略される場合
北12東1
というようなバリエーションがあります。
Patheeの住所正規化では
特に条/丁目が省略される場合については、日本の他の地域の住所では見かけない表記の形式のため、住所正規化においても、特別なパターンとして対応する必要がありました。
Patheeにおける住所正規化では、条は漢数字、それ以外は算用数字で統一しています。
正規化例
北海道札幌市東区北12条東1丁目1番地10号 ↓ 北海道札幌市東区北十二条東1-1-10
勝手に評価
取扱難易度 ★★★ / 希少度 ★★★ / トリビア度 ★★ / 迷子にならなそう度 ★★★★★
公式マーク✔︎ついてます(宮城県塩竈市)
宮城県に読みが「しおがま」という市があります。この市の漢字表記は「塩釜市」と「塩竈市」の2つの表記がありますが、どちらの表記が正しいのでしょうか。
正解は「塩竈市」です。しかし、あまりにも画数が多い!ということで、公的機関への提出物も含めて「塩釜市」表記の利用が認められています。市のホームページでもしっかりと明記/解説されていて、公式マーク✔︎つきです。
Patheeの住所正規化では
この「釜」という文字は「竈」と字義が異なる漢字です。Patheeの住所正規化では異体字への対応はされていましたが、当初は塩竈市のことは認識しておらず、「塩釜」表記の場合は正規化に失敗していました。現在はちゃんと扱えるようになっています。
それにしても、異体字では無く全く別の漢字の利用が公式に認められているのは塩竈市くらいではないでしょうか。
ちなみに、この市は当地に存在する「鹽竈(しおがま)神社」の社号を由来に持つ市なので、塩の旧字体を用いて「鹽竈市」「鹽釜市」という表記も古くは使われていたそうです。ややこしすぎる。
勝手に評価
取扱難易度 ★★ / 希少度 ★★★★★ / トリビア度 ★★★★ / 画数度 ★★★★★
いる?いない?のひみつ(東京都中央区銀座西)
東京銀座を走る首都高速道路の高架下、銀座インズのHPには住所として、「東京都中央区銀座西2-2先」と記載されていますが、この「銀座西」という住所、正式には存在しません。
そもそもこの土地自体に住所が存在しない番外地です。行政区の界にあった川を埋め立てたあと、どちらの区に帰属するか決まらないまま50年以上経過している状況。
本来、番外地は番外地でしかないのですが、そこに商業施設が立ち、住所がないのも不便なのでという形で、各事業者が独自に住所を名乗っているという状況で、この銀座西が生まれて来たようです。
Patheeの住所正規化では
現時点では、正規化の対象外になっています...。
勝手に評価
取扱難易度 ★★★ / 希少度 ★★★ / トリビア度 ★★★★ / はよ解決して度 ★★★★
出前泣かせ、一見すると同じ住所(丁目なし住所)
これは、私の住んでいる住所がそうなので詳しく例示することは出来ないのですが、こんなのです。
- △△市○○1-1 (省略しないと △△市○○1丁目1番地)
- △△市○○1-1 (省略しないと △△市○○1番地1号)
私の住所には丁目がないのです。しかも省略で表記すると同じになる住所が2つ存在しています。(しかもそれなりに離れている) 慣れている宅配便業者は間違えませんが、ちょっと遠くから出前を取ると8割くらい迷子になって電話がかかって来ます。インドカレーの出前を取った時には、店員さんにうまく言葉が通じず非常に困りました...
正直、省略表記されると手の打ちようが...
勝手に評価
取扱難易度 ★★★★★ / 希少度 ★★★ / トリビア度 ★★ / ドッペルゲンガー度 ★★★★
終わりなき住所との戦い
このように、住所の取り扱いは例外パターンが多く非常に大変です。 また、市区町村の合併や政令指定都市化、住所の改変によってどんどん変化していきますし、新たな例外パターンが生まれてくるかもしれません。
どうやら、まだまだ住所との戦いは続くようです。