2013年7月5日金曜日

ipadic以外をigo-pythonで使う

igoはMeCab用の辞書が使えるはずなので、ipadic以外の辞書を試してみました。naist-jdic, UniDicを試しましたが、どちらもバイナリ辞書を作って、そっちを指定するというだけでは行きませんでした…。

naist-jdicはバイナリ辞書の作成が失敗しますが、回避可能です。失敗する原因は、辞書にある,を含んだエントリなので、パースしているところを直すのが一番いいのですが、delimiterが指定できるので、とりあえず元ネタのCSVの方をTSVに書き換えることで回避しました。
以下のスクリプトでできます(gist埋め込みが消えてたので追加しなおしました)。
CSVからTSVにする
python csv2tsv.py mecab-naist-jdic-0.6.3b-20111013/naist-jdic.csv EUC-JP > naist-jdic.csv && mv naist-jdic.csv mecab-naist-jdic-0.6.3b-20111013
バイナリ辞書を作る
java -cp igo-0.4.5.jar net.reduls.igo.bin.BuildDic naist-jdic mecab-naist-jdic-0.6.3b-20111013 UTF-8 ' '  # 最後のシングルクォートはタブ
生成されたバイナリ辞書は少し使ってみただけですが、問題無さそうでした。問題としては、解析結果の素性もタブ区切りになってしまうことでしょうか。


UniDicの方は特に問題なくバイナリ辞書の作成が可能です。但し、igo-pythonの方に問題があり、そもそも辞書がロードできません。とりあえず対応したものはコミットしてあります。
辞書のロードでエラーが起きる原因は、辞書内の文字データ(UTF-16)をPythonの(Unicode)文字列に変換するときに、サロゲートペアの片方だけがあった場合にUnicode文字に変換できずエラーになるためです。なので、上記の対応では文字列にせず2byteの整数配列として保持することでこの問題を回避しています。

また、サロゲートペアで表現する文字を含んだ文字列を形態素解析しようとすると、例外が発生してしまいます。こちらは修正中です(修正した0.9.3をリリースしました)。


配布物は大きくなってしまいますが、コンパイル済みの辞書も入れようか考えています。

0 件のコメント:

コメントを投稿