郵便番号から住所を検索するサービスにまともなものがない

郵便番号から住所を検索するサービスにまともなものがないのは一体どういうことかと。


その原因は、どのサービスでも利用している元ネタにある。
ここからダウンロードできるCSVファイル、人間様には分かるだろうけど、コンピュータにとって分かりやすく出来てないのだ。

単一レコードの複数行分割

例えば、066-0005を探してみる*1と、こんなデータ*2が拾える。

"北海道","千歳市","協和(88−2、271−10、343−2、404−1、427−"
"北海道","千歳市","3、431−12、443−6、608−2、641−8、814、842−"
"北海道","千歳市","5、1137−3、1392、1657、1752番地)"

全国一括

このように、単一レコードが複数行に渡って記述されている。
これを3レコードとして扱うサービスは論外だが、これを1レコードとして認識するサービスでも、そこからさらに以下のような形式に変換してくれるサービスは見たことがない。

北海道千歳市協和88−2番地
北海道千歳市協和271−10番地
北海道千歳市協和343−2番地
北海道千歳市協和404−1番地
北海道千歳市協和427−3番地
北海道千歳市協和431−12番地
北海道千歳市協和443−6番地
北海道千歳市協和608−2番地
北海道千歳市協和641−8番地
北海道千歳市協和814番地
北海道千歳市協和842−5番地
北海道千歳市協和1137−3番地
北海道千歳市協和1392番地
北海道千歳市協和1657番地
北海道千歳市協和1752番地

最後の1752番地にだけ「番地」が付けられ、そのほかに付けられないサービスは及第点といったところか。
分割せずにそのままの形式で出すサービスも合格だろう。

「以下に記載がない場合」、「次のビルを除く」を含むレコード

060-0000や540-0001などがこれに当てはまる。
ここで言う「以下」、「次の」とは、その下のレコードを指すのだが、住所の検索サービスとしては前方一致で一致したもの全てを表示するようなもの以外なら、こういう文言は表示するべきではないだろう。

「〜」で範囲を示すレコード

060-0042や080-0029、606-0068などがこれに当てはまる。
実際のレコード*3は、大通西(1〜19丁目)西十九条南(35〜38、41、42丁目)八瀬野瀬町(277の2、279の1、3〜5、281の2〜9、11〜18、20、22、24〜26、32、287、300番地)のようになっており、住所の入力支援を目的に作られているサービスなら、このようなものは表示しないほうが適切だと思う*4
例えば、

西十九条南
西十九条南41丁目
西十九条南42丁目

のように表示できたら完璧だろう*5


ただし、最後の例はかなり複雑で、おそらく

八瀬野瀬町277の2番地
八瀬野瀬町279の1番地
八瀬野瀬町279の3〜5番地
八瀬野瀬町281の2〜9番地
八瀬野瀬町281の11〜18番地
八瀬野瀬町281の20番地
八瀬野瀬町281の22番地
八瀬野瀬町281の24〜26番地
八瀬野瀬町281の32番地
八瀬野瀬町287番地
八瀬野瀬町300番地

を表しているのだろうが、最後の287番地と300番地は人間には分かるものの、コンピュータで処理しようとするとかなり面倒だ。
281の287番地、281の300番地としてしまいそうなレコードである。

「〜」や「以上」、「以下」を含むレコード

896-1412や988-0927などが当てはまる。
896-1412では、下甑町瀬々野浦(1700番地〜、内川内)、988-0927では、唐桑町西舞根(200番以上)のようにして使われている。
これらに関しても、入力支援が目的のサービスなら、表示しないほうが適切だろう。

「以外」「を除く」を含むレコード*6

381-2241などがこれに当てはまる。
実際のレコード*7は、青木島町青木島乙(956番地以外)のようになっている。同じ意味を表すにも関わらず、異なる表現が使用されているのがそもそも間違っているのだが、これも「〜」を含むレコード同様、入力支援が目的のサービスなら表示しないほうが適切だろう。

「その他」を含むレコード

