Class: MarkovChainChatBot

Inherits:
Object
  • Object
show all
Defined in:
lib/markov_chain_chat_bot.rb

Overview

A chat bot utilizing MarkovChain.

Defined Under Namespace

Classes: EndOfMessage, PunctuationMark, Token, Word

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(data, answer_limit) ⇒ MarkovChainChatBot

:nodoc:



23
24
25
26
27
28
29
# File 'lib/markov_chain_chat_bot.rb', line 23

def initialize(data, answer_limit)  # :nodoc:
  @markov_chain =
    if data.empty? then MarkovChain.new(data)
    else MarkovChain.from(data)
    end
  @answer_limit = answer_limit
end

Class Method Details

.from(data, answer_limit = 1000) ⇒ Object

data is a map. It may be empty, in this case a brand new MarkovChainChatBot is created. data becomes owned by the returned MarkovChainChatBot.

answer_limit is maximum size of the result of #answer().



19
20
21
# File 'lib/markov_chain_chat_bot.rb', line 19

def self.from(data, answer_limit = 1000)
  new(data, answer_limit)
end

Instance Method Details

#answer(question) ⇒ Object

question is String.

It returns String.



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/markov_chain_chat_bot.rb', line 51

def answer(question)
  answer = ""
  previous_token = nil
  catch :out_of_limit do
    for token in @markov_chain.predict()
      break if token.tkn_is_a? EndOfMessage or token.nil?
      delimiter = 
        if (previous_token.tkn_is_a? Word and token.tkn_is_a? Word) then " "
        else ""
        end
      answer.append_limited(delimiter + token.tkn_value, @answer_limit)
      previous_token = token
    end
  end
  return answer
end

#dataObject

data passed to MarkovChainChatBot.from().



32
33
34
# File 'lib/markov_chain_chat_bot.rb', line 32

def data
  @markov_chain.data
end

#learn(message) ⇒ Object

message is String.

It returns this (modified) MarkovChainChatBot.



41
42
43
44
# File 'lib/markov_chain_chat_bot.rb', line 41

def learn(message)
  @markov_chain.append!(tokenize(message)).append!([EndOfMessage.new])
  return self
end