2009/06/18

Windows上でRuby+libmecab.dllを使ってマルコフる

現状の「だべさ」は文字ベースの連鎖なので、ちゃんとMeCabを使った仕組みに変えるべく、構造を検討...したかったのだが、現在手元にはWindowsしかないので、Windows上でRubyとMeCabを使って動くスクリプトを作ってみた。

環境構築手順は以下の通り。ActiveScript Rubyは既に導入済みでした。

MeCab: Yet Another Part-of-Speech and Morphological AnalyzerからMeCab-Win32(0.98pre3)をダウンロード。
言語処理関連のプログラム類の「windowsのrubyからlibmecab.dllを呼び出す」からmecab.rbをダウンロード。

スクリプトのソース。

#!ruby -Ks

require "mecab"

begin
hash = Hash.new
ary = Array.new
mess = ""
m=Mecab.new("")

# 元となるデータファイルを取得
data = Array.new
open("data.txt",'r') do |file|
while line = file.gets
if line != "\n" then data.push(line) end
end
end

# データからマルコフテーブル作成
data.each do |line|
line.chop!
node = m.sparse_tonode(line)
node = node.next
while node.hasNext
hash = Hash.new
hash["1"] = node.surface
node = node.next
if node.hasNext == true then
hash["2"] = node.surface
else
hash["2"] = nil
end
ary.push(hash)
end
end

# 連鎖する
post = ary[0]
mess.concat(post["1"])

while post["2"] != nil do
rndline = Array.new
i = 0
ary.each do |line|
if post["2"] == line["1"] then
rndline.push(line)
i = i + 1
end
end

post = rndline[rand(i)]

mess.concat(post["1"])
end

puts mess

rescue
m.destroy
print "RuntimeError: ", $!, "\n";
end