pygeonlp.api.spatial_filter module¶
- class pygeonlp.api.spatial_filter.SpatialFilter(geojson_or_url, **kwargs)¶
ベースクラス:
pygeonlp.api.filter.Filter
空間フィルタの基底クラス。
空間フィルタは、形態素に対応する地名語ノード候補と住所ノード候補のうち、 条件に一致するものを残し、一致しないものを削除します。 全ての候補が条件に一致しない場合、品詞情報として固有名詞を持つ 一般ノードを一つ作成して置き換えます。
空間フィルタでは、地名語ノードと住所ノードの geometry が持つ GeoJSON を そのノードの地点とします。
- __init__(geojson_or_url, **kwargs)¶
フィルタを初期化します。
- パラメータ
geojson_or_url (str) -- 空間範囲を表す GeoJSON または GeoJSON ファイルを取得できる URL。
- classmethod get_geometry(geojson_or_url)¶
GeoJSON または GeoJSON ファイルを取得できる URL から、 osgeo.ogr.Geometry オブジェクトを作成します。
- パラメータ
geojson_or_url (str) -- GeoJSON 文字列またはデコードした dict、 または GeoJSON ファイルをダウンロードできる URL。
- 戻り値
GeoJSON から作成した Geometry オブジェクト。
- 戻り値の型
osgeo.ogr.Geometry
サンプル
>>> from pygeonlp.api.spatial_filter import SpatialFilter >>> SpatialFilter.get_geometry({'type':'Point','coordinates':[139.6917337, 35.6895014]}).ExportToWkt() 'POINT (139.6917337 35.6895014)' >>> SpatialFilter.get_geometry('https://geoshape.ex.nii.ac.jp/city/geojson/20200101/13/13101A1968.geojson').ExportToWkt() 'MULTIPOLYGON (((139.73150362 35.68150121,139.73119903 35.68198095,...,139.73150362 35.68150121)))'
- classmethod get_geometry_from_geojson(geojson)¶
指定された GeoJSON 文字列から osgeo.ogr.Geometry オブジェクトを作成します。
- パラメータ
geojson (str) -- GeoJSON 文字列。 GeoJSON をデコードした dict も利用できます。
- 戻り値
GeoJSON から作成した Geometry オブジェクト。
- 戻り値の型
osgeo.ogr.Geometry
サンプル
>>> from pygeonlp.api.spatial_filter import SpatialFilter >>> SpatialFilter.get_geometry_from_geojson( ... {'type':'Point','coordinates':[139.6917337, 35.6895014]} ... ).ExportToWkt() 'POINT (139.6917337 35.6895014)'
- classmethod get_geometry_from_geojson_url(url)¶
指定された URL から GeoJSON を含むファイルをダウンロードして、 osgeo.ogr.Geometry オブジェクトを作成します。
- パラメータ
url (str) -- 対象ファイルの URL。
- 戻り値
GeoJSON から作成した Geometry オブジェクト。
- 戻り値の型
osgeo.ogr.Geometry
サンプル
>>> from pygeonlp.api.spatial_filter import SpatialFilter >>> SpatialFilter.get_geometry_from_geojson_url( ... 'https://geoshape.ex.nii.ac.jp/city/geojson/20200101/13/13101A1968.geojson').ExportToWkt() 'MULTIPOLYGON (((139.73150362 35.68150121,139.73119903 35.68198095,...,139.73150362 35.68150121)))'
- classmethod point_from_candidate(candidate)¶
候補ノードにふくまれる経度緯度座標から ogr.Geometry オブジェクトを作成します。 経度緯度が含まれていない場合は None を返します。
- パラメータ
candidate (pygeonlp.api.node.Node) -- 候補ノード。
- 戻り値
Point タイプの Geometry オブジェクト。
- 戻り値の型
osgeo.ogr.Geometry
サンプル
>>> import pygeonlp.api as api >>> from pygeonlp.api.spatial_filter import SpatialFilter >>> api.init() >>> SpatialFilter.point_from_candidate(api.analyze('国会議事堂前')[0][0]).ExportToWkt() 'POINT (139.745341666667 35.674845)'
- class pygeonlp.api.spatial_filter.GeoContainsFilter(geojson_or_url)¶
ベースクラス:
pygeonlp.api.spatial_filter.SpatialFilter
指定した空間範囲に含まれていれば合格とするフィルタを作成します。
- geo¶
空間範囲を表す Geometry オブジェクト。 Polygon, MultiPolygon など、 Contains() 演算が可能なタイプである必要があります。
- Type
osgeo.ogr.Geometry
サンプル
>>> import pygeonlp.api as api >>> from pygeonlp.api.spatial_filter import GeoContainsFilter >>> api.init() >>> gcfilter = GeoContainsFilter({"type":"Polygon","coordinates":[[[139.6231,35.5461],[139.9106,35.5461],[139.9106,35.8271],[139.6231,35.8271],[139.6231,35.5461]]]}) >>> # gcfilter はおおよそ23区を囲む矩形のフィルタ >>> lattice = api.analyze('新宿駅から八王子駅までは約40分です。') >>> for nodes in lattice: ... [x.simple() for x in nodes] ... ["新宿駅(GEOWORD:['京王電鉄', '京王線'])", "新宿駅(GEOWORD:['小田急電鉄', '小田原線'])", "新宿駅(GEOWORD:['東京地下鉄', '4号線丸ノ内線'])", "新宿駅(GEOWORD:['東京都', '10号線新宿線'])", "新宿駅(GEOWORD:['東京都', '12号線大江戸線'])", "新宿駅(GEOWORD:['東日本旅客鉄道', '山手線'])", "新宿駅(GEOWORD:['東日本旅客鉄道', '中央線'])"] ['から(NORMAL)'] ["八王子駅(GEOWORD:['東日本旅客鉄道', '横浜線'])", "八王子駅(GEOWORD:['東日本旅客鉄道', '中央線'])", "八王子駅(GEOWORD:['東日本旅客鉄道', '八高線'])"] ['まで(NORMAL)'] ['は(NORMAL)'] ['約(NORMAL)'] ['40(NORMAL)'] ['分(NORMAL)'] ['です(NORMAL)'] ['。(NORMAL)'] >>> lattice_filtered = gcfilter(lattice) >>> # フィルタを適用すると「八王子駅」が範囲外なので地名語候補から除外されます >>> for nodes in lattice_filtered: ... [x.simple() for x in nodes] ... ["新宿駅(GEOWORD:['京王電鉄', '京王線'])", "新宿駅(GEOWORD:['小田急電鉄', '小田原線'])", "新宿駅(GEOWORD:['東京地下鉄', '4号線丸ノ内線'])", "新宿駅(GEOWORD:['東京都', '10号線新宿線'])", "新宿駅(GEOWORD:['東京都', '12号線大江戸線'])", "新宿駅(GEOWORD:['東日本旅客鉄道', '山手線'])", "新宿駅(GEOWORD:['東日本旅客鉄道', '中央線'])"] ['から(NORMAL)'] ['八王子駅(NORMAL)'] ['まで(NORMAL)'] ['は(NORMAL)'] ['約(NORMAL)'] ['40(NORMAL)'] ['分(NORMAL)'] ['です(NORMAL)'] ['。(NORMAL)']
- class pygeonlp.api.spatial_filter.GeoDisjointFilter(geojson_or_url)¶
ベースクラス:
pygeonlp.api.spatial_filter.SpatialFilter
指定した空間範囲に含まれていなければ合格とするフィルタを作成します。
- geo¶
空間範囲を表す Geometry オブジェクト。 Polygon, MultiPolygon など、 Disjoint() 演算が可能なタイプである必要があります。
- Type
osgeo.ogr.Geometry
サンプル
>>> import pygeonlp.api as api >>> from pygeonlp.api.spatial_filter import GeoDisjointFilter >>> api.init() >>> gdfilter = GeoDisjointFilter({"type":"Polygon","coordinates":[[[139.6231,35.5461],[139.9106,35.5461],[139.9106,35.8271],[139.6231,35.8271],[139.6231,35.5461]]]}) >>> # gdfilter はおおよそ23区を囲む矩形のフィルタ >>> lattice = api.analyze('新宿駅から八王子駅までは約40分です。') >>> for nodes in lattice: ... [x.simple() for x in nodes] ... ["新宿駅(GEOWORD:['京王電鉄', '京王線'])", "新宿駅(GEOWORD:['小田急電鉄', '小田原線'])", "新宿駅(GEOWORD:['東京地下鉄', '4号線丸ノ内線'])", "新宿駅(GEOWORD:['東京都', '10号線新宿線'])", "新宿駅(GEOWORD:['東京都', '12号線大江戸線'])", "新宿駅(GEOWORD:['東日本旅客鉄道', '山手線'])", "新宿駅(GEOWORD:['東日本旅客鉄道', '中央線'])"] ['から(NORMAL)'] ["八王子駅(GEOWORD:['東日本旅客鉄道', '横浜線'])", "八王子駅(GEOWORD:['東日本旅客鉄道', '中央線'])", "八王子駅(GEOWORD:['東日本旅客鉄道', '八高線'])"] ['まで(NORMAL)'] ['は(NORMAL)'] ['約(NORMAL)'] ['40(NORMAL)'] ['分(NORMAL)'] ['です(NORMAL)'] ['。(NORMAL)'] >>> lattice_filtered = gdfilter(lattice) >>> # フィルタを適用すると「新宿駅」が範囲内なので地名語候補から除外されます >>> for nodes in lattice_filtered: ... [x.simple() for x in nodes] ... ['新宿駅(NORMAL)'] ['から(NORMAL)'] ["八王子駅(GEOWORD:['東日本旅客鉄道', '横浜線'])", "八王子駅(GEOWORD:['東日本旅客鉄道', '中央線'])", "八王子駅(GEOWORD:['東日本旅客鉄道', '八高線'])"] ['まで(NORMAL)'] ['は(NORMAL)'] ['約(NORMAL)'] ['40(NORMAL)'] ['分(NORMAL)'] ['です(NORMAL)'] ['。(NORMAL)']