Open1
住所の表記ゆれを整えるツールを試してみる

目的
住所を正規化するツールを検討
条件1) インストールしやすい:ライブラリのインポート程度
条件2) ライセンスがゆるい:できればMIT
候補
- https://github.com/t-sagara/jageocoder
- https://github.com/geolonia/normalize-japanese-addresses
-
https://github.com/digital-go-jp/abr-geocoder
全てMITライセンス
とりあえずgeoloniaさんのを試してみた
環境は
OS: Windows
shell: Powershell
公式の方法: JavaScript/node
-
nodeがインストールされていない場合はインストール.参照: Microsoft推奨方法
git clone https://github.com/geolonia/normalize-japanese-addresses.git
cd normalize-japanese-addresses
npm install
npm run build
import { normalize } from '@geolonia/normalize-japanese-addresses';
// ESMを利用しない場合は下記
// const { normalize } = require('@geolonia/normalize-japanese-addresses');
normalize('北海道札幌市西区24-2-2-3-3').then(result => {
console.log(result);
// {
// "pref": "北海道", // 都道府県名
// "city": "札幌市西区", // 市区町村名
// "town": "二十四軒二条二丁目", // 大字・丁目名
// "addr": "3-3", // 街区符号・住居符号または地番
// "level": 8, // 正規化レベル
// "point": {
// "lat": 43.074206115, // 緯度
// "lng": 141.315540696, // 軽度
// "level": 8 // 位置情報データレベル
// },
// "other": "" // 正規化できなかった文字列
// }
})
ありがたすぎる😭
余談
JavaScript初心者の私はESMって何?って思ったのですが,ざっくり言うと,ESM(ES Module)は export
/ import
で別ファイルの機能をインポートするが,ESMじゃない場合(CommonJSなど)はconst=インポート先のファイル
みたいな形で行うみたいです.
詳細は以下を参照.
Pythonライブラリ
python版も有志の方が書いてくれている😭🙌
詳細参照: https://pypi.org/project/normalize-japanese-addresses/
pip install normalize-japanese-addresses
from normalize_japanese_addresses import normalize
print(normalize("北海道札幌市西区24-2-2-3-3", level=1))
住所情報をgeoloniaさんのWebAPIではなく,ローカルファイル参照にする方法
今までの方法では,毎回geoloniaさんに住所情報のリクエストを送っているのですが,正規化する住所の量が多くなると,おそらくgeoloniaさんのサーバに迷惑をかけてしまうので,ローカルで実行する方法も検証したい.
まずは住所情報をダウンロード
Invoke-WebRequest -URI https://github.com/geolonia/japanese-addresses/archive/refs/heads/master.tar.gz -OutFile master.tar.gz
wslが入っていれば:
wsl tar -xzf master.tar.gz
wslなければ:
手動で解凍
pythonライブラリではできたが
print(normalize("北海道札幌市西区24-2-2-3-3", endpoint="file://現在のディレクトリまでのPATH/japanese-addresses-master/api/ja"))
jsでのやり方は分からなかった...
jsだとconfig.japaneseAddressesApi: string
をどこで指定し直せばいいのか?
src/config.ts
内のjapaneseAddressesApi
を変更してみたけどダメだでした.
恐らく変更場所が違うのでしょう...
export const currentConfig: Config = {
//japaneseAddressesApi: defaultEndpoint,
japaneseAddressesApi: 'file://C:/Users/.../normalize-japanese-addresses/japanese-addresses-master/api/ja',
cacheSize: 1_000,
}