Class: FeatureSet::Builder

Inherits:
Object
  • Object
show all
Defined in:
lib/feature_set/builder.rb

Constant Summary collapse

BUILTIN_FEATURE_BUILDERS =
%w[FeatureSet::FeatureBuilder::Cuss 
FeatureSet::FeatureBuilder::WordVector].map(&:constantize)

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Builder

Returns a new instance of Builder.



16
17
18
19
20
21
# File 'lib/feature_set/builder.rb', line 16

def initialize(options = {})
  @options = options
  @feature_builders = []
  @features = []
  @data = []
end

Instance Attribute Details

#dataObject

Returns the value of attribute data.



14
15
16
# File 'lib/feature_set/builder.rb', line 14

def data
  @data
end

#feature_buildersObject

Returns the value of attribute feature_builders.



14
15
16
# File 'lib/feature_set/builder.rb', line 14

def feature_builders
  @feature_builders
end

#featuresObject

Returns the value of attribute features.



14
15
16
# File 'lib/feature_set/builder.rb', line 14

def features
  @features
end

#optionsObject

Returns the value of attribute options.



14
15
16
# File 'lib/feature_set/builder.rb', line 14

def options
  @options
end

Class Method Details

.wrap_dataset(dataset) ⇒ Object



66
67
68
# File 'lib/feature_set/builder.rb', line 66

def self.wrap_dataset(dataset)
  dataset.map { |row| row.inject({}) { |m, (k, v)| m[k] = (k == :class ? v : Datum.new(v)) ; m } }
end

Instance Method Details

#add_data(data) ⇒ Object



23
24
25
26
# File 'lib/feature_set/builder.rb', line 23

def add_data(data)
  clear_features
  (@data << data).flatten!
end

#add_feature_builders(*builders) ⇒ Object Also known as: add_feature_builder



60
61
62
63
# File 'lib/feature_set/builder.rb', line 60

def add_feature_builders(*builders)
  builders = BUILTIN_FEATURE_BUILDERS.map(&:new) if [:all, "all"].include?(builders.first)
  (@feature_builders << builders).flatten!
end

#clear_dataObject



28
29
30
31
# File 'lib/feature_set/builder.rb', line 28

def clear_data
  @data = []
  clear_features
end

#clear_featuresObject



33
34
35
# File 'lib/feature_set/builder.rb', line 33

def clear_features
  @features = []
end

#generate_features(opts = {}) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/feature_set/builder.rb', line 37

def generate_features(opts = {})
  wrapped_data_set = self.class.wrap_dataset(data)

  feature_builders.each {|fb| fb.before_generate_features(wrapped_data_set) }
  
  @features = wrapped_data_set.map do |row|
    output_row = {}
    
    row.each do |key, datum|
      (output_row[:class] = datum) and next if key == :class
      output_row[key] = datum.value if opts[:include_original]

      feature_builders.each do |builder|
        builder.generate_features(datum, key, row).each do |feature, value|
          output_row["#{key}_#{feature}".to_sym] = value
        end
      end
    end
    
    output_row
  end
end