先日、メッセンジャーのチャットで会話するボットを作りました。 そのボットに「学習」させるネタに、会話文であるWindows Live Messengerのチャットログを用いることにしました。しかし、ログはXML形式なので、本文以外の余計なタグがはいっています。
まあ、エディタで不用な部分を置換していっても良いのですが…
抽出処理をRubyで自動化
仮に1時間かかる単調作業をするとしたら、私は50分かけても、その作業をこなすスクリプトを書く。
と言う言葉を思いだしたので、早速、Windows Live Messenger(前MSN)のチャットログから本文のみを抽出するコードを書いてみました。
#! ruby -Ks require ‘kconv’ MSNRegexp =/(.*?)<.Text>/xm data = "" filename = ARGV[0] begin open(filename) do |f| f.each do |line| # ファイルから1行ずつ読む line = Kconv.kconv(line, Kconv::SJIS) # 文字コードを変換 line.chomp! next if line.empty? data.concat(line) end end rescue => e puts(e.message) end open(’msnLog.txt’, ‘w’) do |f| # 出力ファイル data.scan(MSNRegexp){|tdata| if tdata f.puts(tdata) end } end
上記のコードをプロンプトで抽出したいファイル名を引数に与えて 実行すると、msnLog.txtというファイルに本文が抽出されます。発言者なども抽出したい場合は、正規表現の部分を修正すれば良いですね。
では、今し方学習したボットとの会話はこんなです。 「とあるボットのチャットログ」 やってる本人は、結構楽しんでましたね^^;と言うか合せてました。
今後の改良点
当面の課題は、辞書のメンテツールの作成及びデータベース化、人格形成、文脈・話者理解と情報収集・加工機能を利用環境に合せたエージェント化とか(ぅぉぃ)。