Ta-kaku.jp Tools
Update 2010/02/06
技術メモ内容
トップページ
ハードやソフトの技術メモです。 ほとんど、個人の備忘録のレベルですので高度なことは書かれていません。 皆様に少しでもお役に立てれば幸いです。
MENU
8.実践編
サイト更新情報
2008/10/18
「Ta-kaku Tools 住所検索・郵便番号検索・事業所名検索・駅検索・電話局番検索」を Ver2.202 にリビジョンアップしました。
更新内容は以下の通りです。
・「xxx1丁目」の様に「全角の数字」と「丁目」が続いている文字列が入力されると検索できない事がある不具合を改修しました。
2008/10/01
Ta-kaku Tools Whois検索 Ver1.000をリリースしました。
2008/09/30
「Ta-kaku Tools 住所検索・郵便番号検索・駅検索・電話番号(局番)検索 」を Ver2.201 にリビジョンアップしました。
更新内容は以下の通りです。
・電話番号(局番)検索機能を正式版にしました。 ・無効な数値に対して住所の検索を行っていた処理を改善しました。 ・局番0120指定でGoogleMapがおかしな場所を示していた不具合を修正しました。 ・「東京駅駅」のように入力されると、関係の無いデータが出力される不具合を修正しました。
過去の情報
関連キーワード
技術メモ インデックス
カテゴリーを選択してください。
インストール
プログラミング言語
マークアップ言語
データベース言語
スクリプト言語
MS-Office
その他
Webアプリケーション
の開発方法
8.実践編 技術メモ
追加日時の新しい方から掲載しています。
住所検索ロジックの考え方
登録日:2008/10/03   分類:Webシステム
1.はじめに

弊サイトの住所検索は、入力ボックスが1つだけですが、郵便番号や住所、また読み仮名などが混ざった入力をされてもほぼ正確に検索結果を出力します。
数件ではありますが、「いったいどんなロジックにしているの」という問い合わせがありましたので、公開できる範囲で説明をしたいと思います。

弊サイトで使用している住所のデータは、日本郵政グループのデータです。
このデータは、だれでも無料で利用でき、常に最新の状態になっているので、非常に重宝します。
個人のみならず、教育機関などでの利用も頻繁に行われています。
まさに、データベースを勉強する材料として最適なデータと言えます。

データの内容は、こちらに詳しく記載されていますので、確認をしておいてください。
配布されるデータは、項目毎に分かれた形になっています。
ここでは、これらを便宜上以下の表現を使って説明に使用します。

    Z5 ... (旧)郵便番号(5桁)
    Z7 ... 郵便番号(7桁)
    A1 ... 半角カタカナ都道府県名
    A2 ... 半角カタカナ市区町村名
    A3 ... 半角カタカナ町域名
    A4 ... 漢字都道府県名
    A5 ... 漢字市区町村名
    A6 ... 漢字町域名

2.ユーザは正確に住所を入力してくれないもの

郵便番号はともかく、住所の方は、いろいろな入力のされ方をします。
都道府県から丁寧に入力される方もいらっしゃれば、住所のほんの一部しか入力されない方もいらっしゃいます。
入力ボックスが一つしかない検索の場合は、そこに入力された文字列から項目を推測する必要があります。
これは正に、文字列のパズルのようなもので、多彩な入力の対応に、小生も随分と楽しませて頂きました。

3.文字の種類で分解して項目に割り当てる

さて、それでは実際にどのように考えてゆくのかを説明しましょう。
日本語の場合、全角と半角で以下の種類の入力が行えます。

    全角漢字文字列
    全角ひらがな文字列
    全角カタカナ文字列
    全角英字文字列
    全角数字文字列
    全角記号文字列
    半角カタカナ文字列
    半角英字文字列
    半角数字文字列
    半角記号文字列

まず、処理の前段階で、ユーザが入力した文字列をこれらの種類に分類しておきます。
こうする事で、容易に「読み仮名」と「郵便番号」、そしてその他に文字列を割り当てる事ができます。
以下に、単純に割り当てた場合のイメージを記述します。

    全角漢字文字列      A4,A5,A6
    全角ひらがな文字列  A1,A2,A3 ... 半角カタカナに変換して使用する
    全角カタカナ文字列  A1,A2,A3 ... 半角カタカナに変換して使用する
    全角英字文字列
    全角数字文字列      Z5,Z7    ... 半角数字に変換して使用する
    全角記号文字列
    半角カタカナ文字列  A1,A2,A3
    半角英字文字列
    半角数字文字列      Z5,Z7
    半角記号文字列

お気付きのように、割り当ての無い文字列が存在します。
全角記号,半角英字,半角記号は、日本の住所として使用しないとしても、全角英字はマンション等に使用されそうです。
従って、全角英字もA4,A5,A6を割り当てた方が良いかも知れません。
ただし、半角英字は、SQLインジェクションなどの改竄を考慮してSQLには投入すべきではありません。
半角記号も同様です。

4.都道府県市町村を考慮して項目に割り当てる

全角漢字文字列に注目して見ましょう。
この項目には、A4,A5,A6 が割り当てられていますが、それぞれに対して、OR で検索をすると結果が拡散してしまいます。
逆に AND では、複数の文字列が割り当たっている場合、条件が成り立たなくなり、検索結果が0件になってしまいます。

やはり、ここでも各項目に対して適切な割り当てが必要になります。

A4 に対しては簡単です。
全角漢字文字列から都道府県を抜き出して割り当てます。

A5 に対しては、市区町村を割り当てる訳ですが、その為には、連続した文字列から市区町村を判別する必要があります。
これが意外と大変で、単純に「市」とか「町」で分離すると、「市川市」や「町田市」に対応できなくなってしまいます。
これ以上は、企業秘密ならぬサイトの秘密ですから明かす事はできませんが、いろいろと試行錯誤してみてください。

A6 に対しては、A4 と A5 の残りですので、やはり A5 の解析の正確さがキーになりそうですね。

5.簡単と思われる数字の入力に対しての注意

数字は、ほぼ郵便番号と判別する事ができます。
しかし、こちらの入力も様々で、

「137-8088」と入力されたり、「1378088」だったりします。
また途中から分からなくて、「13780」までの入力であったり、「1378087 1378088 1378089」のように連続で入力される方もいらっしゃいます。

私のツールは、丁番には対応していませんが、たまに入力される事があります。
例えば、「渋谷区神南1-21-1」などと入力された場合は、末尾の数字は郵便番号ではありませんし、
「品川インターシティ10階」の場合は、数値は階数です。

比較的簡単と思われた数値に対しても様々なノウハウが必要となります。

6.割り当てたデータからSQLを作成

苦労して準備した割り当てデータから、いよいよSQLを作成します。
以下に示しているのは、WHERE句の基本形です。
注意して頂きたいのは、割り当てたデータによってはこの形を使用できないパターンもあるという事です。
あくまでも参考としてください。

WHERE句の基本形

    A1 and
    (
        A2 or A3
    ) or
    A4 and
    (
        A5 or A6
    ) or
    (
        Z5 or Z7
    )

また、各データは、複数になる場合もあります。
「東京都和歌山県秋葉」と入力された場合は、

    (東京都 or 和歌山県) and
    (
        秋葉
    )

という風に、SQLを生成する考慮も必要です。

7.最後に

以上で説明を終わりたいと思いますが、参考になりましたでしようか。
簡単と思われていた住所検索が、以外にも奥の深いものである事がご理解頂けたのではないかと思います。
あなたも敢えて入力ボックス1つの文字列パズルに挑戦してみてはいかがでしょうか。
PR