
Pythonライブラリとしてのフルテキストジオペル化。英語のテキストから地名を抽出し、それらを正しい場所に解決し、座標と構造化された地理的情報を返します。
Mordecaiはアップグレードの準備ができています! V3がどのように見えるかを形作るために、ここでユーザー調査に参加してください。
>>> from mordecai import Geoparser
>>> geo = Geoparser()
>>> geo.geoparse("I traveled from Oxford to Ottawa.")
[{'country_conf': 0.96474487,
'country_predicted': 'GBR',
'geo': {'admin1': 'England',
'country_code3': 'GBR',
'feature_class': 'P',
'feature_code': 'PPLA2',
'geonameid': '2640729',
'lat': '51.75222',
'lon': '-1.25596',
'place_name': 'Oxford'},
'spans': [{'end': 22, 'start': 16}],
'word': 'Oxford'},
{'country_conf': 0.83302397,
'country_predicted': 'CAN',
'geo': {'admin1': 'Ontario',
'country_code3': 'CAN',
'feature_class': 'P',
'feature_code': 'PPLC',
'geonameid': '6094817',
'lat': '45.41117',
'lon': '-75.69812',
'place_name': 'Ottawa'},
'spans': [{'end': 32, 'start': 26}],
'word': 'Ottawa'}]
Mordecaiには、Geonamesが入ったランニングElasticsearchサービスが必要です。手順については、以下の「インストール」を参照してください。
pip install mordecai
注:仮想環境でMordecaiを実行することを強くお勧めします。 Mordecaiが依存しているライブラリは常に最新のバージョンではなく、仮想環境を使用すると、ライブラリが格下げされたり、他の問題に巻き込まれたりすることができなくなります。
python -m venv mordecai-env
source mordecai-env/bin/activate
pip install mordecai
python -m spacy download en_core_web_lg
docker pull elasticsearch:5.5.2
wget https://andrewhalterman.com/files/geonames_index.tar.gz --output-file=wget_log.txt
tar -xzf geonames_index.tar.gz
docker run -d -p 127.0.0.1:9200:9200 -v $(pwd)/geonames_index/:/usr/share/elasticsearch/data elasticsearch:5.5.2
このインデックスを作成するために使用されるコードについては、ES-GEONAMESを参照してください。
インデックスを更新するには、古いコンテナをシャットダウンするだけで、S3からインデックスを再ダウンロードし、新しいインデックスでコンテナを再起動します。
このソフトウェアを学術的な仕事で使用する場合は、
@article{halterman2017mordecai,
title={Mordecai: Full Text Geoparsing and Event Geocoding},
author={Halterman, Andrew},
journal={The Journal of Open Source Software},
volume={2},
number={9},
year={2017},
doi={10.21105/joss.00091}
}
Mordecaiは、構造化されていないテキストを取り入れ、そこから抽出された構造化された地理情報を返します。
Spacyの名前付きエンティティ認識を使用して、テキストからプレコネームを抽出します。
Geonames GazetteerをElasticSearchインデックス(いくつかのカスタムロジックを使用)で使用して、抽出された地名の潜在的な座標を見つけます。
Kerasに実装されたニューラルネットワークを使用し、Prodigyでラベル付けされた新しい注釈付きの英語データでトレーニングして、正しい国を推測し、各PlaceNameのGazetteerエントリを修正します。
2つのモデルのトレーニングデータには著作権で保護されたテキストが含まれているため、自由に共有できません。 Mordecaiを英語以外の言語テキストに適用するには、ターゲット言語と再訓練でデータのラベル付けが必要です。
Geoparser()モジュールをインスタンス化すると、次のオプションを変更できます。
es_hosts :Geonames Elasticsearch Serviceが実行されているホストのリスト。デフォルトは['localhost']になります。これは、上記のデフォルトのDockerセットアップを使用している場合に実行される場所です。es_port :Geonames Elasticsearch Serviceが実行されているポート。デフォルトは9200になり、Dockerのセットアップにはそれがありますes_ssl :ElasticSearchにSSL接続が必要かどうか。デフォルトはFalseになります。es_auth :ESで使用するオプションのHTTP認証パラメーター。提供されている場合は、2項(user, password)である必要があります。country_confidence :国モデルの信頼度を設定します。それが本当に低い場合、モデルはおそらく間違っており、奇妙な結果を返します。デフォルトは0.6です。verbose :国のピッキングモデルで使用されるすべての機能を返しますか?デフォルトはFalseになります。threads :スレッドを使用して、ElasticSearchデータベースに並列クエリを作成するかどうか。デフォルトはTrueであり、これにより最大6倍のスピードアップが得られます。 geoparseは主要なエンドポイントであり、ほとんどのユーザーが必要とする唯一のエンドポイントです。他の、ほとんど内部の方法は、場合によっては次の場合に役立つ場合があります。
lookup_city 、都市の名前、国、(オプションでは)adm1/州/知事を取り、都市のルールベースの検索を行います。infer_country文書を取り、それぞれで最も可能性の高い国を推測しようとします。query_geonames and query_geonames_country 、elasticsearchのGeonames上の検索を実行するために使用できます_featureプレフィックスを使用した方法は、テキストからのカントリーピッキング機能を計算するための内部方法です。 batch_geoparseドキュメントのリストを取り入れ、Spacyのnlp.pipeメソッドを使用して、NLPステップでより効率的に処理します。
大型マシンの上級ユーザーは、 lru_cacheパラメーターを250から1000に増やすことができます。これにより、メモリが増えますが、解析速度が向上します。
Mordecaiにはユニットテストが含まれています。テストを実行するには、 mordecaiディレクトリにcd実行して実行します。
pytest
テストでは、完了するために実行中の弾性/Geonamesサービスへのアクセスが必要です。現在、テストは、説明のつかないセグフォールトでTravisciで失敗していますが、ローカルで正常に実行されています。 MordecaiはPython 3でのみテストされています。
このソフトウェアの以前のベリオンは、Caerus Associatesからオープンイベントデータアライアンスに寄付されました。 2015-2016および2016-2017プロダクションバージョンのMordecaiのリリースまたはレガシードッカーブランチを参照してください。
この作業は、DARPAのXDATAプログラム、米国陸軍研究室と米国陸軍研究室によって、助成金番号W911NF-13-0332、および賞SBE-SMA-1539302の下で国立科学財団を通じて、米国陸軍研究所によって資金提供されました。この資料で表明された意見、調査結果、結論または勧告は著者のものであり、DARPA、ARO、MINERVA、NSF、または米国政府の見解を必ずしも反映しているわけではありません。
プルリクエストによる貢献は大歓迎です。変更がユニットテストに合格していることを確認してください。バグや問題は、リポジトリの問題ページで報告できます。