pygeonlp.api.scoring module

scoring モジュールは、一通りのジオパージング処理を行なうために必要最小限の、 スコアリング処理の実装をまとめています。 十分な精度が得られない場合、用途に応じてチューニングを行なうか、 別の手法を実装して利用してください。

class pygeonlp.api.scoring.ScoringClass(options=None)

ベースクラス: object

node_relation_score(node0, node1)

node クラスのインスタンス node0 と node1 との関係による スコアを計算するデフォルト実装です。 関係が強いノードほど高いスコアを返します。

サンプル

>>> import pygeonlp.api as api
>>> from pygeonlp.api.scoring import ScoringClass
>>> api.init()
>>> s = ScoringClass()
>>> s.node_relation_score(api.analyze('国会議事堂前')[0][0],
...   api.analyze('永田町')[0][0])
20

メモ

スコアは以下のように計算しています。

  • どちらかのノードが地名語でも住所でもない(NORMAL)場合

    0 点

  • どちらのノードも地名語で、固有名クラスが一致する場合(同クラス)

    +10 点

  • どちらのノードがもう一方の hypernym にふくまれる場合(親子関係)

    +5 点

  • 両方のノードの hypernym が1つ以上一致する場合(兄弟関係)

    +5 点

  • ノード間の距離(単位は degree)を計算し、

    0.2度以下の場合は +5 点、それ以上離れている場合は +1/距離を加算

path_score(path)

パス表現の結果を一つ受け取り、スコアを計算して返すデフォルト実装です。

パラメータ

path (list of Node) -- 解析結果候補のパス表現。

戻り値

与えられたパスを評価したスコアを返します。 値が大きいパスほど geoparse() の結果で上位候補として返されます。

戻り値の型

int

メモ

次のように得点を計算しています。

  • 地名語・住所を候補として全く含まない形態素が存在する場合

    +形態素数 ×1点(地名語か非地名語か不明な形態素は非地名語を優先)

  • 全ての候補の中に住所ノード候補が含まれている場合

    +住所階層数('東京都/千代田区'なら2)×10点

  • 全ての候補の中に含まれる地名語ノード候補に、 同じ固有名クラスが2回以上出現する場合

    +出現回数 ×10点

  • ある形態素に地名語ノード候補が含まれる場合

    nlookup 先までの形態素に含まれる地名語・住所ノード候補との 関係によるスコアを node_relation_score() で計算し加算