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 | ルール名
|
+$Tree | tree: 構文木
|
+$Tree と unifiable な木を取り除きます.
|
tree_transform_rule(+$Name, +$InTree, -$OutTree)
|
+$Name | ルール名
|
+$InTree | tree: 入力構文木
|
-$OutTree | tree: 出力構文木
|
$InTree を $OutTree に変換します.
|
tree_subst_pattern(+$Name, +$InPattern, +$OutPattern)
|
+$Name | ルール名
|
+$InTree | tree: 入力木のパターン
|
+$OutTree | tree: 出力木のパターン
|
$InTree に tree_match/2 でマッチする木を,
$OutPattern のパターンに変換します.
|
tree_unify(+$Name, ?$Tree)
|
+$Name | ルール名
|
+$Tree | tree: 構文木
|
$Tree を構文木に unify します.
|
tree_match_pattern(+$Name, +$Pattern)
|
+$Name | ルール名
|
+$Tree | tree: 構文木パターン
|
$Pattern を構文木に unify します.
|
変換ルールは,tree_ignore/2, tree_transform_rule/3,
tree_subst_pattern/3, tree_unify/2, tree_match_pattern/2 の順番で
適用されます.
また,以下のインタフェースを用いて,構文木を入力する時(変換ルールを適
用する前)に構文木を整形することができます.
delete_tree(+$Tree)
|
+$Tree | tree: 構文木
|
+$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)
|
+$InSym | preterminal symbol
|
-$NewSym | nonterminal 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)