Class: YeshouaCrm::Currency::Heuristics::Analyzer

Inherits:
Object
  • Object
show all
Defined in:
lib/yeshoua_crm/currency/heuristics.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(str, search_tree) ⇒ Analyzer

Returns a new instance of Analyzer.



73
74
75
76
77
# File 'lib/yeshoua_crm/currency/heuristics.rb', line 73

def initialize str, search_tree
  @str = (str||'').dup
  @search_tree = search_tree
  @currencies = []
end

Instance Attribute Details

#currenciesObject

Returns the value of attribute currencies.



71
72
73
# File 'lib/yeshoua_crm/currency/heuristics.rb', line 71

def currencies
  @currencies
end

#search_treeObject (readonly)

Returns the value of attribute search_tree.



70
71
72
# File 'lib/yeshoua_crm/currency/heuristics.rb', line 70

def search_tree
  @search_tree
end

#strObject

Returns the value of attribute str.



71
72
73
# File 'lib/yeshoua_crm/currency/heuristics.rb', line 71

def str
  @str
end

#wordsObject (readonly)

Returns the value of attribute words.



70
71
72
# File 'lib/yeshoua_crm/currency/heuristics.rb', line 70

def words
  @words
end

Instance Method Details

#formatObject



90
91
92
93
94
95
96
97
# File 'lib/yeshoua_crm/currency/heuristics.rb', line 90

def format
  str.gsub!(/[\r\n\t]/,'')
  str.gsub!(/[0-9][\.,:0-9]*[0-9]/,'')
  str.gsub!(/[0-9]/, '')
  str.downcase!
  @words = str.split
  @words.each {|word| word.chomp!('.'); word.chomp!(',') }
end

#prepare_replyObject



140
141
142
143
144
145
146
147
# File 'lib/yeshoua_crm/currency/heuristics.rb', line 140

def prepare_reply
  codes = currencies.map do |currency|
    currency[:iso_code]
  end
  codes.uniq!
  codes.sort!
  codes
end

#processObject



79
80
81
82
83
84
85
86
87
88
# File 'lib/yeshoua_crm/currency/heuristics.rb', line 79

def process
  format
  return [] if str.empty?

  search_by_symbol
  search_by_iso_code
  search_by_name

  prepare_reply
end

#search_by_iso_codeObject



107
108
109
110
111
112
113
# File 'lib/yeshoua_crm/currency/heuristics.rb', line 107

def search_by_iso_code
  words.each do |word|
    if found = search_tree[:by_iso_code][word]
      currencies.concat(found)
    end
  end
end

#search_by_nameObject



115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/yeshoua_crm/currency/heuristics.rb', line 115

def search_by_name
  # remember, the search tree by name is a construct of branches and leaf!
  # We need to try every combination of words within the sentence, so we
  # end up with a x^2 equation, which should be fine as most names are either
  # one or two words, and this is multiplied with the words of given sentence

  search_words = words.dup

  while search_words.length > 0
    root = search_tree[:by_name]

    search_words.each do |word|
      if root = root[word]
        if root[:value]
          currencies.concat(root[:value])
        end
      else
        break
      end
    end

    search_words.delete_at(0)
  end
end

#search_by_symbolObject



99
100
101
102
103
104
105
# File 'lib/yeshoua_crm/currency/heuristics.rb', line 99

def search_by_symbol
  words.each do |word|
    if found = search_tree[:by_symbol][word]
      currencies.concat(found)
    end
  end
end