日本郵便が公開する郵便番号データをそのまま利用するのがなぜ難しいか。そして、住所から郵便番号を求めるのがなぜ難しいか[PR]

2017年11月15日

郵便番号はコンピュータで扱う数字データとしてもっとも身近なもののひとつです。

例えば、ユーザーが入力した郵便番号から住所を補完する処理は、一般的なWebアプリケーションでよく行われています。また、ダイレクトメールの到達率の向上や返送率の低下のため、あるいは住所データをつねに最新のものにするため、住所から適正な郵便番号を付番する処理なども行われています。

その郵便番号は、実は毎月アップデートされています。というのも、市町村の合併や土地の区画整理、新しいビルやマンションの建築など、郵便番号にかかわるさまざまな現実が変化しているためです。

最新の郵便番号データはつねに日本郵便のWebサイトで公開されています

郵便番号データダウンロード郵便番号データダウンロード

郵便番号データのCSVとはどんな形式?

では、そのオープンな郵便番号データはだれでも使いやすい形式なのかというと、実はかなりややこしいことになっています。

公開されている郵便番号データは、次のようなCSV形式になっています(2017年11月現在)。

Yubin7 fig2

先頭から順に、全国地方公共団体コード、5桁の旧郵便番号、7桁の郵便番号(上記は「1410021」)、続いて都道府県名や市区町村名の読みと漢字などが続いています。

同じ町内でも1丁目と2丁目と3丁目までは同じ郵便番号、といったことはよくあります。そうした複数の丁目を示す場合は次のように範囲で示されています。

Yubin7 fig3

ただし、つねに範囲で示されているわけではありません。下記のように、北品川の5丁目と6丁目は列挙されています。

Yubin7 fig4

列挙と範囲が組み合わせられたデータもあります。

岩手県九戸郡洋野町では、「地割」と呼ばれる番地のような区分が用いられています。この地割の範囲とその後ろに続く地名の列挙が、郵便番号と複雑に紐づいています。

Yubin7 fig5

このように郵便番号データのCSVで記述されたデータはそれほど単純ではなく、しかも郵便番号と住所の結びつきも複雑であることが見えてきます。

1行で完結しないデータ、「その他」で指定される地域

郵便番号データを読み取る難しさは、日本郵便が公開しているCSVデータそのものの構造にもあります。下記は京都市中京区大黒町のデータです。

Yubin7 fig6

よく見ると、「大黒町」のあとのカッコが「夷川」のあと閉じていません。

実はこのデータは1行で完結していないのです。次の行までデータは続いており、地名も「夷川」で終わっていません。下記に示す次の行の住所の「通釜座西入」へと続いているので、つなげると「夷川通釜座西入」となります。そして前行から続いた閉じカッコがあり、列挙もここで終わっています。

Yubin7 fig7

これは1行の長さに制限があるため、複数レコードに分割されているのです。

範囲と列挙のうえで、それ以外を「その他」で表されるケースもあります。栃木県那須郡那須町高久甲の例を見てみましょう。

高久甲のある番地が列挙と範囲指定で郵便番号と結びついています。ちなみにこのデータも2行に続いていて、1行目でカッコが始まり、2行目でカッコが閉じています。この2行の範囲と列挙に含まれる地域の郵便番号は「3250304」です。

Yubin7 fig8

そして、上記の列挙と範囲に含まれない高久甲の「その他」の番地には、別の郵便番号である「3250001」が割り当てられているというわけです。

Yubin7 fig9

このほかにも郵便番号と住所の関係にはさまざまな例があります。これらの関係を解釈してデータベースへ展開するといった処理をしてはじめて、正確な最新の郵便番号データベースが作れることになります。

郵便番号と住所を高速に相互変換する「Yubin7」

こうした複雑な郵便番号データの中身を教えてくれたのは、郵便番号7桁化施行時から郵便番号を扱ってきたアドバンスソフトウェアの魚見充孝氏です。

同社はこの複雑な郵便番号データを読み解き、ほぼ毎月のペースでアップデートされるたびに最短で1日から1週間程度で郵便番号と住所の高速かつ高精度な相互変換を行える同社独自のツールでありライブラリである「Yubin7」(ユウビンセブン)用の辞書データとして公開しています。

Yubin7 fig11Yubin7 製品情報

Yubin7は、さまざまな業務アプリケーションで正確な郵便番号の付番や正しい住所への変換、旧住所から新住所への変換などを実現。さらに郵便料金の割引を受けられるカスタマバーコードイメージを郵便番号と住所表示番号(町域以降の番地、階、部屋番号等のデータ)から生成できます。

.NET版に加え、新たにJava版が登場したことで、WindowsだけでなくLinuxもサポートするようになり、さまざまな業務アプリケーションでの利用範囲が拡大しました。下記に.NETのC#のコード例とJavaのコード例を示します。

