lexextract: derivbank および lexicon 作成ツール
English version
構文木から derivation と lexical entry を作るツールです.
lexextract [オプション] 文法獲得モジュール treebank derivbank lexicon template lexbank
|
文法獲得モジュール | inverse schema や inverse lexical rule が定義された lilfes プログラム
|
treebank | 入力の treebank (lildb 形式)
|
derivbank | derivation を出力するファイル (lildb 形式)
|
lexicon | lexicon を出力するファイル (lildb 形式)
|
template | lexical entry template を出力するファイル (lildb 形式)
|
lexbank | derivation の terminal 列を出力するファイル (lildb 形式)
|
オプション
|
-v | デバッグ用メッセージを表示します.
|
-vv | デバッグ用メッセージをたくさん表示します.
|
treetrans によって作成された treebank から,ターゲット文法理論の
derivation bank (derivbank) を作成し,さらに lexicon を抽出します.
まず,derivmake.lil で定義されているインタフェースを使って,構文木を以
下のアルゴリズムで derivation に変換します.
- 構文木の根元の TREE_NODE\NODE_SIGN\ 素性の値に対し,
root_constraints/1 を適用する.
root_constraints(-$Sign)
|
$Sign | ルートの sign
|
derivation のルートの sign と,$Sign を単一化しま
す.
|
- 構文木の各ノードの TREE_NODE\NODE_SIGN\ 素性の値に対し,トップダ
ウンに inverse_schema_binary/4 または inverse_schema_unary/3 を適用
する.このとき,TREE_NODE\SCHEMA_NAME\ の値をスキーマ名として使用す
る.スキーマ適用は深さ優先で行われる.
inverse_schema_binary(+$SchemaName, +$Mother,
-$Left, -$Right)
|
$SchemaName | スキーマの名前
|
$Mother | 親の sign
|
$Left | 左の娘の sign
|
$Right | 右の娘の sign
|
$Mother に binary schema を適用し,娘の sign を計
算します.
|
inverse_schema_unary(+$SchemaName, +$Mother,
-$Dtr)
|
$SchemaName | スキーマの名前
|
$Mother | 親の sign
|
$Dtr | 娘の sign
|
$Mother に unary schema を適用し,娘の sign を計算
します.
|
- 全ての中間ノードで inverse schema を適用した後,各末端ノードの
TREE_NODE\NODE_SIGN\ の値に対し,lexical_constraints/2 を適用する.
inverse_schema をすべて適用した後にこれが適用されるため,lexical
entry のデフォルト制約をここでかけることができる.
lexical_constraints(+$Word, -$Sign)
|
$Word | 単語を表す素性構造(word) (TREE_NODE\WORD\ 素性の値)
|
$Sign | 末端ノードの sign
|
末端ノードの sign を $Sign を単一化します.
|
変換後の derivation は,derivtypes.lil で定義されている素性構造で
derivbank に格納されます.また,derivation の末端ノードだけを集めたリ
ストは lexbank に格納されます.
次に,derivation の各末端ノードの素性構造から,lexical entry template
及び単語と lexical entry template のマッピングを抽出します.抽出のイン
タフェースは lexextract.lil で定義されており,以下のアルゴリズムで抽出
を行います.以下の各ステップでは,処理対象の素性構造がその都度コピーさ
れるので,新たな制約をかけたり,破壊的操作などを行っても,他のlexical
entry に影響を与えません.
- derivation の末端ノードの DERIV_SIGN\ 素性の値に対し,
lexical_entry_template/3 を適用する.結果は derivation の
LEXENTRY_SIGN\ 素性に格納される.
lexical_entry_template(+$Word, +$Sign, -$Template)
|
$Word | 単語を表す素性構造
|
$Sign | 単語に対応する sign
|
$Template | 単語の lexical entry template
|
単語 $Word に対応する sign $Sign から,その単語の
lexical entry template $Template を作ります.
|
- 結果の素性構造に対してreduce_lexical_template/5 を適用し,lexicon
を引くキー,lexeme の素性構造,そして lexical rule の適用履歴を得る.
結果の lexeme の素性構造は template database に格納される.
lexeme の素性構造は,derivation の LEXEME_SIGN\ 素性にも格納される.
reduce_lexical_template(+$Word, +$InTemplate, -$Key,
-$OutTemplate, -$LexRules)
|
$Word | 単語を表す素性構造
|
$InTemplate | 入力の template (lexical_entry_template/3 の
出力)
|
$Key | lexicon に登録する時のキー
|
$OutTemplate | lexeme の template
|
$LexRules | 適用された lexical rule のリスト
|
lexical_entry_template/3 で得られた template に,
lexical rule を逆適用し,lexeme の template を計算します.
|
- lexeme の素性構造がまだデータベースに登録されていない初出のも
のであるときは,lexeme_name/4 を適用しtemplate の名前を得る.この
template の名前とlexical rule の適用履歴の組み合わせが,ここで
の lexical entry template の名前となる.キーと template の名前の
マッピングがlexicon に登録される.template の名前は,derivation
の TERM_TEMPLATE\ 素性にも格納される.
lexeme_name(+$Word, +$Template, +$ID, -$Name)
|
$Word | 単語を表す素性構造
|
$Template | lexeme の sign
|
$ID | 通し番号
|
$Name | lexeme の名前(string)
|
lexeme に一意の名前をつけます.
|
- 単語の出現回数をインクリメントする.出現回数は,
lexrefineで単語の足切りをするときに使う.
word_count_key(+$LexKey, -$CountKey)
|
$LexKey | 入力のキー(lexicon を引くときのキー)
|
$CountKey | 単語を数えるのに使うキー
|
単語の出現回数を数えるときに使うキーを返します.
lexicon を引くキーが違う場合でも同じ単語としてカウントしたいものに対
しては同じ $CountKey を返すようにします.
|
全ての derivation から文法抽出が終わると,lexicon と template database
をファイルに保存します.
MAYZツールキットマニュアル
MAYZホームページ
辻井研究室
MIYAO Yusuke (yusuke@is.s.u-tokyo.ac.jp)