構文解析器の使い方

English version

Enju の起動

enjuコマンドを実行すると,文法のデータファイルを読み込み,入 力待ちになります.

% enju
Enju 2.0      by Yusuke Miyao and Tsujii Lab., Tokyo Univ.
Loading grammar module "enju/grammar"... done.
Loading FOM module "enju/synmodel"... done.
Loading parser module "up/pcky"... done.
Loading application module "enju/outputdep"... done.
Initializing parser...
  Loading stemming database: /usr/local/share/liblilfes/enju/DATA/Enju.dict
  Loading grammar database: /usr/local/share/liblilfes/enju/DATA/Enju.lexicon
/usr/local/share/liblilfes/enju/DATA/Enju.templates
  Initializing external tagger: uptagger
  Loading Unigram FOM model: /usr/local/share/liblilfes/enju/DATA/Enju-lex.output
  Loading Syntax FOM model: /usr/local/share/liblilfes/enju/DATA/Enju-syn.output
done.
Ready

ここで文を一行で入力して下さい.すると,解析結果が標準出力に出力されま す.以下の例は,"Enju is an efficient HPSG parser." という文を入力した ときの出力結果です.

ROOT    ROOT    ROOT    ROOT    -1      ROOT    is      be      VBZ     VB     1
is      be      VBZ     VB      1       ARG1    Enju    enju    NNP     NNP    0
is      be      VBZ     VB      1       ARG2    parser  parser  NN      NN     5
an      an      DT      DT      2       ARG1    parser  parser  NN      NN     5
efficient       efficient       JJ      JJ      3       ARG1    parser  parser NN       NN      5
HPSG    hpsg    NNP     NNP     4       MOD     parser  parser  NN      NN     5


出力フォーマット

構文解析結果は,単語間の依存関係として出力されます.一行が一つの依存関 係,空行が文の終わりを表します.各行の各カラムは,タブで区切られ,以下 の情報を表しています.

単語の位置は,0 から始まる整数で表されます.上の例では,Enju は 0, is は 1, ... そして parser が 6 になります.ピリオドや疑問符など,品詞が "." の単語は無視されます.

述語と項の関係のラベルは,MOD, ARG1, ..., ARG5 の5つのうちの1つで 表されます.ARG1 は動詞の主語や,修飾語(形容詞や前置詞など)の修飾先を 指します.ARG2 は動詞や前置詞の目的語になります.ARG3 以降も同様に動詞 の目的語などを指します.MOD は,名詞が名詞を修飾する場合や,分詞構 文などにおいて動詞句が動詞句を修飾するときの修飾先を指します.

始めの行は,文全体の主辞(ルート)となる述語を表しています.この行では, 述語は ROOT という文字列で表され,関係のラベルも ROOT となっています. また,項が未知の場合(省略など),その単語や品詞は UNKNOWN と表示されま す.構文解析が失敗した場合は,"Parsing failure:" と表示され,その後ろ に失敗の原因が表示されます.

簡易フォーマット

デフォルトでは上のような出力フォーマットになっていますが,Enju は他の出 力フォーマットもサポートしています.Enju の起動時に -s オプションを指定 すると,以下のような簡易フォーマットで出力します.簡易フォーマットでは, 助動詞や冠詞などの述語項関係は出力されません.また,前置詞句は関係のラ ベルとして出力されます.例えば "a book on the table" は "PP_on book table" と出力されます.

ARG1    be/VB(1)        enju/NNP(0)
ARG2    be/VB(1)        parser/NN(5)
ARG1    efficient/JJ(3) parser/NN(5)
MOD     parser/NN(5)    hpsg/NNP(4)

XML フォーマット

Enju は,XML 形式や stand-off の XML 形式での出力もサポートしています. Enju の起動時に -xml オプションを指定すると XML 形式で,-so オプション を指定すると stand-off の XML 形式で出力されます.これらの形式では,単 語間の依存関係だけでなく,句構造も出力されます.

