その他
    ホーム 技術発信 DoRuby 【ruby】CaboChaによる係り受け解析のやり方
     

    【ruby】CaboChaによる係り受け解析のやり方

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    ハロウィーンの時期がやってまいりました。ハロウィーンといえばジャック・オー・ランタン、つまりカボチャですね。 そこで、係り受け解析ツールCaboChaを使って係り受け解析をしてみたいと思います。

    ハロウィーンの時期がやってまいりました。ハロウィーンといえばジャック・オー・ランタン、つまりカボチャですね。
    そこで、係り受け解析ツールCaboChaを使って係り受け解析をしてみたいと思います。
     

    係り受け解析とは

    まず係り受け解析とは、修飾語と被修飾語のように、関係し合っている文節や単語の解析を行うことです。

    「母のおいしい料理」という文の係り受けの構造は

    というようになります。
     

    係り受け解析ツール CaboCha

    今回はCaboChaというフリーソフトウェアを使います。unixとwindowsで動かせるそうです。
     

    インストール

    mecab

    文章を形態素解析するときに使います。(「すもももももももものうち」を「すもも も もも も もも の うち」のように分けます。)
    Groonga を使うとインストールが簡単

    sudo rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm
    sudo yum makecache
    sudo yum install mecab mecab-ipadic
    export PATH=$PATH:/usr/bin/mecab
    

    CRF++

    https://taku910.github.io/crfpp/ から最新ファイルを持ってくる。

    tar zxfv mecab-ipadic-2.7.0-20070801.tar.gz
    cd mecab-ipadic-2.7.0-20070801/
    ./configure --with-charset=utf8
    sudo make install
    

    pcre

    Perlの正規表現と互換性のある正規表現を他の言語でも使うために作られたライブラリです。
    http://www.pcre.org/ から最新ファイルを持ってくる。

    tar zxvf pcre-8.41.tar.gz
    cd pcre-8.41
    ./configure
    make
    sudo make install
    

    cabocha

    https://taku910.github.io/cabocha/ から最新ファイルを持ってくる。

    tar zxvf CRF++-0.58.tar.gz
    cd CRF++-0.58
    ./configure --with-charset=utf8
    make
    sudo make install
    

    swig

    cabochaをrubyで使えるようにするためのツールです。
    http://www.swig.org/ から最新ファイルを持ってくる。

    tar zxvf swig-3.0.12.tar.gz
    cd swig-3.0.12
    ./configure
    make
    sudo make install
    make ruby
    cd ../ruby/
    ruby extconf.rb 
    make
    

    gem

    gem install cabocha
    

    bundler、pry-byebug、rake、rake-compiler、rspecが必要です。

    実際に動かしてみる

    irb(main):001:0> require 'CaboCha'
    => true
    irb(main):002:0> sentence = "太郎はこの本を二郎を見た女性に渡した。"
    => "太郎はこの本を二郎を見た女性に渡した。"
    irb(main):003:0> c = CaboCha::Parser.new
    => #<CaboCha::Parser:0x0000560e74ef2df0 @__swigtype__="_p_CaboCha__Parser">
    irb(main):004:0> puts c.parseToString(sentence)
      太郎は-----------D
          この-D       |
            本を---D   |
            二郎を-D   |
                見た-D |
                女性に-D
                渡した。
    EOS
    => nil
    

    ちょっと分かりにくいですが、

    • 太郎は→渡した
    • この→本
    • 二郎を→見た
    • 見た→女性に
    • 女性に→渡した

    にかかっているということを表しています。

    まとめ

    rubyで使えるようにしようとしたため、インストールするものが多くなってしまいました。
    そして、そもそもCRF++とかよくわからないままインストールしているからどういったものか調べたい。

    また、係り受け解析自体にまだまだ問題点がたくさんあるようで、
    – 「母のおいしい料理」
    – 「味の濃い料理」
    のように、形は同じだけど、かかっている場所が異なるような文章が難しいようです。

    最近はGoogleから出ているSyntaxNetというものでも構造解析ができるらしいです。

    参考

    モバイルバージョンを終了