class Rubykov::WordGenerator

Public Class Methods

new(order, training_data) click to toggle source
Calls superclass method Rubykov::MarkovModel::new
# File lib/rubykov/word_generator.rb, line 3
def initialize(order, training_data)
  super(order, training_data)
end

Public Instance Methods

train(training_data) click to toggle source
# File lib/rubykov/word_generator.rb, line 7
def train(training_data)
  add_data_to_model(training_data)
end
word() click to toggle source
# File lib/rubykov/word_generator.rb, line 11
def word
  chain.to_a.join('').capitalize
end

Private Instance Methods

add_data_to_model(training_data) click to toggle source
Calls superclass method Rubykov::MarkovModel#add_data_to_model
# File lib/rubykov/word_generator.rb, line 21
def add_data_to_model(training_data)
  massage_training_data(training_data).each do |datum|
    super(datum)
  end
end
chain_enumerator(seed_state = states.sample) click to toggle source
# File lib/rubykov/word_generator.rb, line 27
def chain_enumerator(seed_state = states.sample)
  Enumerator.new do |output|
    current_state = seed_state
    current_state.each do |word|
      output << word
    end

    loop do
      break if @representation[current_state].nil?
      next_letter = @representation[current_state].sample
      break if next_letter == '\\n'
      output << next_letter
      current_state = current_state.last(@order-1) + [next_letter]
    end
  end
end
massage_training_data(training_data) click to toggle source
# File lib/rubykov/word_generator.rb, line 17
def massage_training_data(training_data)
  training_data.map { |datum| datum.downcase.split('') + ['\n'] }
end