XML 形式では,単語の依存関係と句構造が XML のタグおよび属性で表されます. 一文の構造が一行に出力されます.以下の例は,"Enju is an efficient HPSG parser." を入力したときの結果です(実際は一行で出力されます).

<phrase cat="s" head="4" id="0"><phrase cat="np" head="5" id="10"><phrase cat="np"
head="5" id="12"><word pos="NNP" base="enju" surf="enju" id="5">Enju</word></phrase>
</phrase><phrase cat="vp" head="4" id="13"> <phrase cat="vp" head="4" id="14"><word
pos="VBZ" base="be" surf="is" id="4" arg1="10" arg2="15">is</word></phrase><phrase
cat="np" head="6" id="15"> <phrase cat="dt" head="7" id="18"><word pos="DT" base="an" surf="an"
id="7" arg1="15">an</word></phrase><phrase cat="np" head="6" id="19"> <phrase
cat="aj" head="8" id="22"><word pos="JJ" base="efficient" surf="efficient" id="8" arg1="15">
efficient</word></phrase><phrase cat="np" head="6" id="23"> <phrase cat="np" head="9"
id="27"><word pos="NNP" base="hpsg" surf="hpsg" id="9" mod="15">HPSG</word></phrase>
<phrase cat="np" head="6" id="28"><word pos="NN" base="parser" surf="parser" id="6">parser
</word></phrase></phrase></phrase></phrase></phrase></phrase>.

句構造は,<phrase> タグで表されます.句の構成素を <phrase> タグで囲み,cat 属性でその句のシンボルを表します.たとえば,名詞句の "HPSG parser" は,<phrase cat="np">HPSG parser</phrase> と 表します.ここで使われる句のシンボルは,以下のとおりです.

s文(疑問文なども含む)
vp動詞句
np名詞句
dt指定詞句(限定詞や数量詞など)
aj形容詞句
av副詞句
pp前置詞句
pl不変化詞
pu句読点
cmカンマ
cj等位接続詞
cp補文標識句
sc従属接続詞

それぞれの単語は,<word> タグで囲んで出力されます.属性 pos, base がそれぞれ品詞と base form を表します.

phrase および word タグには,文中で一意の ID 番号が割り当てられます. ID 番号は id 属性で表示されます.phrase タグには,head 属性があり,こ れは子供の phrase または word の中で,head (主辞) になっているものの ID 番号を表します.

単語の依存関係は,word タグの中の mod, arg1, arg2, ..., arg5 属性で表 します.述語になる単語の中の各属性は,項になる句の ID 番号を表します. 上の例では,"is" を囲んでいる word タグでは,arg1="10" arg2="15" と出 力されていますが,これはそれぞれ "Enju" と "an efficient HPSG parser" を支配する句の ID 番号になっています.

Stand-off フォーマット

Stand-off 形式では,XML の各タグが支配する領域を,元の入力文の文字位置 で出力します.一行が一つのタグに相当します.空行が文の終わりを表します. 上の例の XML 出力は,以下のような stand-off 形式で出力されます.

STDIN   0       4       word pos="NNP" base="enju" surf="enju" id="5"
STDIN   0       4       phrase cat="np" head="5" id="12"
STDIN   0       4       phrase cat="np" head="5" id="10"
STDIN   5       7       word pos="VBZ" base="be" surf="is" id="4" arg1="10" arg2="15"
STDIN   5       7       phrase cat="vp" head="4" id="14"
STDIN   8       10      word pos="DT" base="an" surf="an" id="7" arg1="15"
STDIN   8       10      phrase cat="dt" head="7" id="18"
STDIN   11      20      word pos="JJ" base="efficient" surf="efficient" id="8" arg1="15"
STDIN   11      20      phrase cat="aj" head="8" id="22"
STDIN   21      25      word pos="NNP" base="hpsg" surf="hpsg" id="9" mod="15"
STDIN   21      25      phrase cat="np" head="9" id="27"
STDIN   26      32      word pos="NN" base="parser" surf="parser" id="6"
STDIN   26      32      phrase cat="np" head="6" id="28"
STDIN   21      32      phrase cat="np" head="6" id="23"
STDIN   11      32      phrase cat="np" head="6" id="19"
STDIN   8       32      phrase cat="np" head="6" id="15"
STDIN   5       32      phrase cat="vp" head="4" id="13"
STDIN   0       32      phrase cat="s" head="4" id="0"

