Module: FinModeling::HasStringClassifier::ClassMethods

Defined in:
lib/finmodeling/has_string_classifer.rb

Instance Method Summary collapse

Instance Method Details

#_load_vectors_and_train(base_filename, vectors) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/finmodeling/has_string_classifer.rb', line 15

def _load_vectors_and_train(base_filename, vectors)
  FileUtils.mkdir_p(File.dirname(base_filename)) if !File.exists?(File.dirname(base_filename))
  success = FinModeling::Config.caching_enabled?
  @klasses.each do |cur_klass|
    filename = base_filename + cur_klass.to_s + ".db"
    success = success && File.exists?(filename)
    if success
      @classifiers[cur_klass] = NaiveBayes.load(filename)
    else
      @classifiers[cur_klass].db_filepath = filename
    end
  end
  return if success
  
  vectors.each do |vector|
    begin
      item = @item_klass.new(vector[:item_string])
      item.train(vector[:klass])
    rescue Exception => e
      puts "\"#{vector[:item_string]}\" has a bogus klass: \"#{vector[:klass]}\""
      puts "\t" + e.message
      puts "\t" + e.backtrace.inspect.gsub(/, /, "\n\t ")
    end
  end
  
  @klasses.each do |cur_klass|
    @classifiers[cur_klass].save
  end
end

#classifiersObject



49
50
51
# File 'lib/finmodeling/has_string_classifer.rb', line 49

def classifiers
  @classifiers
end

#has_string_classifier(klasses, item_klass) ⇒ Object



9
10
11
12
13
# File 'lib/finmodeling/has_string_classifer.rb', line 9

def has_string_classifier(klasses, item_klass)
  @klasses     = klasses
  @item_klass  = item_klass
  @classifiers = Hash[ *klasses.zip(klasses.map{ |x| NaiveBayes.new(:yes, :no) }).flatten ]
end

#klassesObject



45
46
47
# File 'lib/finmodeling/has_string_classifer.rb', line 45

def klasses
  @klasses
end