treetrans: 構文木変換ツール

English version

Penn Treebank 形式の構文木をパターンルールを使って変換するツールです.

treetrans [オプション] ルールモジュール 入力ファイル 出力データベース
ルールモジュール構文木を変換するパターンルールがかかれた lilfes file
入力ファイル入力の treebank (Penn Treebank 形式)
出力データベース出力の treebank (lildb 形式)
オプション
-vデバッグ用メッセージを表示します.
-vvデバッグ用メッセージをたくさん表示します.

Penn Treebank 形式のファイルを入力とし,構文木変換ルールを各入力木に適 用し,その結果を lildb 形式のデータベースに格納します.パターンルール は,treetrans.lil で定義されているインタフェースを用いて,lilfes プロ グラムで記述します.構文木は,treetypes.lil で定義されている素性構造で 表現されます.例えば,以下の例では,(... than/IN XXX) という木を, (... (PP than/IN XXX:argument)) という木に変換します.

tree_transform_class("than", "topdown", "weak").

tree_subst_pattern("than",
                   TREE_NODE\$Node & TREE_DTRS\$Dtrs,
                   TREE_NODE\$Node & TREE_DTRS\$NewDtrs) :-
    $Dtrs = [$Left & tree_any & ANY_TREES\[_|_],
             $Than & tree & TREE_NODE\(SYM\"IN" & WORD\SURFACE\"than"),
             $Right & tree & TREE_NODE\HEAD_MARK\argument],
    $NewDtrs = [$Left,
                TREE_NODE\(SYM\"PP" & MOD\[] & ID\[] & HEAD_MARK\modifier) &
                TREE_DTRS\[$Than, $Right]].

構文木変換ルールの書き方

まず,tree_transform_class/3 で変換ルールの名前,適用順序,適 用失敗したときのふるまいを指定します.
tree_transform_class(+$Name, +$Direction, +$Strict)
+$Name変換ルールの名前
+$Direction変換ルールの適用順序
  • "topdown": 上から下へ適用する
  • "bottomup": 下から上へ適用する
  • "rootonly": 構文木の根にだけ適用する
+$Strict失敗したときの振舞い
  • "strict": 適用失敗したら,構文木の変換を失敗させる
  • "weak": 適用失敗しても無視して次のルールに行く

次に,以下のようなインタフェースを用いて変換ルールを記述します.全ての インタフェースにおいて,第一引数は上で指定した変換ルール名です. treetransプログラムは,tree_transform_class/3 で指定された適用 順序にしたがって,構文木の各ノードをトラバースし,変換ルールを適用しま す.

tree_ignore(+$Name, ?$Tree)
+$Nameルール名
+$Treetree: 構文木
+$Tree と unifiable な木を取り除きます.
tree_transform_rule(+$Name, +$InTree, -$OutTree)
+$Nameルール名
+$InTreetree: 入力構文木
-$OutTreetree: 出力構文木
$InTree を $OutTree に変換します.
tree_subst_pattern(+$Name, +$InPattern, +$OutPattern)
+$Nameルール名
+$InTreetree: 入力木のパターン
+$OutTreetree: 出力木のパターン
$InTree に tree_match/2 でマッチする木を, $OutPattern のパターンに変換します.
tree_unify(+$Name, ?$Tree)
+$Nameルール名
+$Treetree: 構文木
$Tree を構文木に unify します.
tree_match_pattern(+$Name, +$Pattern)
+$Nameルール名
+$Treetree: 構文木パターン
$Pattern を構文木に unify します.

変換ルールは,tree_ignore/2, tree_transform_rule/3, tree_subst_pattern/3, tree_unify/2, tree_match_pattern/2 の順番で 適用されます.

また,以下のインタフェースを用いて,構文木を入力する時(変換ルールを適 用する前)に構文木を整形することができます.

delete_tree(+$Tree)
+$Treetree: 構文木
+$Tree と unifiable な木を削除します.
nonterminal_mapping(+$InSym, -$OutSym)
+$InSym入力の nonterminal symbol
-$OutSym出力の nonterminal symbol
nonterminal symbol $InSym を $OutSym に変換します.
preterminal_mapping(+$InSurface, +$InSym, -$OutSurface, -$OutSym)
+$InSurface入力の単語(surface form)
+$InSym入力の nonterminal symbol
-$OutSurface出力の単語(surface form)
-$OutSym出力の nonterminal symbol
単語 $InSurface/$InSym を $OutSurface/$OutSym に変換します.
preterminal_projection(+$InSym, -$NewSym)
+$InSympreterminal symbol
-$NewSymnonterminal symbol
preterminal $InSym の直上に,nonterminal symbol $NewSym を加えます.

詳細は,treetrans.lil のマニュアルを見て下さい.変換ルールの中で, tree_binarize/2 (構文木を二分木化する.binarizer.lilで定義されている) や mark_head/1, mark_modifier/1 (それぞれ,head マークや, modifier/argument マークをつける.markhead.lilで定義されている) など のツールを使うこともできます.


MAYZツールキットマニュアル MAYZホームページ 辻井研究室
MIYAO Yusuke (yusuke@is.s.u-tokyo.ac.jp)