ここでは,パワーユーザのために,Enju の使い方・上級編を紹介します.
デフォルトでは,Enju は同梱している stepp tagger を使います. 自分で開発した品詞タガーを使いたいときは,enju 起動時に,-t オプションで品詞タガーを指定してください.
% enju -t your_own_tagger
your_own_tagger が実行可能(パスが通っている)である必要があります. 品詞タガーの入力フォーマットは enju の入力フォーマットと同じ(一行一文)です. 出力は,以下のようなフォーマットにしてください.
John/NNP walked/VBD slowly/RB ./.
単語と品詞は / でつなぎ,各単語はスペース1個で区切ってください.スペースが2個以上あると正常に動作しません.
もしくは,あらかじめテキストに品詞タグを付与し,タグ付きテキストを enju に入力してください.この時は,-nt オプションを指定します.
% your_own_tagger < RAW_TEXT > TAGGED_TEXT % enju -nt < TAGGED_TEXT
TAGGED_TEXT のフォーマットは,上と同じです.
Enju の文法は,単一化文法のための高速なパーザ UP を使うように設計されています. UP は,MAYZ ツールキット で提供されているパーザです. 従って,UP のインタフェースを使って,構文解析結果にアクセスし,様々な情報を取り出すことができます. 例えば,HPSG の sign の素性構造や,解析にかかった時間やエッジ数などのプロファイルを得ることができます. さらに,これらを利用する LiLFeS プログラムを書くことで,自分用の出力を出させることができます.
実際,Enju が出力する述語-項関係や XML 出力は,LiLFeS プログラムで計算されています. ソースプログラムはパッケージの "enju/{outputdep.lil,outputxml.lil}" にありますので,そちらを参照して下さい. また,ネットワーク経由で構文解析を行うための HTTP/CGI サーバも,LiLFeS プログラムで書かれています. こちらは,"enju/cgi.lil" を見て下さい.
UP のインタフェースの詳細については,UP のマニュアル を参照してください.
Enju のソースパッケージには,Penn Treebank から文法および確率モデルを作るためのプログラムが含まれています. これらをユーザが書き換えて文法を作り直すことで,文法を改良したり拡張したりすることができます. ただし,文法を一から作り直すにはかなりのマシンパワーと時間が必要です (3.0 GHz Xeon, 8 GByte メモリで約半日).
文法を作るためのプログラムを使いこなすには,MAYZ ツールキットが使える必要があります. 詳しくは,MAYZ ツールキットのマニュアルを参照して下さい. さらに,amis 4.0 以上がインストールされている必要があります.
また,リソースとして Penn Treebank II の .mrg ファイル(POS と木構造の両方が付けられたファイル)と,stemming のために WordNet のデータファイル(index.*, *.exc)が必要です. これらのファイルをそれぞれ penn/combined/wsj ディレクトリ,wordnet/dict ディレクトリの下に置いて下さい. デフォルトの Makefile では,Penn Treebank II のセクション2から21までの.mrg ファイルをまとめた wsj02-21.mrg というファイルを入力することを仮定しています. 別のファイルを使うときは,"Makefile.am" のはじめの部分で定義されている "CORPUS_NAME" 変数などを書き換えてください.
Enju 文法を再構築するためには,configure のオプションに --with-enju-grmmar を加える必要があります.
./configure --with-enju-grammar
このオプションをつけて configure をすると,Makefile に 文法を作るためのターゲットも含まれるようになります. 後は,make を実行すると各ソースファイルのタイムスタンプに応じて,文法および確率モデルを作り直してくれます.
また,GENIA ツリーバンクなど異分野のコーパスを使った再学習を行うときは,configure のオプションに --with-domain-adaptation を加えてください.
./configure --with-enju-grammar --with-domain-adaptation
デフォルトの Makefile では,異分野コーパスとして GENIA ツリーバンクを使うことを想定しています. その場合 genia ディレクトリ以下に {0001-1600}.xml ファイルを置いてください. 別のコーパスを使う場合は,"Makefile.am" のはじめの部分で定義されている "ADAPT_CORPUS_NAME" 変数などを書き換えてください.
Enju の文法開発について詳しくは Enju 開発者マニュアル を参照して下さい.
Enju のパッケージには,いくつかの便利な LiLFeS モジュールが提供されています. これらは,enju の "-l" オプションで指定して,構文解析器に読みこみます. (構文解析器の使い方を参照)
"enju/outputdep.lil" は,単語の述語-項関係 (predicate-argument relation) をテキスト形式で出力するための LiLFeS モジュールです. enju を引数なしで起動すると,このモジュールが読み込まれ,output_dependency_file が自動的に実行されます.
このモジュールでは以下の述語が利用できます. 出力のフォーマットについては,構文解析器の使い方を参照して下さい.
output_dependency(+$Sentence, +$Stream) | |
$Sentence | 入力文(string) |
$Stream | 出力ストリーム(lilfes_stream) |
入力文 $Sentence を解析し,predicate-argument relation を $Stream に出力します.解析が失敗した場合は,"Parsing failure"という文字列を出力します. |
output_dependency(+$Sentence) | |
$Sentence | 入力文(string) |
入力文 $Sentence を解析し,predicate-argument relation を標準出力に出力します.解析が失敗した場合は,"Parsing failure"という文字列を出力します. |
output_dependency_file(+$Input, +$Output) | |
$Input | 入力ファイルの名前 |
$Output | 出力ファイルの名前 |
入力ファイルの各行を解析し,結果を出力ファイルに出力します. |
output_dependency_file(+$Input) | |
$Input | 入力ファイルの名前 |
入力ファイルの各行を解析し,結果を標準出力に出力します. |
output_dependency_file | |
標準入力の各行を解析し,結果を標準出力に出力します. |
"enju/outputxml.lil" は,構文解析結果を XML 形式で出力するための LiLFeS モジュールです. enju に -xml オプションを与えると output_xml_file が,-so オプションを与えると output_so_file が自動的に実行されます.
このモジュールでは以下の述語が利用できます. 出力のフォーマットについては,構文解析器の使い方を参照して下さい.
output_xml_file(+$Input, +$Output) | |
$Input | 入力ファイルの名前 |
$Output | 出力ファイルの名前 |
入力ファイル $Input の各行を解析し,結果を $Output に XML 形式で出力します. |
output_xml_file(+$Input) | |
$Input | 入力ファイルの名前 |
入力ファイル $Input の各行を解析し,結果を標準出力に XML 形式で出力します. |
output_xml_file | |
標準入力の各行を解析し,結果を標準出力に XML 形式で出力します. |
output_so_file(+$Input, +$Output) | |
$Input | 入力ファイルの名前 |
$Output | 出力ファイルの名前 |
入力ファイル $Input の各行を解析し,結果を $Output に stand-off 形式で出力します. |
output_so_file(+$Input) | |
$Input | 入力ファイルの名前 |
入力ファイル $Input の各行を解析し,結果を標準出力に stand-off 形式で出力します. |
output_so_file | |
標準入力の各行を解析し,結果を標準出力に stand-off 形式で出力します. |
"enju/moriv.lil" は,XHTML/XSLT をサポートしたウェブブラウザ (FireFox など) や MoriV を使って,構文解析結果の詳細をブラウズするための LiLFeS モジュールです. 構文木や素性構造をグラフィカルに見ることができます.
Enju を起動する時に -moriv オプションを与えると CGI サーバが起動します.
% enju -moriv port_number
次に,Enju を起動したホストの指定したポートの,"/cgi-lilfes/moriv?" にブラウザからアクセスして下さい. 例えば,localhost で Enju を起動した場合は,以下の URL にアクセスします(27109番ポートを指定したと仮定しています).
http://localhost:27109/cgi-lilfes/moriv?
すると,構文解析をブラウズするためのページが表示されます. ページ上部のフォームに文を入力し,"Parse" ボタンを押すと,左下に構文解析結果の概要(単語数,エッジ数,解析時間など)とメニューが表示されます. あとは,メニューの各リンクをクリックすることによって,構文解析結果を様々な形で見ることができます.
"Sign/Tree/Tree (with prob.)" は,それぞれ,ルートノードの sign, 構文木,figure-of-merit (FOM) 付きの構文木を表示します. "Word lattice" は,入力文の word lattice を表示します. "Node list" は構文木中のノードのリストを表示し,さらにそのノードの sign を見ることができます. "Semantics" は述語項構造を表示します. Prolog の term 形式のほか,文中の単語にマウスカーソルを合わせるとその単語の項になる句をハイライトする表示もします.
このほか,ページ上部のリンクをクリックすることで,パーザや文法の様々なデータを表示させることができます.
以下の例は,Firefox や MoriV などのウェブブラウザで見ることができます.