class ProbabilityCalculator

Public Class Methods

new(args) click to toggle source
# File lib/NaiveText/ProbabilityCalculator.rb, line 2
def initialize(args)
  @categories = args[:categories] || []
  @probabilities = ProbabilityCollection.new(categories: @categories)
end

Public Instance Methods

get_probabilities_for(text) click to toggle source
# File lib/NaiveText/ProbabilityCalculator.rb, line 7
def get_probabilities_for(text)
  calculateProbabilities(text)
  @probabilities.normalize
end

Private Instance Methods

calculateProbabilities(text) click to toggle source
# File lib/NaiveText/ProbabilityCalculator.rb, line 22
def calculateProbabilities(text)
  set_apriori_probabilities
  list_of_words = text.split(/\W+/)
  list_of_words.each do |word|
    @categories.each do |category|
      @probabilities.multiply(category: category, factor: protect_factor(category.p(word)))
    end
  end
  remove_minimum(text)
end
minimum() click to toggle source
# File lib/NaiveText/ProbabilityCalculator.rb, line 18
def minimum
  1.to_f / (10 * @categories.total_word_count)
end
protect_factor(factor) click to toggle source
# File lib/NaiveText/ProbabilityCalculator.rb, line 14
def protect_factor(factor)
  [factor, minimum].max
end
remove_minimum(text) click to toggle source
# File lib/NaiveText/ProbabilityCalculator.rb, line 39
def remove_minimum(text)
  times = text.split(/\W+/).length
  @probabilities.greater_then(minimum**times)
end
set_apriori_probabilities() click to toggle source
# File lib/NaiveText/ProbabilityCalculator.rb, line 33
def set_apriori_probabilities
  @categories.each do |category|
    @probabilities.set(category: category, value: @categories.p_apriori(category))
  end
end