2011年01月27日

GoSenのちょっとした改良

遅くなりましたが、書いておきます。
Sen/GoSen は ChaSen用の ipadic 辞書を変換して使うのですが、ipadicのバージョン2.6.2以降には対応していません。

対応できない原因は何かというと、ChaSen向けのipadicは2.6.2以降から連接表であるconnect.cha内において「その他の語形」を表す連接規則が書かれなくなっているからです。そのため辞書コンパイル中にレアな語形が出てくると対応しきれずにエラーが出てしまいます。Senの場合はエラーメッセージを出しながら処理は続きます。GoSenの場合はエラーが出たらそこで終わりになります。

そのため今回単純な修正をしています。連接表にない語形の組み合わせが出てきたときには、コスト配列から値を読み込まずに、省略時の値を代入することにしています。この修正が望み通りの日本語を作り出せるかどうか不安ですが、とりあえず問題はないようです。

この修正を加えてもGoSenではまた別の問題が出てきます。メタ文字としても使われる「,」と「{」の解釈です。このような記号も2.6.2以降では辞書に登録されているので、辞書を変換するとき不具合が発生します。ChaSen向けのデータをMeCab向けのデータに変換するとき、単語の区切り記号として「,」が使われるのですが、この解析に問題があります。これを回避する処理が必要になります。「{」に対しても特別な処理が必要になります。

これらの修正を加えたソースを以下に置いておきます。前回のAndorid向けのGoSenで利用する辞書をパソコンで作成するときに使ってみてください。
ダウンロード:gosen-t001.zip

辞書の作り方ですが、antが実行できる環境を作り、エクスプローラで展開したフォルダで開き、その中でシフトを押しながら右クリックをしてコンテクストメニューを開き、メニューからコマンドウィンドウを開いて、antと入力してエンターをします。そのあと、エクスプローラでtestdata/dictionaryフォルダを開き、その中でコマンドウィンドウを開いて、antと入力してエンターをすると、辞書のダウンロードとコンパイルが始まります。なおbuild.xml中のipadic.versionプロパティの値を書き換えると、2.6.0以外の辞書もコンパイルできます。


ここまで書いてきましたが、以下のリンクにGoSenの別の修正についての記事があります。先のAndroid用の辞書作成に使わないのであれば、NAIST 辞書が使えるこちらのほうを使ったほうがいいかもしれません。

GAE/J で GoSen を動かして形態素解析

Google App Engine Java で形態素解析器の比較


Sen(GoSen)はChaSen用の辞書をコンパイルして専用辞書を作っていた頃のMeCabを元にして移植されています。したがってそれ以降改良されてきた現行のMeCabと比べるとどうしても見劣りしてしまいます。今回のその他の語形への対処も現行のMeCabが使っているMeCab専用辞書では細かなコストの設定がされているようで精度に違いが出てくるはずです。新しいJava用の形態素解析器が必要だと思います。

IgoGomokuには期待しています。


posted by takayan at 01:13 | Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]


この記事へのトラックバック