pygeonlp.api.node module

class pygeonlp.api.node.Node(surface, node_type, morphemes, geometry=None, prop=None)

ベースクラス: object

形態素ノードを表すクラス。

service.analyze() が返すラティス表現や、 linker.RankedResults.get() が 返すパス表現では、形態素は Node インスタンスとして格納されます。

surface

表記文字列。

Type

str

node_type

ノードの種類。地名語ノードは1、住所ノードは2、それ以外は0です。

Type

int

morphemes

形態素の属性。

Type

list of dict

geometry

地理属性。

Type

object or None

prop

その他の属性(geowordまたは住所)。

Type

dict

ADDRESS = 2
GEOWORD = 1
IGNORE = -1
NORMAL = 0
__init__(surface, node_type, morphemes, geometry=None, prop=None)

ノード情報を初期化します。

ノードは基本的に Parser が作成したものを利用してください。

as_dict()

ノード情報を JSON 出力可能な dict オブジェクトに変換します。

サンプル

>>> import pygeonlp.api as api
>>> api.init()
>>> api.analyze('国会議事堂前')[0][0].as_dict()
{'surface': '国会議事堂前', 'node_type': 'GEOWORD', 'morphemes': {'conjugated_form': '*', 'conjugation_type': '*', 'original_form': '国会議事堂前', 'pos': '名詞', 'prononciation': '', 'subclass1': '固有名詞', 'subclass2': '地名語', 'subclass3': 'Bn4q6d:国会議事堂前駅', 'surface': '国会議事堂前', 'yomi': ''}, 'geometry': {'type': 'Point', 'coordinates': [139.74534166666666, 35.674845]}, 'prop': {'body': '国会議事堂前', 'dictionary_id': 3, 'entry_id': 'LrGGxY', 'geolod_id': 'Bn4q6d', 'hypernym': ['東京地下鉄', '4号線丸ノ内線'], 'institution_type': '民営鉄道', 'latitude': '35.674845', 'longitude': '139.74534166666666', 'ne_class': '鉄道施設/鉄道駅', 'railway_class': '普通鉄道', 'suffix': ['駅', ''], 'dictionary_identifier': 'geonlp:ksj-station-N02'}}
戻り値

JSON 出力可能な dict オブジェクト。

戻り値の型

dict

as_geojson()

ノード情報を GeoJSON の Feature 形式にダンプ可能な dict オブジェクトに変換します。

サンプル

>>> import pygeonlp.api as api
>>> api.init()
>>> api.analyze('国会議事堂前')[0][0].as_geojson()
{'type': 'Feature', 'geometry': {'type': 'Point', 'coordinates': [139.74534166666666, 35.674845]}, 'properties': {'surface': '国会議事堂前', 'node_type': 'GEOWORD', 'morphemes': {'conjugated_form': '*', 'conjugation_type': '*', 'original_form': '国会議事堂前', 'pos': '名詞', 'prononciation': '', 'subclass1': '固有名詞', 'subclass2': '地名語', 'subclass3': 'Bn4q6d:国会議事堂前駅', 'surface': '国会議事堂前', 'yomi': ''}, 'geoword_properties': {'body': '国会議事堂前', 'dictionary_id': 3, 'entry_id': 'LrGGxY', 'geolod_id': 'Bn4q6d', 'hypernym': ['東京地下鉄', '4号線丸ノ内線'], 'institution_type': '民営鉄道', 'latitude': '35.674845', 'longitude': '139.74534166666666', 'ne_class': '鉄道施設/鉄道駅', 'railway_class': '普通鉄道', 'suffix': ['駅', ''], 'dictionary_identifier': 'geonlp:ksj-station-N02'}}}
戻り値

GeoJSON Feature 形式に変換可能な dict オブジェクト。

戻り値の型

dict

distance(node)

自身と他のノードの距離 (m) を計算します。 このメソッドは geographiclib を利用します。 https://pypi.org/project/geographiclib/

サンプル

>>> import pygeonlp.api as api
>>> api.init()
>>> lattice = api.analyze('国会議事堂前,永田町')
>>> n0 = lattice[0][0]
>>> n1 = lattice[2][0]
>>> round(n0.distance(n1), 6)
676.592019
get_lonlat()

ノードの経度、緯度を返します。

戻り値

以下の要素を持つ dict。

  • latfloat

    ノードの代表点の緯度。

  • lonfloat

    ノードの代表点の経度。

戻り値の型

dict

サンプル

>>> import pygeonlp.api as api
>>> api.init()
>>> node = api.analyze('国会議事堂前')[0][0]
>>> node.get_lonlat()
{'lat': 35.674845, 'lon': 139.74534166666666}
>>> import pygeonlp.api as api
>>> api.init()
>>> node = api.analyze('千代田区一ツ橋2-1-2', jageocoder=True)[0][0]
>>> node.get_lonlat()
{'lat': 35.692332, 'lon': 139.758148}
get_notations()

このノードの表記として可能性があるものの候補を取得し、 set を返します(重複を除去し、 AND を高速に計算するため)。

サンプル

>>> import pygeonlp.api as api
>>> api.init()
>>> # set は順番を保持しないので sorted で昇順にソート
>>> sorted(api.analyze('国会議事堂前')[0][0].get_notations())
['国会議事堂前', '国会議事堂前駅']

メモ

何度も計算しないように、計算した結果は _attr['notations'] に保持します。

get_point_object()

地名語ノードまたは住所ノードの場合、経度緯度から Point オブジェクトを作成します。

サンプル

>>> import pygeonlp.api as api
>>> api.init()
>>> api.analyze('国会議事堂前')[0][0].get_point_object().ExportToWkt()
'POINT (139.745341666667 35.674845)'

メモ

gdal がインストールされていない場合は None を返します。 何度も計算しないように、計算した結果は _attr['point'] に保持します。

simple()

ノード情報をシンプルな形式で表現します。

サンプル

>>> import pygeonlp.api as api
>>> api.init()
>>> api.analyze('国会議事堂前')[0][0].simple()
"国会議事堂前(GEOWORD:['東京地下鉄', '4号線丸ノ内線'])"
戻り値

シンプルな形式の文字列。

戻り値の型

str