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