使い方 / 辞書データ

はじめに

弊社で開発したプログラミング言語Python用の住所ジオコーダーおよび辞書データを公開しています。アプリケーションやサービスに組み込むことで、住所(文字列)を経緯度(実数)に変換する機能を無料で利用できます。

住所ジオコーダーには他にも高性能なものがありますが、ほとんどがウェブサービスとして提供されているため、インターネットにアクセスできない環境では利用できません。jageocoder は辞書データごとサーバに配置することで、インターネットに接続できない環境でも利用できます(ただし、新しい住所に対応するには辞書データを更新する必要があります)。

まとめると、jageocoderは次のような場合に適しています。

  • 情報保護の対象となる個人情報等を含む住所データを地図にしたい
  • 役所・学校など、ネットワークセキュリティが厳しい環境でジオコーディングを利用したい
  • 有料のジオコーディングサービスを使う予算を継続して確保できない

インストール

jageocoderはPython3.7以上で利用可能です。インストール方法・手順はバージョンアップなどで変更する可能性がありますので、PyPIの最新バージョンのドキュメントを参照してください。

使い方

準備

パッケージを利用する際に毎回必要な手順

jageocoder パッケージを import し、init() で辞書ファイルのDSNとインデックスファイルのパスを指定します。

python
>>> import jageocoder
>>> jageocoder.init(dsn='sqlite:///db/address.db', trie='db/address.trie')

辞書ファイル更新時(初回を含む)に必要な手順

初回実行時にはまだインデックスファイルが無いので、インデックスファイルを置く場所を指定し、create_trie_index() を実行して作成します。インデックスファイルは一度作成すれば二回目以降はそのまま利用できます。辞書ファイルを変更した場合はインデックスファイルを作り直してください。

>> jageocoder.create_trie_index()

検索

search()を実行して住所を検索すると、検索結果を含む dict オブジェクトが返ります。

>>> jageocoder.search('新宿区西新宿2-8-1')
{'matched': '新宿区西新宿2-8-', 'candidates': [{'id': 5961406, 'name': '8番', 'x': 139.691778, 'y': 35.689627, 'level': 7, 'note': None, 'fullname': ['東京都', '新宿区', '西新宿', '二丁目', '8番']}]}

要素とそれぞれの意味は次の通りです。

  • matched: 検索した住所文字列のうち、結果に一致した部分文字列
  • candidates: 結果の住所要素の情報のリスト
    「中央区中央1」のように複数の住所に一致することがあるので、リストを返します。

    • id: 辞書データベース内のノードID、データベースに直接アクセスする時などに利用しますが住所情報としての意味はありません
    • name: 住所要素名の表記、原則として元情報の表記を利用しています(一部例外があります)
    • x, y: X座標とY座標、現在提供している辞書では x=経度, y=緯度を表します
    • level: 住所レベル(1:都道府県, 2:郡・支庁・振興局, 3:市町村・特別区, 4:政令市区, 5:大字, 6:丁目・小字, 7:街区・地番, 8:住居番号・枝番)
    • note: 将来利用予定のメモ欄で、現在提供している辞書では全て空欄です
    • fullname: 都道府県レベルから名前表記を並べたリスト、いわゆる正規化住所

辞書データ

以下の二種類の辞書データを提供していますので、用途に合わせて選択してください。辞書データの利用条件は出典となっている位置参照情報によって異なります。利用に際しては必ずzipファイルに同梱されているREADME.txtを読んでください。

街区レベル辞書データ (ここからダウンロード

位置参照情報ダウンロードサービス(国土交通省)で提供している大字レベル・街区レベルの位置参照情報から作成した辞書データです。約1,800万件の住所を含み、圧縮時236MB・解凍後1.2GBのファイルサイズになります。

位置精度はデータ整備地域の場合に街区レベル(「○○番」や「△△番地」)で、道路などで囲まれたブロックの中心付近の座標を返します。未整備地域の場合は大字まで、市区町村までしか一致しないこともあります。

住居表示レベル辞書データ (ここからダウンロード

街区レベル辞書データに、電子国土基本図(地名情報)「住居表示住所」(国土地理院)で提供している住居表示レベルの位置参照情報を追加した辞書データです。約4千万件の住所を含み、圧縮時704MB・解凍後2.5GBのファイルサイズになります。国土地理院より下記の承認を受けて作成しました。

測量法に基づく国土地理院長承認(使用)R 2JHs 1122

位置精度は住居表示実施済みのデータ整備地域の場合には住居表示レベル(「××号」)ですが、建物の座標ではなくフロンテージの中心付近の座標を返します。住居表示未実施区域や未整備地域の場合は街区または大字まで、あるいは市区町村までしか一致しないこともあります。

特徴

住所を「住所要素」に分割して木構造として管理する「地名階層木」と、最長前方一致探索を行なうTRIEによる「地名インデックス」を利用することで、都道府県名や市区町村名を省略した住所表記も比較的高速に検索できます(参考文献)。また、住所要素名を「標準化した」内部表現をデータベースに持たせ、検索時にも同じ標準化を行なってからデータベースを参照することで、住所表記の揺れを吸収(いわゆる「名寄せ」)を行ないます。たとえば東京都庁の所在地である「東京都新宿区西新宿2丁目8−1」は、次のような表記でも検索できます。

  • 「西新宿2丁目8-1」 (都道府県名・市区町村名の省略)
  • 「西新宿2-8-1」 (「2丁目」を「2-」と省略)
  • 「西新宿二の八の一」 (漢数字や「の」を使った表記)

省略された住所表記に該当する候補が複数存在する場合には、全ての候補を返します。

  • 「中央区中央1」→「千葉県・千葉市・中央区・中央・一丁目」「神奈川県・相模原市・中央区・中央・一丁目」

札幌市や京都市の一部で用いられる住所表記にもアドホックなロジックで(一応)対応しています。

  • 「札幌市中央区北3西1-7」→「北海道・札幌市・中央区・北三条西・一丁目・7番地」
  • 「京都市上京区下立売通新町西入薮ノ内町」→「京都府・京都市・上京区・藪之内町」