class Yada

Constants

DEFAULT_OPTIONS
VERSION

Public Class Methods

new(options = {}) click to toggle source
# File lib/yada.rb, line 14
def initialize(options = {})
  @options = DEFAULT_OPTIONS.merge(options)
  @markov = Markov.new(@options[:ngram], @options[:tokenize], @options[:join])
end

Public Instance Methods

generate(n = 1) click to toggle source
# File lib/yada.rb, line 25
def generate(n = 1)
  start = [Markov::START] * @options[:ngram]
  (1..n).map do
    generate_tokens(start).reduce('') do |sentence, token|
      if token.match(@options[:punctuation])
        sentence + token
      else
        sentence + @options[:join] + token
      end
    end
  end
end
train!(data) click to toggle source
# File lib/yada.rb, line 19
def train!(data)
  input = Input.new(data, @options[:stop])
  @markov.train!(input)
  true
end

Private Instance Methods

generate_tokens(ngram, tokens = []) click to toggle source
# File lib/yada.rb, line 38
        def generate_tokens(ngram, tokens = [])
  random = rand()
  next_token = @markov.tokens.reduce(0.0) do |probability, token|
    probability += @markov.transition_probability(ngram, token)
    break token if probability > random
    probability
  end

  return tokens if next_token == Markov::STOP
  generate_tokens(ngram.drop(1) + [next_token], tokens + [next_token])
end