KNPの解析結果から、格フレームを抽出し出力する。
格フレームとは、用言とそれに係る格助詞句からなる組をいい、 「リンゴ(が)」+「好き」、「望遠鏡(で)」+「見る」のように表現される。 本コマンドは、mknp.rbコマンドが出力した構文解析結果 (XML)を読み込み、格フレームを抽出してCSVに出力する。
mcaseframe.rb I= o= [-key] [-mcmdenv] [--help]
I= : mknp.rbでparsingした結果xmlファイルが格納されたパス名 o= : 出力する格フレームファイル名 -key : key型フォーマットで出力する。 -mcmdenv : 内部で利用しているMCMDのメッセージ出力レベルを環境変数に任せる。 省略時は警告とエラーメッセージのみ出力(KG_VerboseLevel=2)。 --help : ヘルプメッセージの表示
mknp.rbコマンドの出力するXMLは次のようになっている(抜粋)。
<sentence id='0' text='子どもはリンゴがすきです。'> <chunk id='0' link='2' phraseType='格助詞句' caseType='ガ2格' phrase='子供' phraseTok='子 <token id='0' class1='名詞' class2='普通名詞' word='子ども' orgWord='子ども' daiWord='子供 <token id='1' class1='助詞' class2='副助詞' word='は' orgWord='は'/> </chunk> <chunk id='1' link='2' phraseType='格助詞句' caseType='ガ格' phrase='林檎' phraseTok='リン <token id='2' class1='名詞' class2='普通名詞' word='リンゴ' orgWord='リンゴ' daiWord='林檎 <token id='3' class1='助詞' class2='格助詞' word='が' orgWord='が'/> </chunk> <chunk id='2' link='-1' phraseType='用言句' phraseTok='すきだ' rawPhrase='すきです。' phrase <token id='4' class1='形容詞' class3='ナ形容詞' class4='デス列基本形' word='すきだ' orgWord <token id='5' class1='特殊' class2='句点' word='。' orgWord='。'/> </chunk> </sentence>
上の例だと、 chunk id=’0’「子どもは」はlink=’2’に、 chunk id=’1’「リンゴが」もlink=’2’になっており、 いずれもchunk id=’2’「すきです」に係っていることがわかる。 図にすると次のような係り受け関係である。
子どもは──┐ リンゴが──┤ すきです。
本コマンドを利用すると、係り受け関係は次のようなCSVとして抽出される。
aid,sid,cid,contrastConj,denial,declinableWord,lid,caseWord,case test.txt,0,2,,,すきだ,0,子ども,ガ2 test.txt,0,2,,,すきだ,1,リンゴ,ガ
CSVの各項目の意味を以下に示す。
aid : 入力ファイル名 sid : 行番号(センテンスID) cid : チャンクID contrastConj : 逆接接続詞 denial : 否定語を伴うチャンクのとき1 declinableWord : 用言句 lid : 格助詞句のチャンクID caseWord : 格助詞句 case : 格助詞句の種類
前節の解説で用いてる例。1行が1つの格フレームとなっている。
$ more xml/test.txt <?xml version='1.0' encoding='UTF-8'?> <article id='test.txt'> <sentence id='0' text='子どもはリンゴがすきです。'> <chunk id='0' link='2' phraseType='格助詞句' caseType='ガ2格' phrase='子供' phraseTok=' <token id='0' class1='名詞' class2='普通名詞' word='子ども' orgWord='子ども' daiWord=' <token id='1' class1='助詞' class2='副助詞' word='は' orgWord='は'/> </chunk> <chunk id='1' link='2' phraseType='格助詞句' caseType='ガ格' phrase='林檎' phraseTok='リ <token id='2' class1='名詞' class2='普通名詞' word='リンゴ' orgWord='リンゴ' daiWord=' <token id='3' class1='助詞' class2='格助詞' word='が' orgWord='が'/> </chunk> <chunk id='2' link='-1' phraseType='用言句' phraseTok='すきだ' rawPhrase='すきです。' ph <token id='4' class1='形容詞' class3='ナ形容詞' class4='デス列基本形' word='すきだ' or <token id='5' class1='特殊' class2='句点' word='。' orgWord='。'/> </chunk> </sentence> <sentence id='1' text='望遠鏡で泳ぐ少女を見た。'> <chunk id='0' link='3' phraseType='格助詞句' caseType='デ格' phrase='望遠鏡' phraseTok=' <token id='0' class1='名詞' class2='普通名詞' word='望遠' orgWord='望遠' daiWord='望遠 <token id='1' class1='名詞' class2='普通名詞' word='鏡' orgWord='鏡' daiWord='鏡' cate <token id='2' class1='助詞' class2='格助詞' word='で' orgWord='で'/> </chunk> <chunk id='1' link='2' phraseType='用言句' phrase='泳ぐ' phraseTok='泳ぐ' rawPhrase='泳 <token id='3' class1='動詞' class3='子音動詞ガ行' class4='基本形' word='泳ぐ' orgWord= </chunk> <chunk id='2' link='3' phraseType='格助詞句' caseType='ヲ格' phrase='少女' phraseTok='少 <token id='4' class1='名詞' class2='普通名詞' word='少女' orgWord='少女' daiWord='少女 <token id='5' class1='助詞' class2='格助詞' word='を' orgWord='を'/> </chunk> <chunk id='3' link='-1' phraseType='用言句' phraseTok='見る' rawPhrase='見た。' phrase=' <token id='6' class1='動詞' class3='母音動詞' class4='タ形' word='見る' orgWord='見た' <token id='7' class1='特殊' class2='句点' word='。' orgWord='。'/> </chunk> </sentence> </article>mcaseframe.rb I=xml o=caseframe.csv #END# /Users/maegawa/.rvm/rubies/ruby-2.0.0-p247/bin/mcaseframe.rb I=xml o=caseframe.csv more caseframe.csv aid,sid,cid,contrastConj,denial,declinableWord,lid,caseWord,case test.txt,0,2,,,すきだ,0,子ども,ガ2 test.txt,0,2,,,すきだ,1,リンゴ,ガ test.txt,1,3,,,見る,0,望遠鏡,デ test.txt,1,3,,,見る,2,少女,ヲ
-keyオプションを付加して実行すると、 用言と、その用言に係る格助詞句が行に展開されて出力される。
$ mcaseframe.rb -key I=xml o=caseframe2.csv #END# /Users/maegawa/.rvm/rubies/ruby-2.0.0-p247/bin/mcaseframe.rb -key I=xml o=caseframe2.c $ more caseframe2.csv aid,sid,cid,contrastConj,denial,lid,word,type test.txt,0,2,,,2,すきだ,用言 test.txt,0,2,,,0,子ども,ガ2 test.txt,0,2,,,1,リンゴ,ガ test.txt,1,1,,,1,泳ぐ,用言 test.txt,1,3,,,3,見る,用言 test.txt,1,3,,,0,望遠鏡,デ test.txt,1,3,,,2,少女,ヲ