人工無能

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>