005-0863や074-1272、440-0845、665-0808などが該当する。
それぞれ使用方法が異なり、常盤(その他)音江町(国見その他)高師町(北原、その他)切畑(長尾山「その他」)のように使われている。
これらのレコード以前により特定された同じ地域のレコードが存在するため、これらのレコードは、「より特定されたレコード以外の同地域」を表す。
従って、入力支援が目的のサービスならそれぞれ、「常盤」、「音江町国見」、「高師町北原」、「切畑長尾山」と表示するべきだろう。

「全域」を含むレコード

089-5865がそれに当てはまる*8唯一のレコードだが、グーグルでこの住所*9を検索してみたところ、この下に「大通り」や「本通」等の小字(?)が付いていることがわかった。
つまり、それらをまとめて同じ郵便番号が割り振られているのだが、これも入力支援が目的のサービスなら、表示しないほうがよりよい*10のではないかと思われる。

「(丁目)」、「(郡)」、「(番地)」などを含むレコード

463-0067などがこれに該当する。
おそらく1丁目とか、ほげ郡とかが付くのだろうが、範囲で表現できないためにこのような表記になっているのだろうか?
これらは、入力支援が目的のサービスなら括弧を取り除いて、検索結果の表示が目的なら全て取り除いて表示するのが適切ではないだろうか*11


また、これの変形パターンとして、「(○○屋敷)」*12という表記があった。
これについても、入力支援が目的のサービスなら括弧と○を取り除いて、検索結果の表示が目的のサービスなら全て取り除いて表示するのが適切だとは思うが、それにしたって○○とは・・・

「を含む」を含むレコード

792-0846と786-0301が該当する。
それぞれ、立川町(立川山を含む)"大正(葛籠川、轟崎を含む)のように使用されている。
これは、「立川町以外にも、立川山も」、「大正以外にも、葛籠川と轟崎も」ということを表している*13
そのため、前者なら2つに分割して、後者なら3つに分割して表示すべき*14だろう。

「地階・階層不明」を含むレコード

540-6190などが該当するが、そもそもこの郵便番号に意味があるのかが疑問である。
サービスとしては、一応そのまま*15表示しておくのがいいのではないだろうか。

複雑な、としか言い表せないレコード

例えば384-2304*16、例えば048-2402*17、例えば590-0111*18、例えば651-1102*19などといった、もはや人間様にも何言ってんだか分からないようなレコード*20 *21

その他

これまでに挙げた例以外にも色々とあるのだが、あまりにも多いため全部は紹介できなかった。


それにしても、よくこんな複雑、というか表記方法に統一性が徹底されていない形式が許されるものだ。
ファイルフォーマットからなにから全部見直してくれれば良いんだけど、どこに言えばいいのやら・・・

*1:実際はハイフンなしの0660005となる

*2:重要な部分のみ引用

*3:の一部

*4:検索結果を表示することが目的のサービスなら、そのままの方がいいだろう

*5:が、広範囲の場合(20を越える場合とか)は表示しないほうがいい

*6:他にも同様の意味で異なる表現が使用されている可能性がある

*7:の一部

*8:おそらく

*9:北海道十勝郡浦幌町厚内

*10:削除する手間を省くことができる

*11:どうすれば良いか良くわからない

*12:441-1336

*13:と、予想

*14:というかそもそも別レコードとするべき

*15:括弧等もそのままで

*16:茂田井(1〜500「211番地を除く」「古町」、2527〜2529「土遠」)

*17:大江(1丁目、2丁目「651、662、668番地」以外、3丁目5、13−4、20、678、687番地)

*18:三原台(2丁11−7・9〜17・21、3丁59−2〜18・21〜25、4丁60−1・107−3〜12・16〜21

*19:山田町下谷上(大上谷、修法ケ原、中一里山「9番地の4、12番地を除く」長尾山、再度公園)

*20:2番目なんかは多分後ろは全て3丁目の番地を表してるんだろうな

*21:最後のは長尾山の前に「、」が抜けてるだけか?