pygeonlp.api.filter module

class pygeonlp.api.filter.Filter(**kwargs)

ベースクラス: object

ラティス表現を入力として、条件に一致しないノードを除外した結果を ラティス表現として出力するフィルタ機能の基底クラス。

このクラスは全てのフィルタに共通の機能を提供するものなので、 派生クラスを利用してください。

__init__(**kwargs)

フィルタを初期化します。 初期化の内容は派生するクラスごとに拡張する必要があります。

when_all_failed

全ての候補が条件を満たさなかった場合の挙動を指定します。

"return_all"

全ての候補をそのまま残します。

"convert_to_normal"

'名詞・固有名詞・地域・一般' ノードを1つ作成して返します。

Type:

str

apply(input, **kwargs)

入力データの各形態素に対して apply_filter() を適用し、 合格したノードだけを残した結果を返します。

apply_filter() では一つの形態素に対応する候補ノードの リストに含まれる情報のみを利用してフィルタ処理を行なうため、 前後の形態素を見て判定する必要があるフィルタクラスでは、 apply() メソッドを上書きする必要があります。

パラメータ:

input (list) -- 入力となるラティス表現。

戻り値:

filter_func() を適用して要素を削除されたラティス表現。

戻り値の型:

list

apply_filter(candidates, default=None, **kwargs)

ラティス表現の1つの形態素に対する複数の候補ノードに対して 順番に filter_func() を適用し、条件に一致しないノードを 削除した候補ノードのリストを返します。

default で指定された地名語 ID を持つノードが条件に一致した場合、 結果候補ノードリストの先頭に配置します。

filter_func() では個々の候補ノードに含まれる情報のみを 利用してフィルタへの合否判定処理を行なうため、 1つの形態素に対する候補ノードを比較して最適なものを 選択する必要があるフィルタクラスでは、 apply_filter() メソッドを上書きする必要があります。

パラメータ:
  • candidates (list) -- 候補ノードのリスト

  • default (str, optional) -- 最優先候補としたいノードの geolod_id

  • **kwargs -- キーワードパラメータ、派生クラスでは利用する可能性があります。

戻り値:

条件に一致した候補ノードのリスト。

戻り値の型:

list

static count_geowords(lattice)

ラティス表現を高速に粗く解析し、 地名語候補を含む形態素の数や ne_class の分布などを集計します。

詳細な解析を行うためのプランを決定する前処理として利用します。

パラメータ:

lattice (list) -- ラティス表現。

戻り値:

以下の要素を含む集計結果を返します。

num_geowords: int

地名語候補を1つ以上含む形態素ノードの数。

num_addresses: int

住所候補を1つ以上含む形態素ノードの数。

ne_classes: dict

固有名クラスをキー、そのクラスの地名語を1つ以上含む 形態素ノードの数を値とする dict。

戻り値の型:

dict

サンプル

>>> import pygeonlp.api as api
>>> api.init()
>>> parser = api.parser.Parser()
>>> api.filter.Filter.count_geowords(
...   parser.analyze_sentence('国会議事堂前まで歩きました。'))
{'num_geowords': 1, 'num_addresses': 0,
    'ne_classes': {'鉄道施設/鉄道駅': 1, '鉄道施設': 1}}
filter_func()

候補ノードが条件に一致するかどうかを判定します。 派生クラスでそれぞれ実装する必要があります。

パラメータ:

candidate (Node) -- 判定する形態素ノード。

戻り値:

基底クラスでは常に True を返します。

戻り値の型:

bool

class pygeonlp.api.filter.EntityClassFilter(ne_class, **kwargs)

ベースクラス: Filter

形態素ごとの候補ノード集合の中に、指定した固有名クラスと一致する地名語が 含まれていれば、それ以外の候補は削除するフィルタ。 テキストに含まれている地名語の固有名クラスが事前に分かっていて、 そのクラスに一致する地名語だけを抽出したい場合などに利用します。

候補ノード集合の中に一致する地名語が無い場合は候補リストをそのまま返します。

__init__(ne_class, **kwargs)
パラメータ:

ne_class (str) -- このフィルタで選択したい固有名クラスを表す正規表現文字列。 例: r'国/?.*'

filter_func(candidate, **kwargs)
パラメータ:

candidate (Node) -- 対象の形態素ノード

戻り値:

ne_class に一致する場合は True, 一致しない場合は Falase

戻り値の型:

bool

class pygeonlp.api.filter.GreedySearchFilter(scoring_class=None, scoring_options=None, **kwargs)

ベースクラス: Filter

前後の地名語との関係を見て最もスコアが高くなる地名語を 1 つだけ残し、それ以外は削除するフィルタ。

ただし同点となる地名語が複数存在する場合は複数の候補を残します。

__init__(scoring_class=None, scoring_options=None, **kwargs)
パラメータ:
  • scoring_class (class, optional) -- パスのスコアとノード間のスコアを計算する関数を持つ スコアリングクラス。 指定しない場合、pygeonlp.api.scoring モジュール内の ScoringClass が利用されます。

  • scoring_options (any, optional) -- スコアリングクラスの初期化に渡すオプションパラメータ。

apply(input, **kwargs)

このフィルタは前後の形態素ノードを調べて地名語間の関係を計算するため、 apply() をオーバーライドします。

パラメータ:

input (list) -- 入力となるラティス表現。

戻り値:

フィルタを適用したラティス表現。

戻り値の型:

list

class pygeonlp.api.filter.InputBasedFilter(**kwargs)

ベースクラス: Filter

入力によって対象とする地名語クラスやパス表現の選択ロジックを 変更して、実時間で処理可能な候補に絞り込むフィルタ。

__init__(**kwargs)

フィルタを初期化します。 このクラスには指定するパラメータはありません。

apply(lattice, **kwargs)

入力ベースフィルタを適用します。

パラメータ:

lattice (list) -- 入力となるラティス表現。

戻り値:

フィルタ適用後のラティス表現。

戻り値の型:

list

注釈

時刻表や地震速報など、特定の地名語クラスを持つ地名が 高い密度で出現する文字列を解析する場合、候補となるクラスを 絞り込んで解析処理時間を短縮し、精度を向上させます。

class pygeonlp.api.filter.FilterError

ベースクラス: RuntimeError

フィルタ処理の際に例外が起こると、このクラスが発生します。