使い方 / 辞書データ

はじめに

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

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

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

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

インストール

jageocoderはPython3.6以上で利用可能です。インストール方法・手順はバージョンアップなどで変更する可能性がありますので、最新の情報はPyPIの最新バージョンのドキュメントを参照してください。
住居表示レベルの辞書データをダウンロードしてインストールする手順は以下のようになります。辞書データには、よりサイズが小さい街区レベルのものもあります(辞書データの項を参照)。

pip install jageocoder
curl https://www.info-proto.com/static/jusho.zip --output jusho.zip
python
>>> import jageocoder
>>> jageocoder.install_dictionary('jusho.zip')

使い方

準備

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

jageocoder パッケージを import し、init() で初期化します。

python
>>> import jageocoder
>>> jageocoder.init()

検索

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: 都道府県レベルから名前表記を並べたリスト、いわゆる正規化住所

v0.2.2 から、主に開発者向けに AddressNode のリストを返す searchNode() を追加しました。

>>> jageocoder.searchNode('新宿区西新宿2-8-1')
[[[11460207:東京都(139.69164,35.6895)1(jisx0401:13)]>[12277847:新宿区(139.703463,35.69389)3(jisx0402:13104)]>[12302831:西新宿(139.697501,35.690383)5(None)]>[12304162:二丁目(139.691774,35.68945)6(None)]>[12304172:8番(139.691778,35.689627)7(None)], '新宿区西新宿2-8-']]
>>> tocho = jageocoder.searchNode('新宿区西新宿2-8-1')[0][0]
>>> type(tocho)
<class 'jageocoder.node.AddressNode'>
>>> tocho.get_pref_name()
'東京都'
>>> tocho.get_city_name()
'新宿区'
>>> tocho.get_city_jiscode()
'13104'
>>> tocho.as_dict()
{'id': 12304172, 'name': '8番', 'x': 139.691778, 'y': 35.689627, 'level': 7, 'note': None, 'fullname': ['東京都', '新宿区', '西新宿', '二丁目', '8番']}

辞書データ

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

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

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

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

  • 2021-10-05更新:令和2年度街区レベル,大字・町丁目レベル位置参照情報に差し替え

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

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

  • 2021-10-05更新:令和2年度街区レベル,大字・町丁目レベル位置参照情報に差し替え

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

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

辞書データの作成・変更

特定の都道府県の住所だけを含む小さいサイズの辞書が欲しい場合や、独自に作成・入手した詳細な位置参照情報を用いて拡張した辞書を作成したい場合などは、jageocoder-converter を利用してください。

既存の辞書に特定の住所を追加したい場合や位置を修正したい場合は、次の手順で辞書を変更できます。

python
>>> import jageocoder
>>> jageocoder.init(mode='a')
>>> tree = jageocoder.get_module_tree()
>>> tree.add_address(['東京都','多摩市','落合','一丁目','15番地','2'],True,x=139.429352,y=35.625731,level=8)

まず mode=’a’ を指定して編集可能なモードで辞書を開きます。次に辞書を参照している住所木構造を get_module_tree() で取得します。その木構造に対し、add_address() で新しい住所「東京都多摩市落合一丁目15番地2」を追加・更新します。パラメータの意味については add_address() のオンラインヘルプを参照してください。

>>> help(jageocoder.AddressTree.add_address)

特徴

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

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

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

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

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

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

更新履歴

  • バージョン0.2.2を公開(2021-10-05)
    • searchNode() 関数および自治体コードを取得する関数などを拡張
  • バージョン0.2.1を公開(2021-08-06)
    • 長音(「-」)などがハイフンとして認識されない、などの不具合を修正しました
  • バージョン 0.2.0 を公開(2021-07-27)
    • 辞書のインストール手順を簡略化しました
    • Windows10 に対応しました
    • 一部のLinuxでデフォルトとなっているPython 3.6.8で動作するように修正しました
  • バージョン 0.1.9 を公開(2021-03-11)
    • 電子国土基本図(地名情報)「住居表示住所」(2021-02-25版)から辞書を作成し、地理院から使用承認を受けました
    • Linux, MacOS で動作確認済み