行中の要素はタブで区切られています.はじめの要素は入力ファイルの名前で す.今は標準入力を使っているので STDIN になります.2つめはタグの開始位 置,3つめは終了位置です.4つめがタグの内容を表します.始めにタグのラ ベル (phrase か word) が出力され,その後に属性が出力されます.

その他

また,構文解析結果を GUI でブラウズすることもできます.詳しくは, 「便利な LiLFeS モジュール」の「構文解 析結果をGUIでブラウズする」を見て下さい.

自分で lilfes プログラムを書くことによって,Enju が出力する構文解析結 果の詳細な情報を利用して,自分なりの出力を得ることができます.例えば, 上で説明した依存関係や XML 出力は,実際は LiLFeS プログラム (outputdep.lil, outputxml.lil) によって計算されています.構文解析結果 にアクセスする詳しい方法については,発展的 な使い方を参照して下さい.


コマンドライン引数

Enju の起動時に,以下のようなオプションやコマンドライン引数を指定するこ とができます.

enju [オプション] [-a 引数]
"-a" オプションより後ろの引数は,コマンドライン引数とし て LiLFeS プログラムに渡されます.
オプション
-hヘルプを表示する
-D ディレクトリ文法データファイルが置いてあるディレクトリ を指定する.
-L ディレクトリLiLFeS モジュールのサーチパスを指定する (LILFES_PATH 環境変数の先頭に追加される).
-t タガー品詞タガーを指定する.
-d依存関係フォーマットで出力する.
-s簡易フォーマットで出力する.
-xmlXML 形式で出力する.
-sostand-off 形式で出力する.
-cgiCGI サーバを起動する.
-morivMoriV サーバを起動する.
-W 数単語数の上限値を設定する.
-E 数エッジ数の上限値を設定する.
-l モジュール名LiLFeS モジュールをロードする.
-e LiLFeSコマンドLiLFeS プログラムを実行する.
-iインタラクティブモードにする(lilfes コマンドプロンプトを 表示する).
-nインタラクティブモードにしない.

CGI サーバ,MoriV サーバについては, 「便利な LiLFeS モジュール」の「構文解析結果をGUIでブラウズする」を 見て下さい.

オプション "-l" で lilfes モジュールを指定した場合は,そのモジュールを 読みこみます.オプション "-e" で lilfes コマンドを指定した場合は,それ を実行します.そのコマンドの実行が終了したら,"-d" や "-xml" オプショ ンなどを指定した場合は,依存関係や XML を出力するプログラムが実行され ます.パーザの出力形式を指定しなかった場合は,何もしません.次に,イン タラクティブモードでない場合は Enju の実行も終了します.インタラクティ ブモードの場合は,lilfes のコマンドプロンプトを表示して,lilfes コマン ドの入力待ちとなります.Ctrl-D を押すとインタラクティブモードは終了し ます.


環境変数

文法データや LiLFeS モジュールをデフォルトの場所以外にインストールした 場合は,以下の環境変数を設定し,インストール場所を Enju に教える必要が あります.環境変数の値は, コマンドライン引数の値で 上書きされます.

環境変数説明
ENJU_DIR文法データのディレクトリを指定する
ENJU_TAGGER品詞タガーを指定する
LILFES_PATHLiLFeS モジュールの探索パスを指定する

Enju の使い方 Enju ホームページ 辻井研究室
MIYAO Yusuke (yusuke@is.s.u-tokyo.ac.jp)