RAILS PRESS RUBY on RAILS, it’s DRY and COOL …

RSS Feed

RAILS PRESS RSS

Tag Cloud

はてなブックマーク - railspress.matake.jp の注目エントリー
象形文字くさび形文字ミイラそろばんの玉そろばんコーラン占いの板?象牙大英博物館
« 前のエントリ
OpenIDでプロフィール情報を受け取る際のフォーマット(openid.sreg.*)
次のエントリー »
JpAddress - 郵便番号/住所変換用のRailsプラグイン

Posted on
2008/02/23

Tags
JpAddress, Plugin, 文字コード

Keywords


この記事をはてなブックマークに登録 この記事のはてなブックマーク数 この記事を livedoor クリップに登録この記事の livedoor クリップ数 このエントリを del.icio.us に追加
ブックマークに追加する

日本全国の郵便番号&住所データDBを作る方法

郵便番号データダウンロード - 日本郵便」でオープンソースとして配布されている「郵便番号&住所データ」(CSVファイル:全国版は12万行で12MB)を使えば、誰でも簡単に日本全国の郵便番号&住所DBを作れます。

RailsでDBにデータを入れるなら、ActiveRecord::Extentions使って一気にDBに入れてやればいいだけです。(CSVファイルはSHIFT_JISなので、DBに入れる際にデータをUTF-8に変換するのを忘れずに!)

データをCSVからDBに取り組む為のコードはこんな感じ。

LANG : RUBY
  1. require 'fastercsv'
  2. require 'kconv'
  3. require 'ar-extensions'
  4. $KCODE='j'
  5.  
  6. address_list = Array.new
  7. FasterCSV.foreach("KEN_ALL.CSV") do |data|
  8.   address_list <<[ data[2].toutf8, data[6].toutf8, data[7].toutf8, data[8].toutf8 ]
  9. end
  10.  
  11. column = [:zipcode, :prefecture, :city, :address]
  12. Address.import(column, address_list)

上のコードだと、僕のMacBookの場合、全国版のデータでも大体1分程で登録が完了します。
僕はこれをrakeタスクで簡単に登録できるようにしてます。

と、ここまでは比較的楽なのですが、実は「郵便番号データダウンロード - 日本郵便」のデータ形式がくせ者です。

「〒150-0013」(東京都渋谷区恵比寿)で検索すると、以下のように余計な文字列が入っています...

都道府県:東京都
市区町村:渋谷区
住所:恵比寿(以下のビルを除く)

原因はこれ。ガーデンプレイスは各階で郵便番号が異なるのか!?

LANG : shell etc.
  1. +---------+--------------------------------------------+
  2. | zipcode | address
  3. +---------+--------------------------------------------+
  4. | 1500013 | 恵比寿(以下のビルを除く)
  5. | 1506001 | 恵比寿恵比寿ガーデンプレイス
  6. | 1506002 | 恵比寿恵比寿ガーデンプレイス
  7.   :
  8.  (中略)
  9.   :
  10. | 1506039 | 恵比寿恵比寿ガーデンプレイス
  11. +---------+--------------------------------------------+

しかし住所欄に「(以下のビルを除く)」とか...

こんなの備考欄でも作ってそこに入れろ!

とか思いながら、しかたが無いので対処しました。

  • 全角括弧以降の文字列は削除する。
  • 住所欄が全角数字から始まる時は住所欄を空白にする。
  • 郵便番号の下一桁が0の列は削除する。

修正後のコードは以下。

LANG : RUBY
  1. require 'fastercsv'
  2. require 'kconv'
  3. require 'ar-extensions'
  4. $KCODE='j'
  5.  
  6. address_list = Array.new
  7. FasterCSV.foreach("KEN_ALL.CSV") do |data|
  8.   address_list <<[ data[2].toutf8, data[6].toutf8, data[7].toutf8, data[8].toutf8.gsub(/^[0-9].*$|(.*$/u,"") ] unless data[2].toutf8=~/[0-9]{6}0/
  9. end
  10.  
  11. column = [:zipcode, :prefecture, :city, :address]
  12. Address.import(column, address_list)

これで問題解決かな?
12万件はさすがにチェックしてないですが。

※ 旧字体の使用について
昔はこのデータに旧字体が含まれていたらしいのですが、現在は日本郵便のサイトで「旧字体はひらがな表記してる」的なことを書いてたので、大丈夫だと思います。

(追記)
ここにある機能をまとめて、JpAddressプラグインとして公開しました。
使い方はプラグインに含まれているREADMEをご覧ください。
なんかわかんなかったらコメントください。
RubyForge: JpAddress: Project Info
JpAddress - 郵便番号/住所変換用のRailsプラグイン

(さらに追記)
下記のサイトを参考にすれば、PHPでこれと同じことができそうです。
[PostgreSQL] 郵便番号辞書をデータベースに投入する手順


この記事がお役に立ちましたら、一言コメントもらえると嬉しいですm_ _m

[...] 前回のエントリーで「 日本全国の郵便番号&住所データDBを作る方法S」について書きましたが、それをRailsプラグイン化したものをRubyforgeで公開しました。 [...]


Posted by
MH35
2010/03/16 6pm

郵便番号データをみたところ、以下のようなデータが存在しました。(半角カナは全角に変換済み)

23220,"49013","4901323","アイチケン","イナザワシ","ヘイワチョウ(コウワ、シオカワ、シモコシキタ、シモコシナカ、シモコシヒガシ、シモコシミナミ、ショバタシンデン、シロニシ、","愛知県","稲沢市","平和町(光和、塩川、下起北、下起中、下起東、下起南、勝幡新田、城西、",1,1,0,0,0,0
23220,"49013","4901323","アイチケン","イナザワシ","シロノウチ、スカワキ、ナコラ、ヘイロク、マエヒラ、メイワ、ヨメフリ、ヨメフリキタ、ヨメフリヒガシ、リョウナイ)","愛知県","稲沢市","城之内、須ケ脇、那古良、平六、前平、明和、嫁振、嫁振北、嫁振東、領内)",0,1,0,0,0,0

これに対する対処がないように見えますがいかがでしょう。


Posted by
NOV
2010/03/16 6pm

そらひどいデータですねww


コメントはこちらから




使用可能タグ: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


« 前のエントリ
OpenIDでプロフィール情報を受け取る際のフォーマット(openid.sreg.*)
次のエントリー »
JpAddress - 郵便番号/住所変換用のRailsプラグイン