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に書き換えたりすることで、対処することができました。
Author And Source
この問題について(CaboChaをMATLABからコールして係り受け解析できるか試してみた), 我々は、より多くの情報をここで見つけました https://qiita.com/aoimidori/items/2bf2fad5cd188cd6227c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .