町丁目データにローカルファイルを使用すると Unicode の normalize 形式によって住所を正規化できないケースがある
kaznak opened this issue · 2 comments
kaznak commented
便利なライブラリを作ってくださってありがとうございます。
先日このライブラリを使用して CSV データの住所を正規化するコマンドラインプログラムを作成しました1。
本日パフォーマンス向上のため、町丁目データにローカルファイルを使用するようにしたところ、表題の現象が発生しましたので報告いたします。
- 実行環境: Macbook Pro(intel) Catalina 10.15.7
- node: 16.13.1
再現過程:
$ cat tmp/test.csv
address
茨城県つくば市筑穂1丁目10−4 つくば市大穂体育館
$ uconv -x nfkd tmp/test.csv | normalize-japanese-addresses 1
address,pref.1,city.1,town.1,addr.1,lat.1,lng.1,level.1
茨城県つくば市筑穂1丁目10−4 つくば市大穂体育館,茨城県,,,つくば市筑穂1丁目10-4 つくば市大穂体育館,,,1
$ uconv -x nfkc tmp/test.csv | normalize-japanese-addresses 1
address,pref.1,city.1,town.1,addr.1,lat.1,lng.1,level.1
茨城県つくば市筑穂1丁目10−4 つくば市大穂体育館,茨城県,つくば市,筑穂一丁目,10-4 つくば市大穂体育館,36.136132,140.082148,3
pref.1
, city.1
, town.1
, addr.1
, lat.1
, lng.1
, level.1
はそれぞれ
<正規化結果の JSON のキー>.<正規化対象のフィールドインデックス>
となっており、ご覧の通り NFKD で正規化された住所はつくば市以降の住所の正規化に失敗しています。
このケースでは ば
が NF(K)C と NF(K)D とで、は
と濁点で一つの文字になるか二つの文字になるか異なるため、正規化に失敗しているのだとおもわれます。
これ以外の現象として、 japanese-addresses-master/api/ja/茨城県/つくば市.json
が見つからないというエラーが発生するケースも確認されています。 docker の ubuntu イメージで実行した際に発生したのですが、まだ再現手順は作成していません。このケースではデータは NFKC 正規化されたものでした。ファイル名を NFC で正規化するとエラーが発生しなくなりました。おそらく同種の問題かと思われます。
以上です。
Footnotes
kamataryo commented