Edited at

意味役割付与システム ASA のPython client


はじめに

ちゃお・・・†

今回は岡山大学竹内研究室のASAのPythonクライアントを作ったので紹介します。


意味役割付与システムとは


下記のように入力文に対して述語項構造解析を行い,その後,述語の語義を同定して,係り関係にある項の意味役割を付与するものです.

(入力文)

昨日彼は私に手紙を送った.

(出力)

[昨日] 場所(時)(点) => 時間(点)に変更予定 (2015.10)

[彼は] 動作主

[私に] 着点(人)

[手紙を] 対象

[送った] 状態変化あり-位置変化-位置変化(物理)(人物間)-他者への所有物の移動-提供

のように述語に対して,概念(「提供」)を付与し,述語にかかる係り元(項と呼ぶ)に意味的な関係を付与するものです.例えば「彼は」は「送った」に対して「動作主」という意味役割であることを示しています.

http://www.cl.cs.okayama-u.ac.jp/study/project/asa/



インストール


  1. ASA Scalaをダウンロードします http://www.cl.cs.okayama-u.ac.jp/study/project/asa/asa-scala/download/


  2. pip install asa でPythonクライアントをインストールします


使い方

from asa import ASA

# Initialize a ASA instance
asa = ASA(path-to-asa)

# Let's analyze a sample sentence
asa.parse('彼は村長だ')
# =>
[{'ID': 0,
'category': '人',
'frame': '1-copula',
'link': 1,
'main': '彼',
'part': 'は',
'tense': 'PRESENT',
'type': 'elem',
'wakati': ['彼\tカレ\t\t名詞,代名詞,一般\t\t\tO', 'は\t\t\t助詞,係助詞\t\t\tO']},
{'ID': 1,
'category': '人',
'frame': '0-elem',
'link': -1,
'main': '村長',
'mood': 'INDICATIVE',
'part': 'だ',
'polarity': 'AFFIRMATIVE',
'sentelem': 'PREDICATE',
'tense': 'PRESENT',
'type': 'copula',
'voice': 'ACTIVE',
'wakati': ['村長\tソンチョウ\t村長\t名詞,一般\t\t\tO', 'だ\t\t\t助動詞\t特殊・ダ\t基本形\tO']}]


問題点: 実行が遅い -> だいぶ解消されました

echoコマンドからパイプでASAに渡すだけというシンプルな構成になっているので、毎回YAMLファイルをロードするため実行毎に1秒近くかかります。JPypeとか使えばいい感じにならないかな?

追記: Version 0.2からは、最初だけYAMLをロードしてファイルを介しながらプロンプトでやり取りするようにしたため、0.1系と比較して約36倍ほど速くなりました。 たとえば上の例だと48.5 msかかっていたのが2.75 msにまで短縮できました。

我こそは!という方はcontributions are welcomeです!

https://github.com/ikegami-yukino/asa-python