Class: Rubykov::MarkovModel

Inherits:
Object
  • Object
show all
Defined in:
lib/rubykov/markov_model.rb

Direct Known Subclasses

TextGenerator

Instance Method Summary collapse

Constructor Details

#initialize(order, training_data) ⇒ MarkovModel

Returns a new instance of MarkovModel.

Raises:

  • (ArgumentError)


3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/rubykov/markov_model.rb', line 3

def initialize(order, training_data)
  raise ArgumentError unless order.is_a? Integer
  raise ArgumentError unless training_data.is_a? Array
  chain_data = {}.tap do |representation|
    training_data.each_cons(order + 1).each do |datum|
      key = datum.first(order)
      value = datum.last
      if representation.include? key
        representation[key] << value
      else
        representation[key] = [value]
      end
    end
  end
  @order = order
  @representation = chain_data
end

Instance Method Details

#chainObject



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/rubykov/markov_model.rb', line 21

def chain
  Enumerator.new do |y|
    current_state = @representation.keys.sample
    current_state.each do |word|
      y << word
    end

    loop do
      if @representation[current_state].nil?
        break
      else
        next_word = @representation[current_state].sample
        y << next_word
        current_state = current_state.last(@order-1) + [next_word]
      end
    end
  end
end

#statesObject



40
41
42
# File 'lib/rubykov/markov_model.rb', line 40

def states
  @representation.keys
end

#transitionsObject



44
45
46
# File 'lib/rubykov/markov_model.rb', line 44

def transitions
  @representation
end