コード例(C#)
// 住所から郵便番号を取得する
AdvZip advZip = new AdvZip();
// 辞書ファイルのパスを"c:\dic\"に指定します
advZip.DictionaryPath ="c:\\dic\\";
// 住所から郵便番号と番地データを取得します
string zip7Code = null;
string addressNo = null;
int result = advZip.Yubin7("福井県福井市成和1-2816",
   out zip7Code, out addressNo);
if (result != 0)
{
    System.Console.WriteLine(zip7Code);
    System.Console.WriteLine(addressNo);
}

コード例(Java)
// 住所から郵便番号を取得する
AdvZip advZip = new AdvZip();
// 辞書ファイルのパスを"c:\dic\"に指定します
advZip.setDictionaryPath("c:\\dic\\");
// 住所から郵便番号と番地データを取得します
AddressInfo addressInfo = advZip.yubin7("福井県福井市成和1-2816");
if (addressInfo.result != 0) {
  System.out.println(addressInfo.zip7Code);
  System.out.println(addressInfo.addressNo);
}

最新辞書データのアップデートも、.NET版ではアップデートツールが毎月自動的に辞書データを更新してくれ、Java版でもコマンドが用意されているため、定期的にコマンドを実行することで自動アップデートが可能になっています。

揺らぎのある住所表記でも大丈夫

Yubin7は、郵便番号から住所を取得する機能と、住所から郵便番号を取得する機能の両方を備えています。

郵便番号から住所を取得する機能は、前述の郵便番号データを正確に読み解いてデータベース化できていれば、処理そのものは複雑なものではありません。郵便番号は7桁の数字と決まっていて揺らぎがないため、郵便番号が得られればデータベースに対する単純な検索処理で住所が得られるためです。

しかし住所から最新の郵便番号を検索する処理は、簡単ではありません。なぜなら、人間が表記する、あるいはキーボードから入力する住所にはつねに揺らぎがあるからです。その揺らぎを許容しつつ、正確に新住所や郵便番号へ変換しなければなりません。

もっともよくある表記の揺れは、「ケ」や「ノ」に関するものでしょう。「千駄ヶ谷」の小さな「ヶ」、あるいは「北の丸公園」の「の」などの、ケ、ヶ、け、カ、ガ、が、ノ、の、は省略されることも含めて表記ゆれの典型的なパターンといえます。

旧字や略字、あるいは似た別の文字が使われることなどによる表記揺れもあります。例えば宮城県塩竈市(しおがまし)は、市役所で用いる公用文では塩竈市と表記されるのですが、それ以外では塩釜市と書くことも認められています。

さらに複雑な揺らぎでは、例えば京都の地名などが挙げられます。京都の住所の一部には「京都市中京区大黒町 釜座通二条上る」というように、通りの名前が入ることが知られています。この住所表記は、人によっては通りの名前を町名より先に書くこともあり、また「上る」の「る」が省略されることや、「通」が「通り」になることもあるでしょう。

このように日本中の住所を細かく見ていけば、さまざまな場面で数えきれないほどの表記の揺れがあります。これらを調べるだけでも大変です。

しかしYubin7ではこうした住所の表記を吸収し、正確で最新な郵便番号と対応する住所表記へと変換可能なように実装されています。

Yubin7でつねに最新で正確な郵便番号と住所データを保つ

ダイレクトメールなどの郵便物を発行する企業などでは、正確かつ最新の郵便番号と住所表記が郵便物の到達率の向上につながります。例えば住所間違いで返送されてきた郵便物の住所を調べなおし、ラベルを印刷しなおして再発送する手間などを考えると、正確で最新な住所表記によるコストと時間の削減は非常に大きなものになるでしょう。

とはいえ、ここまで説明してきた通り郵便番号と住所をつねに最新かつ正確なものに保つには、非常に複雑な処理をソフトウェアで行わなければなりません。「Yubin7」はそうした処理をあらかじめ内蔵したライブラリとしてアプリケーションに組み込み、高速な変換処理を実現してくれます。

もちろん単独のユーティリティとして、郵便番号や住所の変換ツールとして用いることも可能です。

Yubin7 fig10Yubin7のツール画面(.NET版)

Yubin7が提供するのはニッチな領域のソリューションですが、それゆえにいわゆる手組みのソフトウェアでは実現が困難かつ割りに合わない領域です。だからこそパッケージソリューションとして導入する価値があるといえるでしょう。

しかもYubin7は開発作業に必要なライセンスが3万4000円(税別)、サーバーライセンスが年間2万8000円(税別)など非常に低価格で導入可能です。詳しくは下記のWebサイトをご覧ください。

Yubin7 製品情報
Yubin7 for Java 製品情報

(本記事はアドバンスソフトウェア提供のタイアップ記事です)

あわせて読みたい

.NET Java プログラミング言語 PR




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本