Hash 配列の「A といえば B」という性質を使って、 あたかも計算機がものごとを理解したかのようにふるまう。 chatterbot.rb
#!/usr/koeki/bin/ruby
$KCODE = 'e'
vocab = Hash.new
STDERR.printf("何か教えてよ\n")
sentence = gets.chomp
while true
if /^(\S+)(は)(\S+)(ね|の|だ|で)/ =~ sentence
# p sentence
topic = $1
keyword = $3
end
# p vocab
# vocab[topic] = keyword
vocab[keyword] = topic # どちらを切り出したいか考える
vocab.each{
|check|
if (vocab.value?(topic) == true && check[0] != keyword)
printf("%sっていうのは%sだね\n",check[0], keyword)
print("他にも教えてよ\n")
break
else
printf("%sってなあに?\n",check[1])
break
end
}
sentence = gets.chomp
end
同じ value を持った場合に、keyword をつなげ文章にする。 同じ value を持たなければ、その value について定義を訊ねる構造になっている。
何か教えてよ バラは赤いね バラって何のこと? バラは花のことだよ 花っていうのは赤だね 他には? スミレはきれいだね スミレって何のこと? スミレは花のことだよ 花っていうのはきれいだね 他には? 赤は色のことだよ 色っていうのはきれいだね 他には?
本日の講義 / 基礎プログラミング II / 2007 年度
Madoka Nishimura <madoka@e.koeki-u.ac.jp>