geolonia / normalize-japanese-addresses

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

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

マンション名に万・萬・億・兆が入っており、マンション名と番地の間にハイフンが入っているとクラッシュする

shio-phys opened this issue · comments

便利なライブラリを作成頂きありがとうございます!

先日こちらのライブラリを使い住所の正規化を行っていたのですが、normalize関数が例外を吐き出すケースがあったのでこちらに起票いたします。

実行環境

macOS Monterey 12.3.1(intel)
node v16.15.0
normalize-japanese-addresses v2.5.6

NGな例

# マンション名と番地の間にハイフン
東京都千代田区永田町1-2-3-ホゲホゲマンション万101
東京都千代田区永田町1-2-3-ホゲホゲマンション萬101
東京都千代田区永田町1-2-3-ホゲホゲマンション億101
東京都千代田区永田町1-2-3-ホゲホゲマンション兆101

発生する例外:

TypeError: The attribute of kanji2number() must be a Japanese numeral as integer.

OKな例

# マンション名と番地の間に半角空白
東京都千代田区永田町1-2-3 ホゲホゲマンション万101
東京都千代田区永田町1-2-3 ホゲホゲマンション萬101
東京都千代田区永田町1-2-3 ホゲホゲマンション億101
東京都千代田区永田町1-2-3 ホゲホゲマンション兆101

# マンション名と番地の間の文字なし
東京都千代田区永田町1-2-3ホゲホゲマンション万101
東京都千代田区永田町1-2-3ホゲホゲマンション萬101
東京都千代田区永田町1-2-3ホゲホゲマンション億101
東京都千代田区永田町1-2-3ホゲホゲマンション兆101

かなりのエッジケースかと思いますが、ご対応いただけますと幸いです。

@shio-phys レポートをいただきありがとうございます!こちら、おそらくお察しの通り、建物名と数字の正規化に関する処理がうまく動いていないようです。改善を試みます。

@kamataryo
こんばんは!
こちらのissueは何か進捗ございますか?
すでにご存じでしたら申し訳ありませんが、個人的に調査してみたところ、以下のような流れでエラーになっておりました。
※「東京都千代田区永田町1-2-3-ホゲホゲマンション万101」を実行した場合の例です。

  1. 町丁目以降の正規化を実行(ソース)
  2. 全角の数値などの正規化処理を実行(ソース)
  3. 「-あ1」などを想定した正規化処理にマッチして、「-ホゲホゲマンション万101」が「kan2num」に渡される。(ソース)
  4. 漢数字の「万」が入っているため、findKanjiNumbersで「万101」を取得して、それを「kanji2number」(ソース)
  5. kanji2numberでint型の数値が渡されたためエラー

問題になっているのは、本来番地などをキャッチするための「3」で、マンション名がマッチしていることではないかなと思います。
ここから、私が分かっていないのですが(調べても資料を見つけられませんでした。)
番地以降の「-あ1」のようなひらがなは2文字以上連続するものなのでしょうか?
「3」のマッチ式では以下のように2文字以上連続することに対応できるように作成されていました。

       // src/normalize.ts
        .replace(/-[^0-9]+([0-9〇一二三四五六七八九十百千]+)/, (s) => {
          // `-あ1` のようなケース
          return kan2num(zen2han(s))
        })

もし、2文字以上がないのであればこちらを以下のように変更することでも(1文字のマンション名はないと思うので)対応できるかなと考えました。(テストは以下ですべて通ることは確認できました。)

       // src/normalize.ts
        .replace(/-[^0-9]([0-9〇一二三四五六七八九十百千]+)/, (s) => {  // ハイフンと数値の間に1文字ある場合のみマッチ
          // `-あ1` のようなケース
          return kan2num(zen2han(s))
        })

@RikitoNoto ありがとうございます!
こちらの特殊な番地部分の表示は現在のところ1文字だけのものを想定してました。例えば "-イ22"などがテストケースに入っています。
2文字以上のものは見たことはなく、現状では、送っていただいたサンプルのように1文字に限定してしまった方が、より多くの現実の住所に対応できるように思えます。

こちらぜひ取り込みたいと思うのですが、よろしければ、テストを追加してプルリクエストとして送っていただくことは可能でしょうか?

@shio-phys こちら、#214 で修正し、取り込みました。
次のリリースで使えるようになる予定です。
@RikitoNoto パッチをいただきありがとうございました!