geolonia / normalize-japanese-addresses

オープンソースの住所正規化ライブラリ。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

数字から始まるビル名を番地と解釈してしまう

ryudenx opened this issue · comments

例:

東京都千代田区神田淡路町1丁目5番地二引ビル5階

これを正規化すると次のようになります。

{
  pref: '東京都',
  city: '千代田区',
  town: '神田淡路町一丁目',
  addr: '5-2引ビル5階',
  lat: 35.695759,
  lng: 139.767031,
  level: 3
}

実在の住所に「二引ビル」という建物が存在するのですが、「一丁目5-2」と解釈されてしまっています。

少々修正はやっかいだと思いますが、修正頂けると助かります。

@ryudenx 現状では建物名だけをきれいに抽出することができないため、そこには漢数字をアラビア数字に変換する処理をかけないということができません。建物名を分離することができるようになったときのために、本Issueは残しておきますが、今の時点で対応することは難しいということをご了承ください。

承知しました。
参考までに、類似事例のみ報告しておきます。

番地と建物名が混ざり、「番」が消える

東京都千代田区三番町2番地4三番町KSビル10階
{
  pref: '東京都',
  city: '千代田区',
  town: '三番町',
  addr: '2-43町KSビル10階',
  lat: 35.690557,
  lng: 139.743591,
  level: 3
}

「5十五番館ビル」が「番」が消え「55館ビル」となる

神奈川県川崎市川崎区駅前本町15番5十五番館ビル
{
  pref: '神奈川県',
  city: '川崎市川崎区',
  town: '駅前本町',
  addr: '15-55館ビル',
  lat: 35.532434,
  lng: 139.6996,
  level: 3
}

「7千代田」が「7000代田」になる

東京都千代田区神田美土代町9番地7千代田21ビル7階
{
  pref: '東京都',
  city: '千代田区',
  town: '神田美土代町',
  addr: '9-7000代田21ビル7階',
  lat: 35.693283,
  lng: 139.765581,
  level: 3
}

対策として、番地と建物で数字の形式が異なる場合に、以下のようにスペース文字を設けてから正規化を行うことである程度の問題解消が見込めました。

input = input.replace(/([0-90-9](番|番地)?)([一二三四五六七八九〇十百千])/,  '$1 $3')
{
  pref: '東京都',
  city: '千代田区',
  town: '神田淡路町一丁目',
  addr: '5 二引ビル5階',
  lat: 35.695759,
  lng: 139.767031,
  level: 3
}

しかしながら、スペースで区切っても引き続き「番」を含む場合はスペースを無視したり、番を消す挙動が発生するようです。
コード(normalize.ts: 354)を読むと、「番地」や「の」の場合も同様の問題が発生すると考えられます。

5 二引ビル5階 OK
2-43町KSビル10階 NG
15-5 十五館ビル NG
9-7 千代田21ビル7階 OK

以上、ご参考まで。