Mac OS X El CapitanでRubyからMeCabを使って形態素解析
記事の概要
Rubyとチャットボットの学習に使用している書籍の中で形態素解析にChasenを使っていたため、MacにChasenをインストールしようと調べていたら、MeCabならHomebrew
が使えてRubyからの呼び出しも簡単らしいと知ったので、MeCabを使ってみることにしました。
恋するプログラム―Rubyでつくる人工無脳 (Mynavi Advanced Library)
- 作者: 秋山智俊
- 出版社/メーカー: マイナビ出版
- 発売日: 2014/12/04
- メディア: Kindle版
- この商品を含むブログを見る
目次
和布蕪をMacに入れる
まずは、和布蕪の醸造方法を調べます。
$brew search mecab
mecab mecab-ipadic mecab-jumandic mecab-ko mecab-ko-dic mecab-unidic
homebrew/php/php53-mecab homebrew/php/php55-mecab homebrew/php/php70-mecab
homebrew/php/php54-mecab homebrew/php/php56-mecab
色々あるようですが、とりあえず、形態素解析エンジンのmecab
と和布蕪用のIPA辞書*1のmecab-ipadic
を醸造します。
$brew install mecab mecab-ipadic ==> Downloading https://homebrew.bintray.com/bottles/mecab-0.996.el_capitan.bottle.2.tar.gz ######################################################################## 100.0% ==> Pouring mecab-0.996.el_capitan.bottle.2.tar.gz 🍺 /usr/local/Cellar/mecab/0.996: 17 files, 4.3M ==> Downloading https://downloads.sourceforge.net/project/mecab/mecab-ipadic/2.7.0-20070801/mecab-ipadic-2.7.0-20070801. ==> Downloading from http://jaist.dl.sourceforge.net/project/mecab/mecab-ipadic/2.7.0-20070801/mecab-ipadic-2.7.0-200708 ######################################################################## 100.0% ==> ./configure --prefix=/usr/local/Cellar/mecab-ipadic/2.7.0-20070801 --with-charset=utf8 --with-dicdir=/usr/local/Cell ==> make install ==> Caveats To enable mecab-ipadic dictionary, add to /usr/local/etc/mecabrc: dicdir = /usr/local/lib/mecab/dic/ipadic ==> Summary 🍺 /usr/local/Cellar/mecab-ipadic/2.7.0-20070801: 15 files, 50.6M, built in 17 seconds
醸造されたようなので、和布蕪ってみます。
$mecab
すもももももももものうち
すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS
無事に和布蕪れましたヽ(・ω・)/
和布蕪と納豆を混ぜる
Natto::MeCab
でRubyから和布蕪が使えるらしいので、納豆の準備をします。
$gem install natto Fetching: natto-1.1.0.gem (100%) Successfully installed natto-1.1.0 1 gem installed
納豆の準備ができたので、和布蕪納豆を作ります。
# mecab_natto.rb require 'natto' # 納豆和布蕪を作る mecab_natto = Natto::MeCab.new # 標準入力を取得 line = gets() line.chomp! # 形態素解析の結果を表示 puts mecab_natto.parse(line)
"動けば良い"の精神で、和布蕪納豆を試してみます。
$ruby mecab_natto.rb
すもももももももものうち
すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS
Rubyからも和布蕪れましたヽ(・ω・)/
和布蕪納豆の出力を調整する
学習中の本のサンプルプログラムでは、茶筌を使用して出力フォーマットを、
しているので、和布蕪の標準の出力と異なり、以下の様な出力になるようです。
あたしはプログラムの女の子です あたし 名詞-代名詞-一般 は 助詞-係助詞 プログラム 名詞-サ変接続 の 助詞-連体化 女の子 名詞-一般 です 助動詞 EOS
納豆の説明書きを読むと、-F
オプションで和布蕪の出力フォーマットを指定して、enum_parse
メソッドを使って解析すれば、形態素解析の出力を調整できるようなので、-F%m\s%F-[0,1,2]
を出力フォーマットに指定して試してみます。
- -F…出力フォーマットを変更するオプション
- %m…形態素の表層文字列
- \s…半角スペース
- %F-[0,1,2]…0,1,2番目の素性を'-'をデリミタとして表示(要素が空の場合は以降の表示は省略)
# mecab_natto.rb require 'natto' # 出力フォーマットを指定して和布蕪納豆を作る mecab_natto = Natto::MeCab.new('-F%m\s%F-[0,1,2]') # 標準入力を取得 line = gets() line.chomp! # 解析する enum = mecab_natto.enum_parse(line) # 解析結果を表示 enum.each do |n| puts n.feature end
祈りながら、調整和布蕪納豆を試します。
$ruby mecab_natto.rb
あたしはプログラムの女の子です
あたし 名詞-代名詞-一般
は 助詞-係助詞
プログラム 名詞-サ変接続
の 助詞-連体化
女の子 名詞-一般
です 助動詞
EOS
うまいこと似たような出力を得ることが出来ました( ・ㅂ・)و ̑̑
参考記事
和布蕪と納豆については、こちらの記事を参考にさせていただきました。
* 【natto・mecabで】5分で形態素分析に入門して、修造の「人生を強く生きる83の言葉」の頻出語を調べてみる。【形態素解析】 | Project name
* MeCab: Yet Another Part-of-Speech and Morphological Analyzer
* GitHub - buruzaemon/natto: A Tasty Ruby Binding with MeCab