CaboChaをMATLABからコールして係り受け解析できるか試してみた


はじめに

係り受け解析ツールとして有名なCaboChaで最近係り受け解析を始めたのですが、コマンドプロンプトだと何故かうまくいかない(下図参照)、そして、それ以外のテキスト解析はMATLABのもので使い慣れているので、MATLABで一元的にすべて解析できたらなと思ってやってみました。

↑表示の設定の問題だけな気もするんですがうまく直せず。。コマンドプロンプトではこんな状態でも、MATLABから動かしたらちゃんと解析できたのでご安心ください。

環境

Windows 10
MATLAB R2019b

セットアップ

CaboChaを使うためにはMeCabも必要なので、順番にインストールしていきます。

MeCabの公式サイトからmecab-0.996.exeをダウンロード
Windows版の上記のファイルには辞書も一緒に入っているので、これだけダウンロードすればOKです。

②ダウンロードしたexeファイルを右クリックで「管理者として実行」し、セットアップを進める。途中、辞書の文字コードの選択画面が出てきますが、ここはSHIFT-JISを選択します。

CaboChaをダウンロード
私は最新のcabocha-0.69を取ってきました。

④②と同様に「管理者として実行」し、セットアップを進める。こちらも、文字コードはSHIFT-JISを選択します。

⑤パスの設定
コントロールパネル→システムとセキュリティ→システム→システムの詳細設定の順に選択し、「詳細設定」タブの下の方にある「環境変数」をクリック。システム環境変数のPathを選択して「編集」ボタンを押しMeCabとCaboChaのパスを追加します。

こんな感じでパスが追加されました。

MATLABからコールしてみる

先に申し上げますと、MATLABからシステムコマンドをたたいているだけなので、何ら難しいことはしていません。
「私は大きなグラスで冷たいコーヒーを飲みます」という文を係り受け解析してみましょう。

[~,cmdout] = system('echo 私は大きなグラスで冷たいコーヒーを飲みます | cabocha','-echo');
      私は---------D 
      大きな-D     | 
      グラスで-----D 
          冷たい-D | 
        コーヒーを-D 
            飲みます 
EOS 

上でとってきたcmdoutの中には係り受け解析の結果が入っているので結果の保存なんかもできそうです。

>> cmdout
cmdout =
    '      私は---------D
           大きな-D     |
           グラスで-----D
               冷たい-D |
             コーヒーを-D
                 飲みます
     EOS
     '

ということで下記のstrに解析したい文字列を入れていけばOK。エクセルファイルから読み込んだり、Webから取ってきたりしたものを入れても良いと思います。


str = '私は今からここに書かれている文書を解析したいです。';
cmdin = ['echo ' str ' | cabocha'];
[~,cmdout] = system(cmdin,'-echo');
save('Result','cmdout'); % Result.matという名前で出力結果を保存

Live Scriptで実行すると、こんな感じで結果が返ってきました。

ひとまず今日はここまで。

おまけ

セットアップの途中でこんなエラーが出たのですが

morph.cpp(187) [charset() == decode_charset(dinfo->charset)] Incompatible charset: MeCab charset is SHIFT-JIS, Your charset is UTF8

WindowsのスタートボタンからSHIFT-JISモデルにリコンパイルしたり、

[CaboChaをインストールしたディレクトリ]\CaboCha\model
にあるcharset-fileをUTF-8からSHIFT-JISに書き換えたりすることで、対処することができました。