class GabTree

Attributes

match_critera[R]
node_counter[RW]
phoneme_convert[R]
root_node[RW]
target_phoneme[RW]

Public Class Methods

new(target_phoneme, args={}) click to toggle source
# File lib/promper/gab_tree.rb, line 11
def initialize(target_phoneme, args={})
  @target_phoneme = target_phoneme    
  @phoneme_convert = args[:phoneme_convert] || default_phoneme_convert
  @match_critera = args[:match_criteria] || default_match_criteria

  if @phoneme_convert == true
    @target_phoneme = target_phoneme_convert
  else
    @target_phoneme = default_target_phoneme
  end
  
  @node_counter = 0
  @root_node = Tree::TreeNode.new(
    node_counter_to_string, ["NONE IM THE ROOT!", @target_phoneme,
    state: :ready_to_continue])    
end

Public Instance Methods

change_node_state_aborted(node) click to toggle source
# File lib/promper/gab_tree.rb, line 116
def change_node_state_aborted(node)
  node.content[2][:state] = :aborted
end
change_node_state_completed(node) click to toggle source
# File lib/promper/gab_tree.rb, line 120
def change_node_state_completed(node)
  node.content[2][:state] = :completed
end
check_leaves() click to toggle source
# File lib/promper/gab_tree.rb, line 100
def check_leaves
  root_node.each_leaf
end
check_node_state(node) click to toggle source
# File lib/promper/gab_tree.rb, line 104
def check_node_state(node)
  node.content[2][:state]
end
checked_all_target_phonemes?(node) click to toggle source
# File lib/promper/gab_tree.rb, line 108
def checked_all_target_phonemes?(node)
  begin 
    node.content[1].length == 0
  rescue
    true
  end
end
default_match_criteria() click to toggle source
# File lib/promper/gab_tree.rb, line 32
def default_match_criteria    
  ExactMatch.new
end
default_phoneme_convert() click to toggle source
# File lib/promper/gab_tree.rb, line 28
def default_phoneme_convert    
  false
end
default_target_phoneme() click to toggle source
# File lib/promper/gab_tree.rb, line 46
def default_target_phoneme
  target_phoneme.downcase.gsub(/\s+/, "")
end
failedToMakeLeaves?(node) click to toggle source
# File lib/promper/gab_tree.rb, line 124
def failedToMakeLeaves?(node)
  node.is_leaf? && !checked_all_target_phonemes?(node)
end
finished?() click to toggle source
# File lib/promper/gab_tree.rb, line 60
def finished?
  @finished_check = false

  nodes = check_leaves
  nodes.each do |node|      
    if check_node_state(node) == :completed # How can I do this on one line?
      @finished_check = true
    elsif check_node_state(node) == :aborted
      @finished_check = true      
    else
      @finished_check = false
      break
    end        
  end

  @finished_check
end
get_remaining_phoneme_from(node) click to toggle source
# File lib/promper/gab_tree.rb, line 136
def get_remaining_phoneme_from(node)
  node.content[1]
end
iterate_over_leaves() click to toggle source
# File lib/promper/gab_tree.rb, line 78
def iterate_over_leaves
  nodes = check_leaves

  nodes.each do |node|

    unless check_node_state(node) == :ready_to_continue
      next
    else
      if checked_all_target_phonemes?(node)
        change_node_state_completed(node)
      else
        try_to_make_leaves(node)                    
        change_node_state_completed(node)
      end
    end
    
    if failedToMakeLeaves?(node)
      change_node_state_aborted(node)
    end
  end
end
iterate_until_finished() click to toggle source
# File lib/promper/gab_tree.rb, line 54
def iterate_until_finished
  until finished? do
    iterate_over_leaves     
  end    
end
make_child_nodes(match_array, node) click to toggle source
# File lib/promper/gab_tree.rb, line 152
def make_child_nodes(match_array, node)
  match_array.each do |matched_phoneme, remaining_phoneme_chunk|      
    node_counter_increment         
    node << Tree::TreeNode.new(
      node_counter_to_string, [matched_phoneme, remaining_phoneme_chunk,
      state: :ready_to_continue])      
  end
end
make_match_array(node_target_phoneme) click to toggle source
# File lib/promper/gab_tree.rb, line 140
def make_match_array(node_target_phoneme) # Consider renaming to remaining_phoneme
  match_array = match_critera.match(node_target_phoneme)
  match_array
end
node_counter_increment() click to toggle source

Put as a separate method to remind me I have to figure out what is going on! For some reason I can't increment the counter if I use node_counter += 1. Strange!

# File lib/promper/gab_tree.rb, line 148
def node_counter_increment
  @node_counter += 1
end
node_counter_to_string() click to toggle source
# File lib/promper/gab_tree.rb, line 50
def node_counter_to_string
  node_counter.to_s    
end
target_phoneme_convert() click to toggle source
# File lib/promper/gab_tree.rb, line 36
def target_phoneme_convert
  if @phoneme_convert == true
      list_of_words = @target_phoneme.split
      ipa_list = list_of_words.map do |word|
        word.to_ipa.tr('ˈˌ', '')
      end
      ipa_list = ipa_list.join
  end
end
try_to_make_leaves(node) click to toggle source
# File lib/promper/gab_tree.rb, line 128
def try_to_make_leaves(node)
  @remaining_phoneme = get_remaining_phoneme_from(node)
  @match_array = make_match_array(@remaining_phoneme)
  unless @match_array == nil
    make_child_nodes(@match_array, node)
  end
end