商用サービス並みに高精度な住所正規化用のNodeモジュールを公開しました!

Posted by miya on March 28, 2021 · 1 min read

昨年、Qiita で以下のような記事を公開しました。

日本の住所の正規化に本気で取り組んでみたら大変すぎて鼻血が出た。

その後、上の記事をきっかけにしたたくさんのフィードバックや、不動産テック協会さんとの不動産IDに向けた取り組みによって得られたフィードバックなどにより、ようやくオープンソースの住所正規化モジュールを公開することができることとなりました!

@geolonia/normalize-japanese-addresses

正規化の精度について

この @geolonia/normalize-japanese-addresses は、別途公開している Geolonia 住所データ に含まれる地名データを辞書として使用することで、高精度な正規化を実現しています。

以下は、このモジュールが対応している正規化の例です。

正規化前 正規化後
北海道札幌市西区24-2-2-3-3 北海道札幌市西区二十四軒二条二丁目3-3
東京都町田市木曽東四丁目十四ーイ二十二 東京都町田市木曽東四丁目14-イ22
京都府京都市東山区大和大路通三条下る東入若松町393 京都府京都市東山区若松町393
和歌山県串本町串本1234 和歌山県東牟婁郡串本町串本1234

概ね以下のような感じになります。

  • 町丁目レベルまでの数字は漢数字に変換します。 例: 24-2-2-3-3 => 二十四軒二条二丁目3-3
  • 街区、地番レベルの数字は、アラビア数字に変換します。 例: 十四ーイ二十二 => 14-イ22
  • 京都の通り名は削除します。
  • が省略されている場合は補完します。 例: 和歌山県串本町 => 和歌山県東牟婁郡串本町
  • などの揺れを吸収し、国交省が公開する位置参照情報のデータと同じ文字になるように変換します。
  • 旧字体は、新字体に変換します。
  • 大字 は削除します。
  • 街区、地番以降の文字列、たとえば建物名などは、そのまま返します。

京都の通り名を削除することには賛否両論あるかと思いますが、この正規化モジュールは住所の名寄せを目的としているため、そのような仕様になっています。

精度が気になる方は、以下にテストケースがありますので、そちらをご覧いただくといいかもしれません。

https://github.com/geolonia/normalize-japanese-addresses/tree/master/test

使い方

npm コマンドなどを使ってインストールして下さい。

$ npm install @geolonia/normalize-japanese-addresses -S

mormalize() メソッドで正規化することができます。

const { normalize } = require('@geolonia/normalize-japanese-addresses')

normalize('北海道札幌市西区24-2-2-3-3')).then(result => {
  console.log({"pref": "北海道", "city": "札幌市西区", "town": "二十四軒二条二丁目", "addr": "3-3"})
})

ご注意

  • 住所 API のレスポンスをキャッシュする仕様になっているため、JavaScript としては使用できません。
  • この正規化エンジンは、住所の「名寄せ」を目的としており、たとえば京都の「通り名」は削除します。
  • この正規化エンジンは、町丁目及び小字レベルまでは対応していますが、それ以降(例: )については対応しておりません。
  • 住居表示が未整備の地域については全体的に苦手です。

フィードバック

  • うまく正規化できなかった住所はぜひ Issue でご報告をお願いします。

ライセンス

ソースコードのライセンスは MIT ライセンスです。

Geolonia では、「住所」の民主化を目指して、多くの皆様のご協力をお待ちしていますので、今後とも宜しくお願いいたします。



Geolonia では、ウェブ地図や位置情報を利用したウェブアプリケーションや、モバイルアプリケーションの開発を承っています。

お問い合わせ

また、Geolonia では、エンジニアを募集しています。Geolonia で働くことに興味がある方はぜひ一度お話しませんか?

採用ページ