Sha256: 00fcd77688e78ab196ab0aa9231caabb21b267108cbc6e4f3345d2c0f71c7c81

Contents?: true

Size: 766 Bytes

Versions: 4

Compression:

Stored size: 766 Bytes

Contents

module Classiphier
  class Bayes
    def initialize
      @data = Data.new
    end

    def train(category, sentence)
      @data.perform!
      @data[:data][category] ||= Data.new
      @data[:data][category].train(sentence)
    end

    def classify(sentence)
      classifications(sentence).min_by { |a| -a[1] }[0]
    end

    def classifications(sentence)
      Hash.new(0).tap do |score|
        @data[:data].each do |category, data|
          sentence.words.each do |word|
            value = data[:data].fetch(word, 0.1).to_f
            score[category] += Math.log(value / data[:words])
          end

          value = @data[:data][category][:count].to_f
          score[category] += Math.log(value / @data[:count])
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
classiphier-0.1.3 lib/classiphier/bayes.rb
classiphier-0.1.2 lib/classiphier/bayes.rb
classiphier-0.1.1 lib/classiphier/bayes.rb
classiphier-0.1.0 lib/classiphier/bayes.rb