LoginSignup
5
3

More than 3 years have passed since last update.

郵便番号を検索するjipcodeを拡張して住所から郵便番号を逆引きする gem を作った

Last updated at Posted at 2019-07-20

住所を与えると郵便番号のデータを返すgemを作った。jipcode-address_locator / GitHub

こんな形で使う:

require 'jipcode'
require 'jipcode/address_locator'

Jipcode.locate_by_address('東京都千代田区千代田1-1', prefecture_code: true, distance: true)
# [
#   {:zipcode=>"1008111", :prefecture=>"東京都", :city=>"千代田区", :town=>"千代田1−1", :prefecture_code=>13, :distance=>1.0},
#   {:zipcode=>"1000001", :prefecture=>"東京都", :city=>"千代田区", :town=>"千代田", :prefecture_code=>13, :distance=>0.9538461538461538},
#   {:zipcode=>"1000000", :prefecture=>"東京都", :city=>"千代田区", :town=>nil, :prefecture_code=>13, :distance=>0.9076923076923077}
# ]

郵便番号から郵便地域を取得する jipcode という非常に頻繁にメンテナンスされている素晴らしいgemがあり、このgemを拡張する形で実装した。参考記事: 郵便番号から住所を取得できるgemを作りました - Qiita

逆引きの挙動は住所→郵便番号の取得を行うWeb API、Zipcodaに近くなるように調整した。検索語句と郵便地域のどちらかがどちらかを含んでいるデータを全て洗い出し、その後Jaro Winkler距離を計算し、近いもの順にソートして返す。

毎回該当する都道府県のデータを全部チェックするので遅い。またjipcodeのデータを都道府県別にインデックスしたファイルを作成するので、初回はより時間がかかる。ハイフンや数字は全角で渡さないとヒットしない。 (ちょっとだけ正規化するようにした。v0.1.0)

変な挙動してたら issue/プルリクください :bow:

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3