2012年08月14日

空前の KEN_ALL.csv ブームが凄かったのが記憶に新しいばかりですが、この郵政さんが公開している郵便番号ファイルをカジュアルにパース出来るモジュールを作りました。

https://metacpan.org/release/Parse-JapanesePostalCode
https://github.com/yappo/p5-Parse-JapanesePostalCode

使い方はとても簡単で

use Parse::JapanesePostalCode;
my $parser = Parse::JapanesePostalCode->new( file => 'KEN_ALL.csv' );
while (my $obj = $parser->fetch_obj) {
    my @list = map { $_ ? $_ : () } ($obj->zip, $obj->pref, $obj->district, $obj->city, $obj->ward, $obj->town);
    if ($obj->has_subtown) {
        push @list, join '/', @{ $obj->subtown };
    }
    if ($obj->build) {
        my $str = $obj->build;
        $str .= $obj->floor . 'F' if $obj->floor;
        push @list, $str;
    }
}
と言う感じのコードで簡単にパースして使いやすい形にしてくれます。

以前からのノウハウや、住所正規化API作った時のノウハウ、さらにそれの最新の知見を盛り込んでいるので最新版のデータではだいたい使いやすい結果が返ってくるとおもいます。
番地の並びや特殊な表記はそのままに残してありますが、そのへんは使う人が都合よく出来るように、そして現実的にはそのへんの細かい所はスルーでokなので、そのままの状態にしてあります。
わかりやすく言うと、現実的な成形をある程度しているのでカジュアルユーズや Web サービスで使う分には問題のないデータが作れます。

その他、郡と町村の分離、政令指定都市での市と区の分離、ビル名の分離や階の抽出、複数の小字があった場合等は ARRAY ref にして取れるなどが出来ます。
もちろん複数行のレコードにも対応しているし、オブジェクトで返して欲しくなければ、オブジェクト化や簡単な処理をしていないほぼそのままのデータも取れます。

CPAN には Geo::Postcodes::JP っていう KEN_ALL.csv を処理できるモジュールが既にあるのですが、たいそうなモジュールでかつ、処理としては微妙なのでパースだけ出来るモジュールを作りました。

今後は JIGYOUSYO.csv にも対応したいなーとも思ってますが、実際に使う時になるまでは僕は実装しなさそうです。
あとは、差分データもどうしようかなーと思ってるんですが、差分処理はパーサの範囲外かなーと思ってて、差分データだけパース出来れば良いかなと思ってる所です。
もちろんパッチ歓迎です。

まとめ

  • 郵便番号データの処理ノウハウがない人でも、僕のノウハウを使って簡単に処理出来るモジュールをリリースしました
  • YAPC で、本物の KEN_ALL.csv をお見せすると言いましたが、もうお見せしてしました
  • YAPC では、本物の国交省データ処理をお見せしますよ
美味しんぼ (1) (ビッグコミックス)
雁屋 哲
小学館
売り上げランキング: 158776
Posted by Yappo at 2012年08月14日 20:01 | TrackBack | Perl
Comments
Post a comment









Remember personal info?






コメントを投稿する前に↓の場所にnospamと入力してください。