class Rubykov::TextGenerator

Public Class Methods

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

Public Instance Methods

character_limited_output(desired_length) click to toggle source
# File lib/rubykov/text_generator.rb, line 11
def character_limited_output(desired_length)
  length = 0
  words_to_sentences(chain.take_while { |word| length += (word.length + 1); length < desired_length } )
end
sentence_limited_output(desired_length) click to toggle source
# File lib/rubykov/text_generator.rb, line 20
def sentence_limited_output(desired_length)
  length = 0
  output = []
  while length < desired_length
    output += chain.take_while do |word|
      length += 1 if is_sentence_finisher?(word)
      length < desired_length
    end
  end
  words_to_sentences(output)
end
train(training_text) click to toggle source
Calls superclass method Rubykov::MarkovModel#train
# File lib/rubykov/text_generator.rb, line 7
def train(training_text)
  super(massage_training_text(training_text))
end
word_limited_output(desired_length) click to toggle source
# File lib/rubykov/text_generator.rb, line 16
def word_limited_output(desired_length)
  words_to_sentences(chain.take(desired_length))
end

Private Instance Methods

is_sentence_finisher?(word) click to toggle source
# File lib/rubykov/text_generator.rb, line 50
def is_sentence_finisher?(word)
  word =~ (/^[?!.]*$/)
end
massage_training_text(training_text) click to toggle source
# File lib/rubykov/text_generator.rb, line 54
def massage_training_text(training_text)
  training_text.downcase.gsub(/[^\w\s]+/) { " #{$&}" }.split(' ')
end
massage_word_list(words) click to toggle source
# File lib/rubykov/text_generator.rb, line 38
def massage_word_list(words)
  output = []
  words.each_with_index do |word, index|
    if word =~ /^[^\w\s]+$/
      output[-1] += word
    else
      output << word
    end
  end
  output
end
words_to_sentences(words) click to toggle source
# File lib/rubykov/text_generator.rb, line 34
def words_to_sentences(words)
  massage_word_list(words).join(' ')
end