geolonia/japanese-addresses

一部のレコードで「市区町村名ローマ字」フィールドが途切れている

kidmin opened this issue · 4 comments

バグの内容

  • latest.csv (commit 28b071d) の一部のレコードで、市区町村名ローマ字フィールドが途切れている
    • 福島県東白川郡矢祭町の「市区町村名ローマ字」フィールドで、「町」のローマ字読み「MACHI」が途切れて「MACH」になっている
    • 山梨県西八代郡市川三郷町の「市区町村名ローマ字」フィールドに、「町」のローマ字読み「CHO」がない
    • 山梨県南都留郡富士河口湖町の「市区町村名ローマ字」フィールドで、「町」のローマ字読み「MACHI」が途切れて「MAC」になっている
    • 大阪府南河内郡千早赤阪村の「市区町村名ローマ字」フィールドで、「村」のローマ字読み「MURA」が途切れて「MU」になっている

再現手順

  1. latest.csv をダウンロードする
  2. latest.csv を開き、山梨県西八代郡市川三郷町のデータを確認すると、以下のように「市区町村名ローマ字」フィールド末尾に「町」のローマ字読み「CHO」が含まれていない
"19","山梨県","ヤマナシケン","YAMANASHI KEN","19346","西八代郡市川三郷町","ニシヤツシログンイチカワミサトチョウ","NISHIYATSUSHIRO GUN ICHIKAWAMISATO","岩下","イワシタ","IWASHITA",,35.492897,138.483474

本来どう動作すべきか

  • 「市区町村名ローマ字」フィールドには読みが途切れずに入っている
    • 上記の例では "NISHIYATSUSHIRO GUN ICHIKAWAMISATO CHO"

スクリーンショット(オプション)

(なし)

参考情報(オプション)

データが欠けている原因

元データである 住所の郵便番号(ローマ字)(CSV 形式) を郵便局 Web サイトからダウンロードして確認したところ、同じように途切れていることが分かりました。これは、 郵便番号データ(ローマ字)の説明 ページの「留意点」に記載されている通り、半角フィールド長の上限 35 文字を超えてしまっているためです。

この上限を超えているのは現時点では上記の 4 パターンで、途切れている・完全に欠落しているのは全て市区町村区分の読み(MACHI / CHO / MURA)でした。latest.csv を利用する側で「市区町村名カナ」フィールドの読みから復元することも可能ですが、できれば latest.csv の段階で修正されていると便利だと思います。

修正案1: 「市区町村名カナ」フィールドの読みから復元する

欠けるのは「市区町村名ローマ字」フィールド末尾にある市区町村区分の読みに限るという前提を置くと、次の方法が考えられる。

  1. 下記の市区町村区分マップを定義する
CITY_SUFFIXES = {
    'CHO':   'チョウ',
    'KU':    'ク',
    'MACHI': 'マチ',
    'MURA':  'ムラ',
    'SHI':   'シ',
    'SON':   'ソン',
}
  1. 「市区町村名ローマ字」フィールドを ' ' で区切る
  2. 区切った最後が上記マップの key にマッチした場合は補完の必要なし
  3. 区切った最後が上記マップの key にマッチしない場合は、「市区町村名カナ」フィールドが上記マップの value で終わる要素を探し、区切った要素数に応じて該当する key を使って補完・追加する

あるいは、「市区町村名ローマ字」フィールドのソースとして 住所の郵便番号(ローマ字)(CSV 形式) の情報を使わず、 ローマ字変換仕様 に基づいて「市区町村名カナ」フィールドから生成する。この方法であれば、現時点で存在するものよりも更に長い読みの市区町村名が現れて、市区町村区分よりも前が欠けてしまう状態になっても復元できる。

修正案2: 個別にパッチする

patches/ ディレクトリに上記 4 町村(計 63 レコード)をパッチの形で収録する。

修正案3: ドキュメントに制限事項として記載する

元データの段階で欠落しているため、制限事項としてドキュメントに「市区町村名ローマ字」フィールドは欠けている可能性があることを記載する。

@kidmin #123 で、個別にパッチする方法で修正しました。ご確認いただけたらと思います。

@champierre ご対応ありがとうございます。 #123 拝見しました。
修正が反映されたlatest.csvは、コミット 0258621 で正しいでしょうか。
福島県東白川郡矢祭町と大阪府南河内郡千早赤阪村について、欠けているレコードと修正されたレコードの両方がCSVファイルに出力されてしまっているようです。

86813行目

"07","福島県","フクシマケン","FUKUSHIMA KEN","07482","東白川郡矢祭町","ヒガシシラカワグンヤマツリマチ","HIGASHISHIRAKAWA GUN YAMATSURI MACHI","大字上関河内",,,,36.828769,140.457963

86828行目

"07","福島県","フクシマケン","FUKUSHIMA KEN","07482","東白川郡矢祭町","ヒガシシラカワグンヤマツリマチ","HIGASHISHIRAKAWA GUN YAMATSURI MACH","大字上関河内",,,,36.828769,140.457963

222618行目

"27","大阪府","オオサカフ","OSAKA FU","27383","南河内郡千早赤阪村","ミナミカワチグンチハヤアカサカムラ","MINAMIKAWACHI GUN CHIHAYAAKASAKA MURA","大字吉年",,,,34.447272,135.615964

222628行目

"27","大阪府","オオサカフ","OSAKA FU","27383","南河内郡千早赤阪村","ミナミカワチグンチハヤアカサカムラ","MINAMIKAWACHI GUN CHIHAYAAKASAKA MU","大字吉年",,,,34.447272,135.615964

@kidmin ご指摘どうもありがとうございます。重複しているレコードをチェックするときに「大字」を除いてキーを作っている箇所とそうでない箇所が混在してしまっていたことが原因でした。

#129

で修正いたしました。ご確認ください。

@champierre #129 確認しました。修正いただきありがとうございました!