Posts tagged ‘JSON’

郵便番号から住所をローマ字で得る

川崎有亮さんが公開している「AjaxZip 2.0 – Ajax郵便番号→住所自動入力フォーム(CGI不要版)」に少しだけ手を加えて、住所をローマ字で表記するものを作ってみた。このサンプルとコードおよびローマ字表記用の住所データを下記のように公開している。

準備
1. 本家の ajaxzip2.js をインストールする。
2. 配布アーカイブ内の ajaxzip2/ajaxzip2r.js をインストール先の ajaxzip2.js と同じディレクトリに置く。
3. 配布アーカイブ内の ajaxzip2/data/zip-*-r.json をインストール先の data ディレクトリに置く。
4. 住所入力する HTML ファイルで ajaxzip2.js の代わりに ajaxzip2r.js を読み込む。
基本的な使い方
郵便番号の入力欄における onkeyup イベントハンドラとして AjaxZip2.zip2addr() を登録するのは本家と同じだが、新たに 7番目の引数として真値を設定するとローマ字表記の住所を得ることができる。また、この引数を偽値にすれば、本家と同じ動作となり漢字表記の住所が得られる。その他の引数の使い方は本家と同じだが、事業所の個別郵便番号に対するローマ字表記には対応していない。
郵便番号/住所辞書の更新
ローマ字表記の辞書は漢字辞書の名前に ‘-r’ を加えた zip-*-r.json という形式になっている。この辞書を更新するにはアーカイブにある ajaxzip2/work/csv2jsonzip_r.pl を使う。使い方は本家の csv2jsonzip.pl と同じだが、事業所の個別郵便番号には対応していない。また、csv2jsonzip_r.pl を動作させるためには、次の Perl モジュールが新たに必要となる。
・Lingua::JA::Kana
・Regexp::Assemble
・Unicode::Japanese
なお、Regexp::Assemble が無くても動作するように見えるが、撥音などのローマ字表記が期待通りにならないことがある。
ローマ字表記の方法
住所をローマ字表記するため、日本郵便発行の元データに記載されている半角カタカナから Lingua::JA::Kana によってローマ字表記を得ている。元データでは都道府県名、市区町村名、町域名という3つ項目について半角カタカナが格納されているが、各項目内の表記は分かち書きされていない。そのため “サッポロシチュウオウク”(札幌市中央区)、”キタウオヌマグンカワグチマチ”(北魚沼郡川口町)のような住所データをそのままローマ字にすると、極めて読みにくいものになってしまう。そこで、市町村名と町域名に対しては何とか分かち書きをして、先の例ではそれぞれ ”Sapporo-shi Chuuou-ku”、”Kitauonuma-gun kawaguchi-machi” と表記できるようにした。ただし、かなり強引なやりかたで分かち書きをしているので、期待通りのローマ字表記にならないものがあると思う。
その他
日本郵便発行の元データによると、郵便番号と住所は一対一に対応しているわけではなく、ひとつの郵便番号に対して複数の住所レコードが存在する場合がある。このような郵便番号に対して ajaxzip2r.js は常にひとつの同じ住所しか返さない。これは本家の ajaxzip2.js も同じである。
ライセンス
MIT ライセンスとする。