class MarkovGenerator
Attributes
beginnings[RW]
genmax[RW]
ngrams[RW]
Public Class Methods
new(n, genmax)
click to toggle source
# File lib/text_generator.rb, line 6 def initialize(n, genmax) @size = n @ngrams = {} @genmax = genmax @beginnings = [] end
Public Instance Methods
feed(line)
click to toggle source
# File lib/text_generator.rb, line 17 def feed(line) tokens = tokenize(line) return if tokens.length < @size @beginnings << tokens[0..@size-1] (0..(tokens.length - @size)).each do |i| ngram = tokens[i..i+@size-1].to_a next_gram = [tokens[i+@size]] if @ngrams.has_key? ngram @ngrams[ngram] << next_gram else @ngrams[ngram] = next_gram end end end
generate()
click to toggle source
# File lib/text_generator.rb, line 35 def generate current = @beginnings.sample output = current.to_a while output.length <= @genmax-1 if @ngrams.has_key? current possible_next = @ngrams[current].flatten next_gram = possible_next.sample output << next_gram current = output.last(@size) else break end end return output.join(" ") end
tokenize(line)
click to toggle source
# File lib/text_generator.rb, line 13 def tokenize(line) line.strip.split(" ") end