今日はめちゃくちゃ実装を進めました
構文木を作るにあたってMeCabが吐き出す生の形態素のままでは細分化されすぎていてとても文法規則を定義しきれないので、ある程度の補正が必要だということに気づいた
ということで思いついたのは連続する重複品詞を結合する方法。
適当にやったらこうなった
「庭には二羽鶏がいる」を品詞分解したんだけど、連続する品詞でまとめるには名詞というのはちょっと広すぎるみたいだ 数詞と助数詞くらいは分けないとダメっぽい pic.twitter.com/MJCY7OqKM9
— らこ (@laco0416) 2014, 2月 2
ということでもうちょっと細かく品詞を読み取ってあげたら
数と助数詞について改良 pic.twitter.com/TtwTbLB4YZ
— らこ (@laco0416) 2014, 2月 2
ということでまあ解決?
ソースコードはこんな感じで、連続した重複品詞をまとめて、単語を結合してます
public void Fix() { var list = new List<PosPair>(); var current = PosPairs.First(); foreach(var x in PosPairs.Skip(1)) { if(current.Pos == x.Pos) { current.Gram = string.Concat(current.Gram, x.Gram); } else { list.Add(current); current = x; } } list.Add(current); PosPairs = list; }
なんやかんや実装を進めてなんとか構文木を作れるまでになりました
平文状態で見にくいけど2分木の構文木が作れてる pic.twitter.com/NgnbPaSV0N
— らこ (@laco0416) 2014, 2月 2
構文木の最尤推定がちょっと危ういんですがこれは追々どうにかします
残りのタスクは、
- 構文解析系…文法規則を増やして受理できる文を広げる(手動)
- 語彙学習系…未着手
- 文章生成系…未着手
です
一番きつそうなところが終わったので完成まで頑張ります