昨年、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
normalize()
メソッドで正規化することができます。
const { normalize } = require('@geolonia/normalize-japanese-addresses')
normalize('北海道札幌市西区24-2-2-3-3')).then(result => {
console.log({"pref": "北海道", "city": "札幌市西区", "town": "二十四軒二条二丁目", "addr": "3-3"})
})
ソースコードのライセンスは MIT ライセンスです。
Geolonia では、「住所」の民主化を目指して、多くの皆様のご協力をお待ちしていますので、今後とも宜しくお願いいたします。