基礎プログラミング II 第 3 回 (情報の構造を分析しよう) 「人工無脳」 講義ノート目次

Hash の「A といえば B」という性質を使って、 あたかも計算機がものごとを理解したかのようにふるまうようすが、 次のようなプログラム例で理解できる。 hash_chatterbot.rb


#!/usr/koeki/bin/ruby -Ke

vocab = Hash.new

printf("何か教えてよ\n")
line = gets.chomp

if /^(\S+)(は|が|と)(\S+)(ね*|だ|よ)/ =˜ line
       topic = $1  
       keyword = $3
end

while true
STDERR.printf("%sってなあに?\n",topic) line = gets.chomp! if /(\S+)(が|の|で|を|だ|も|こと|の)/ =˜ line
vocab[$1] = topic vocab.each{|pair| if topic == pair[1]
if vocab[topic] == nil
break
else printf("「%s」は「%s」ってことね\n",
vocab[topic],pair[1])
end
end } topic = keyword keyword = $1
end
end

同じ value を持った場合に、keyword をつなげ文章にする。 同じ value を持たなければ、その value について定義を訊ねる構造になっている。


何か教えてよ 
今年は豊作だね
今年ってなあに?
2011年のことだよ
豊作だねってなあに?
稲穂がたくさん実ったということだよ
2011年のことってなあに?
今年は雨が少なかったね今年」は「2011年のこと」ってことね
稲穂がたくさん実ったということってなあに?
豊作のことかな豊作だね」は「稲穂がたくさん実ったということ」ってことね
今年は雨ってなあに?