class OmniCat::Classifiers::Strategy
- Author
-
Mustafa Turan (mustafaturan.net@gmail.com)
- Copyright
-
Copyright © 2013 Mustafa Turan
- License
-
MIT
The class supplies abstract methods for possible text classifiers
Attributes
Public Class Methods
# File lib/omnicat/classifiers/strategy.rb, line 19 def initialize(strategy_hash = {}) @categories = {} @category_count = strategy_hash[:category_count].to_i @category_size_limit = strategy_hash[:category_size_limit].to_i @doc_count = strategy_hash[:doc_count].to_i @token_count = strategy_hash[:token_count].to_i @unique_token_count = strategy_hash[:unique_token_count].to_i end
Public Instance Methods
Abstract method for classifying the given document
Parameters¶ ↑
-
doc_content
- The document for classification
Returns¶ ↑
-
result
-OmniCat::Result
object
# File lib/omnicat/classifiers/strategy.rb, line 102 def classify(doc_content) not_implemented_error(__callee__) end
Train the desired category with multiple documents
Parameters¶ ↑
-
category_name
- Name of the category from added categories list -
doc_contents
-Array
of documents
# File lib/omnicat/classifiers/strategy.rb, line 66 def train_batch(category_name, doc_contents) doc_contents.each { |doc_content| train(category_name, doc_content) } end
Abstract method for untraining the desired category with a document
Parameters¶ ↑
-
category_name
- Name of the category from added categories list -
doc_content
- Document text
# File lib/omnicat/classifiers/strategy.rb, line 77 def untrain(category_name, doc_content) not_implemented_error(__callee__) end
Untrain the desired category with multiple documents
Parameters¶ ↑
-
category_name
- Name of the category from added categories list -
doc_contents
-Array
of documents
# File lib/omnicat/classifiers/strategy.rb, line 88 def untrain_batch(category_name, doc_contents) doc_contents.each { |doc_content| untrain(category_name, doc_content) } end
Protected Instance Methods
nodoc
# File lib/omnicat/classifiers/strategy.rb, line 128 def category_exists?(category_name) categories.has_key?(category_name) end
nodoc
# File lib/omnicat/classifiers/strategy.rb, line 155 def classifiable? if category_count < 2 raise StandardError, 'At least 2 categories needed for classification process!' false elsif doc_availability? == false raise StandardError, 'Each category must trained with at least one document!' false else true end end
nodoc
# File lib/omnicat/classifiers/strategy.rb, line 138 def decrement_category_count @category_count -= 1 end
nodoc
# File lib/omnicat/classifiers/strategy.rb, line 149 def decrement_doc_counts(category_name) @doc_count -= 1 @categories[category_name].doc_count -= 1 end
nodoc
# File lib/omnicat/classifiers/strategy.rb, line 170 def doc_availability? @categories.each do |_, category| return false if category.doc_count == 0 end true end
nodoc
# File lib/omnicat/classifiers/strategy.rb, line 133 def increment_category_count @category_count += 1 end
nodoc
# File lib/omnicat/classifiers/strategy.rb, line 143 def increment_doc_counts(category_name) @doc_count += 1 @categories[category_name].doc_count += 1 end
Private Instance Methods
nodoc
# File lib/omnicat/classifiers/strategy.rb, line 122 def not_implemented_error(method_name) raise NotImplementedError.new("#{self.class.name}##{method_name} method is not implemented!") end