class Mrkv::Chain
Public Class Methods
new(ngram=2)
click to toggle source
# File lib/mrkv.rb, line 5 def initialize ngram=2 @ngram = ngram @chain = Hash.new { |h,k| h[k] = [] } end
Public Instance Methods
add(lines)
click to toggle source
# File lib/mrkv.rb, line 10 def add lines lines.each do |line| line.downcase.capitalize.gsub(/[^a-zA-Z0-9\.\!\?\s]/, '').split.each_cons(@ngram + 1) do |link| next if link.nil? @chain[link.take(@ngram).join(" ")] << link.last end end @starters = @chain.keys.select{|k| k =~ /^[A-Z]/} true end
generate()
click to toggle source
# File lib/mrkv.rb, line 21 def generate random_starter.split.tap do |str_arr| until str_arr.last.match /[\?\!\.]$/ possibilities = @chain[str_arr[-@ngram..-1].join(" ")] if !possibilities.empty? str_arr << possibilities.sample else str_arr.last << ["?", "!", "."].sample end end end.join(" ") end
Private Instance Methods
random_starter()
click to toggle source
# File lib/mrkv.rb, line 36 def random_starter @starters.sample end