あかんわ

覚えたことをブログに書くようにすれば多少はやる気が出るかと思ったんです

Mac OS X El CapitanでRubyからMeCabを使って形態素解析

記事の概要

Rubyとチャットボットの学習に使用している書籍の中で形態素解析Chasenを使っていたため、MacChasenをインストールしようと調べていたら、MeCabならHomebrewが使えてRubyからの呼び出しも簡単らしいと知ったので、MeCabを使ってみることにしました。

目次

和布蕪を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辞書*1mecab-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::MeCabRubyから和布蕪が使えるらしいので、納豆の準備をします。

$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

開発環境

  • OSX 10.11.2 El Capitan
    - ターミナルエミュレータMacターミナル
    - シェル: zsh
    - パッケージマネージャ: Homebrew
  • Ruby 2.0.0p645

*1:形態素解析に使える日本語辞書の1つ