Daily programming #0043
言語処理100本ノック 2015の#41をやっていく。
第5章: 係り受け解析
夏目漱石の小説『吾輩は猫である』の文章(neko.txt)をCaboChaを使って係り受け解析し,その結果をneko.txt.cabochaというファイルに保存せよ.このファイルを用いて,以下の問に対応するプログラムを実装せよ.
このあたりの記述を参考にCaboChaをインストールし、neko.txt.cabochaを作成する。
neko.txt.cabochaのサイズが大きく、glot.ioではそのまま実行できないため、第5章は実行結果を記載する方針とする。
41. 係り受け解析結果の読み込み(文節・係り受け)[Golang]
Question
40に加えて,文節を表すクラスChunk
を実装せよ.このクラスは形態素(Morph
オブジェクト)のリスト(morphs
),係り先文節インデックス番号(dst
),係り元文節インデックス番号のリスト(srcs
)をメンバ変数に持つこととする.さらに,入力テキストのCaboChaの解析結果を読み込み,1文をChunk
オブジェクトのリストとして表現し,8文目の文節の文字列と係り先を表示せよ.第5章の残りの問題では,ここで作ったプログラムを活用せよ.
Code
Output
$ ./main ../neko.txt.cabocha この -> 書生 という の は 書生 という の は -> 話 で ある 。 時々 -> 捕え て 我々 を -> 捕え て 捕え て -> 煮 て 煮 て -> 食う という 食う という -> 話 で ある 。 話 で ある 。
Comment
CaboChaの-f1
オプションで生成する形態素解析結果は以下のようなフォーマット1になっているので、今回は*
から始まる行も処理する必要がある
一行目
* 文節番号 係り先の文節番号(係り先なし:-1)D 主辞の形態素番号/機能語の形態素番号 係り関係のスコア
二行目
表層形t品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音
Goにはクラスの概念がないのでChunk
を構造体として定義する
*
から始まる行から処理し、EOS
の行まできたら係り元文節インデックス番号のリストを作成した