お役立ち

CaboChaをMacにインストールしてPython3から利用する

  • このエントリーをはてなブックマークに追加

CaboChaを利用するためには、Mecabがインストールされている必要があります。
もし、インストールされていない場合は、下記の記事を参考にインストールしましょう。
https://www.tech-tech.xyz/archives/mecab-mac.html

CaboChaとMecabの関係性

文章の構造をプログラムが理解できるように変換するために
MecabとCaboChaの違いを混同することがあるので簡単にまとめておきます。
文章の構造解析は大まかに次の2つのステップに別れます。

  1. 文章を言葉に分割する。
  2. 言葉の関係性を解析する。

Mecabは、文章を言葉に分割する処理を行い。
CaboChaは、言葉の係り受けを解析するのに用います。
つまり、これをまとめると

  1. 文章を言葉に分割する。(Mecabが担当)
  2. 言葉の関係性を解析する。(CaboChaが担当)

となります。

CaboChaをMacにインストール

まず、CaboChaを利用するためには、crf++が必要なのでインストールします。

brew install crf++

CaboChaをインストールします。

brew install cabocha

動作確認

シェルに次のように入力するとcabochaが起動します。

cabocha

少し、複雑な文章を入力します。

cabochaがインストールされたか不安なので動作確認を行います。

次のように表示されれば、インストールできています。
ちゃんと文章の構造が解析されているのがわかると思います。

           cabochaが-D
  インストールされたか-D
              不安なので---D
                動作確認を-D
                  行います。
EOS

CaboChaをPythonから利用する

gitでソースをダウンロードします。


git clone https://github.com/taku910/cabocha.git

Pythonにcabochaをインストールします。

cd cabocha
pip install python/

動作確認

下記のサンプルを実行して動作確認を行いましょう。

import CaboCha
cabocha = CaboCha.Parser()
sentence = "cabochaがインストールされたか不安なので動作確認を行います。"
tree =  cabocha.parse(sentence)
print(tree.toString(CaboCha.CABOCHA_FORMAT_TREE))

下記のように表示されれば、インストールが成功しています。

           cabochaが-D
  インストールされたか-D
              不安なので---D
                動作確認を-D
                  行います。
EOS

わかりやすいフォーマット

文章の係り受けの構造は複雑です。
そのため、目視できる形で表示するために、CaboChaでは、様々なフォーマットで表示することができます。
私がCaboChaの仕組みを理解するのに役立ったフォーマットはXMLです。

tree.toString(CaboCha.CABOCHA_FORMAT_XML)

XML形式で先ほどの文章の構造を表示すると次のようになります。

<sentence>
 <chunk id="0" link="1" rel="D" score="0.411308" head="0" func="1">
  <tok id="0" feature="名詞,固有名詞,組織,*,*,*,*">cabocha</tok>
  <tok id="1" feature="助詞,格助詞,一般,*,*,*,が,ガ,ガ">が</tok>
 </chunk>
 <chunk id="1" link="2" rel="D" score="0.996522" head="3" func="6">
  <tok id="2" feature="名詞,一般,*,*,*,*,インストール,インストール,インストール">インストール</tok>
  <tok id="3" feature="動詞,自立,*,*,サ変・スル,未然レル接続,する,サ,サ">さ</tok>
  <tok id="4" feature="動詞,接尾,*,*,一段,連用形,れる,レ,レ">れ</tok>
  <tok id="5" feature="助動詞,*,*,*,特殊・タ,基本形,た,タ,タ">た</tok>
  <tok id="6" feature="助詞,副助詞/並立助詞/終助詞,*,*,*,*,か,カ,カ">か</tok>
 </chunk>
 <chunk id="2" link="4" rel="D" score="-1.354319" head="7" func="9">
  <tok id="7" feature="名詞,形容動詞語幹,*,*,*,*,不安,フアン,フアン">不安</tok>
  <tok id="8" feature="助動詞,*,*,*,特殊・ダ,体言接続,だ,ナ,ナ">な</tok>
  <tok id="9" feature="助詞,接続助詞,*,*,*,*,ので,ノデ,ノデ">ので</tok>
 </chunk>
 <chunk id="3" link="4" rel="D" score="-1.354319" head="11" func="12">
  <tok id="10" feature="名詞,サ変接続,*,*,*,*,動作,ドウサ,ドーサ">動作</tok>
  <tok id="11" feature="名詞,サ変接続,*,*,*,*,確認,カクニン,カクニン">確認</tok>
  <tok id="12" feature="助詞,格助詞,一般,*,*,*,を,ヲ,ヲ">を</tok>
 </chunk>
 <chunk id="4" link="-1" rel="D" score="0.000000" head="13" func="14">
  <tok id="13" feature="動詞,自立,*,*,五段・ワ行促音便,連用形,行う,オコナイ,オコナイ">行い</tok>
  <tok id="14" feature="助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス">ます</tok>
  <tok id="15" feature="記号,句点,*,*,*,*,。,。,。">。</tok>
 </chunk>
</sentence>

主要な要素を説明すると次の通りです。

  • link:係り先の文節id (-1の時は係先がない)
  • score:係りやすさの度合
  • head:文節の意味を表す単語のid
  • func:文節の性質を決める助詞・助動詞のid

scoreの詳細な説明

係り関係のスコアは, 係りやすさの度合を示します. 一般に大きな値ほど係りやすいことを表します. しかし, 各スコアと, 実際の解析精度の関係は調査中です. このスコアの意味づけに関しては調査する必要があると考えています.
http://chasen.naist.jp/chaki/t/2005-08-29/doc/CaboCha%20Yet%20Another%20Japanese%20Dependency%20Structure%20Analyzer.htm

詳細に文章を分析する

文節の情報や文節内の単語へアクセスするサンプルコードです。


import CaboCha
cabocha = CaboCha.Parser()
sentence = "cabochaがインストールされたか不安なので動作確認を行います。"
tree =  cabocha.parse(sentence)
for i in range(tree.chunk_size()):
    chunk = tree.chunk(i)
    print("chunk_id:%s" % i)
    print("link:%s" % chunk.link)
    print("score:%s" % chunk.score)
    # 単語を出力する
    print("----------------------------------")
    for j in range(chunk.token_pos,chunk.token_pos+chunk.token_size):
        print(tree.token(j).surface)
    print("----------------------------------")

出力は下記のようになります。


chunk_id:0
link:1
score:0.4113081395626068
----------------------------------
cabocha
が
----------------------------------
chunk_id:1
link:2
score:0.9965222477912903
----------------------------------
インストール
さ
れ
た
か
----------------------------------
chunk_id:2
link:4
score:-1.3543193340301514
----------------------------------
不安
な
ので
----------------------------------
chunk_id:3
link:4
score:-1.3543193340301514
----------------------------------
動作
確認
を
----------------------------------
chunk_id:4
link:-1
score:0.0
----------------------------------
行い
ます
。
----------------------------------
  • このエントリーをはてなブックマークに追加