あるコマンドラインツールをプログラミング言語におけるライブラリのであるように振るまわせるためのバインドみたいなのが普通あって、mecab ruby でググればそういうのがあるんだけど、 gem install mecab
したら mecab.h がないよ
って怒られたし、なんか面倒臭いので自前で書いた. 言っても大したことはなくて、PTY モジュールっていうのを使えば裏で仮想ターミナル開いてくれて、そのターミナルへの入出力を扱える.
require 'pty'
PTY.spawn("mecab") {|r_f,w_f,pid|
w_f.sync = true
def mecab(sentences, r_f, w_f)
ret = []
sentences = sentences.split("\n").map(&:chomp)
sentences.each{|s|
w_f.print "#{s}\n"
loop {
out = r_f.gets.chomp
break if out == "EOS"
ret << out if out =~ /\t/
}
}
return ret
end
p mecab("今日も1日頑張るぞい", r_f, w_f)
}
[
"今日\t名詞,副詞可能,*,*,*,*,今日,キョウ,キョー",
"も\t助詞,係助詞,*,*,*,*,も,モ,モ",
"1\t名詞,数,*,*,*,*,*",
"日\t名詞,接尾,助数詞,*,*,*,日,ニチ,ニチ",
"頑張る\t動詞,自立,*,*,五段・ラ 行,基本形,頑張る,ガンバル,ガンバル",
"ぞい\t名詞,接尾,一般,*,*,*,ぞい,ゾイ,ゾイ"
]
IO 周りでバグだらけ (EOSという文字がたまにとれない、一行あたり1024バイトまでしかよめない、EOFが唐突にやってくる) なので gem install natto
しましょう.