出力

English version

Enju は汎用パーザ up を使っているので,up が提供するインタフェースを使っ て構文解析結果を利用することができます.しかし,up が提供するインタフェー スは LiLFeS の述語なので,構文解析結果を利用するためには LiLFeS プログ ラムを書く必要があります.これはエンドユーザには荷が重いので,enju コ マンドは,解析結果を加工して,利用しやすい形にして出力しています.

具体的には,単語の間の述語項関係や,それに句構造の情報を付加した XML 形式で出力することができます.それぞれ,"grammar/outputdep.lil", "grammar/outputxml.lil" で出力を計算しています.以下では,それらの出力 の計算手続きについて簡単に説明します.

依存関係を出力する

"grammar/outputdep.lil" は,2単語間の述語項関係を出力するプログラムで す.述語項構造の節で説明したように,Enju の文 法は述語項構造を計算することができます.従って,これを2単語間の関係の 集合として,出力します.

基本的には,Enju で計算された述語項構造を,MODARG, ARG1, ..., ARG5 で表 されているそれぞれの関係の集合に変換し,それらを標準出力に出力するだけ です.出力形式の詳細については,Enju ユーザマニュアルの構文解析器の使い方を参照して下さい.

XML を出力する

"grammar/outputxml.lil" は,述語項関係と句構造を XML 形式で出力するプロ グラムです.入力文に対して XML で注釈を付加する形で述語項関係と句構造を 表します.出力形式の詳細については,Enju ユーザマニュアルの構文解析器の使い方を参照して下さい.

句構造は木構造で表すことができるので,そのまま XML で表現します.XML の 各タグが句を表し,属性で句のシンボルなどを表現します.述語項関係は必ず しも木構造にならないので,句構造の各ノードに ID を割り当て,その ID の 間の関係として記述します.

まず,構文解析結果から,句構造と,述語がどの句を項としてとっているかの 情報を計算します.これは "grammar/outputxml.lil" の xml_phrase_structure/2 という述語が行っています.まず, ルートから構文木を深さ優先でたどっていきます.そして,各ノードの述語項 構造(sign の CONT 素性)を監視し,項の値が具体化された時のノードを保存 しておきます.最後に,各単語について,項の値が具体化されたノードがわかっ ているので,それを使って項の ID を書き込みます.

xml_phrase_structure/2で計算する構造は,素性構造で表されてい ますが,これを実際に XML として出力するプログラムは,C++ で実装されて います.入力文と xml_phrase_structure の出力を渡すと, xml_phrase_structure の末端ノードの単語と入力文中の単語とのアラインメ ントをとり,適切な位置にタグを挿入します.このプログラムは, "parser/outputxml.cc" で実装されています.


Enju 開発者用マニュアル Enju ホームページ 辻井研究室
MIYAO Yusuke (yusuke@is.s.u-tokyo.ac.jp)