Rubyから呼び出す方法はいくつかあるみたいだけど、設定とかハマりまくった覚えがあるので、お手軽版。ただし、一番遅いと思う。まぁ、膨大なデータを解析するわけじゃなければ気にならない遅さなので十分かと。Mecabをコマンドプロンプトで実行するのと同じ事をRubyで書くだけです。コマンドの文字列作ってopen3で投げる感じ。後はその結果を受け取ってるだけです。
require "open3" mpath = "\"C:\\Program Files\\MeCab\\bin\\mecab.exe\"" # MeCabへのパス arg = ""#Mecabにオプション渡したい場合 target_file = "hoge.txt"#解析対象のファイル cmd_string = [mpath, arg, target_file].join(" ") out, err, status = Open3.capture3(cmd_string) out.split("\n").each do |wkStr| p wkStr.split("\t") end
↓実行結果サンプル
["この", "連体詞,*,*,*,*,*,この,コノ,コノ"] ["サイト", "名詞,一般,*,*,*,*,サイト,サイト,サイト"] ["について", "助詞,格助詞,連語,*,*,*,について,ニツイテ,ニツイテ"] ["EOS"] ["個人", "名詞,一般,*,*,*,*,個人,コジン,コジン"] ["情報", "名詞,一般,*,*,*,*,情報,ジョウホウ,ジョーホー"] ["保護", "名詞,サ変接続,*,*,*,*,保護,ホゴ,ホゴ"]
わかち書きにしたい場合はオプションに「-O wakati」をセットしてあげる。
・・・ arg = "-O wakati"#Mecabにオプション渡したい場合 ・・・
実行結果サンプル↓
["この サイト について "] ["個人 情報 保護 "]
わかち書きをさらに単語にばらしたい場合はwkStr.split(' ')
みたいにして空白でsplitしてあげる。
ちなみに、参考にしたサイトではopen3じゃなくて、「IO.popen」を使ってた。↓の感じ。
io = IO.popen(cmd_string, "r") until io.eof? word_list.concat io.gets.split(' ') end
これで問題なく動くように見えるけど、数百ファイル以上を処理しようとすると、何故かたまに処理が止まる。理由は不明。ふらっと調べた感じではバグ?らしい。なので今は「open3」使えという事らしいので、素直に従って書いてます。
あとは、上記の結果の戻りをHashなり配列なりで戻すClassにしておけば、色々使い回せます。