Class: MarkovChainChatBot
- Inherits:
-
Object
- Object
- MarkovChainChatBot
- 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
-
.from(data, answer_limit = 1000) ⇒ Object
datais a map.
Instance Method Summary collapse
-
#answer(question) ⇒ Object
questionis String. -
#data ⇒ Object
datapassed to MarkovChainChatBot.from(). -
#initialize(data, answer_limit) ⇒ MarkovChainChatBot
constructor
:nodoc:.
-
#learn(message) ⇒ Object
messageis String.
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 |
#data ⇒ Object
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() @markov_chain.append!(tokenize()).append!([EndOfMessage.new]) return self end |