hakeの日記

Windows環境でプログラミングの勉強をしています。

Rubyで形態素解析

最初はMeCab+nattoで試したのですが、MeCabのサイトで公開されているライブラリは64bit Rubyでは動作しませんでした。他はないのかと検索したところ、こちらRubyによる形態要素エンジンokura(注:ocraではない)が公開されていましたので早速インストール。
公開サイトでは、ruby1.9専用と書かれていますが、こちらの動作環境(Windows 10 64bit / ruby 2.2.3p173 (2015-08-18 revision 51636) [x64-mingw32])でも問題は無い様です。


公開サイトおよび入手先

導入

  • okuraのインストール
gem install okura
okura compile mecab-naist-jdic-0.6.3b-20111013/ okura-dic

公開サイトのサンプルプログラムの実行

okuraは文字コードutf-8を使用するので、入出力でcp932(Windows-31J)とのエンコードが必要

#coding: cp932
require 'okura/serializer'

dict_dir='./okura-dic' # コンパイルした辞書フォルダの置き場所
tagger=Okura::Serializer::FormatInfo.create_tagger dict_dir

str='すもももももももものうち'.encode('utf-8')

# 文字列から単語候補を計算
nodes=tagger.parse(str)

# 単語候補の中で、一番最もらしい組み合わせを選択
nodes.mincost_path.each{|node|
  word=node.word
  s = ('     ' + word.surface.encode('cp932'))[-5..-1] # 空白は全角スペース
  s << ' '
  s << word.left.text.encode('cp932')
  puts s

# word.surface        # : 単語の表記
# puts word.left.text # : 品詞
# 品詞はword.leftとword.rightがありますが、一般的に使われる辞書(IPA辞書やNAIST辞書)では
# 両方同じデータが入ってます
}

実行結果

C:\okura>ruby test.rb
1589586
S/EOS BOS/EOS
  すもも 名詞,一般,*,*,*,*,*
    も 助詞,係助詞,*,*,*,*,も
   もも 名詞,一般,*,*,*,*,*
    も 助詞,係助詞,*,*,*,*,も
   もも 名詞,一般,*,*,*,*,*
    の 助詞,連体化,*,*,*,*,の
   うち 名詞,非自立,副詞可能,*,*,*,*
S/EOS BOS/EOS