class Rlid::LanguageProbabilities

Constants

CLASSNAME
LANG

indexes

MAX_OUTPUT
PERC

Attributes

percentage[RW]

Public Class Methods

new(args={}) click to toggle source
# File lib/rlid/probabilities/language_probabilities.rb, line 46
def initialize(args={})
  @percentage = Hash.new(0)
  args.each do |languages, percentage|
    add(languages, percentage)
  end
end

Public Instance Methods

*(other) click to toggle source
# File lib/rlid/probabilities/language_probabilities.rb, line 85
def *(other)
  if not other.is_a? LanguageProbabilities
    p other.inspect
    raise InvalidArgument.new(other)
  end
  res = LanguageProbabilities.new()
  @percentage.each_key do |lang|
    res.percentage[lang] = percentage[lang] * other.percentage[lang]
  end
  res.normalize
  res
end
[](lang) click to toggle source
# File lib/rlid/probabilities/language_probabilities.rb, line 73
def [](lang)
  @percentage[lang]
end
first() click to toggle source
# File lib/rlid/probabilities/language_probabilities.rb, line 81
def first
  sorted.first[LANG]
end
random_language() click to toggle source
# File lib/rlid/probabilities/language_probabilities.rb, line 53
def random_language
  r = rand
  sum = 0
  @percentage.each do |language, perc|
    sum += perc
    return language if sum > r
    #puts "#{sum}(#{r})"
  end
  warn "rounding error!! (sum is not 1!!)"
  @percentage.keys.first
end
to_a() click to toggle source
# File lib/rlid/probabilities/language_probabilities.rb, line 77
def to_a
  sorted.map{|x| {language: x[LANG], confidence: x[PERC]}}
end
to_html() click to toggle source
# File lib/rlid/web.rb, line 6
def to_html
  sorted[0...MAX_OUTPUT].map do |x|
    perc = Percentage.new(x[PERC]).to_s
    lang = Language.name_of(x[LANG])
    "<div class='#{CLASSNAME}'>" +
      "#{lang} (#{perc}% chance)</div>"
  end.join("\n")
end
to_s() click to toggle source
# File lib/rlid/probabilities/language_probabilities.rb, line 65
def to_s
  sorted[0...MAX_OUTPUT].map do |x|
    # calculate the digits
    formatted_perc = Percentage.new(x[PERC]).to_s
    "#{x[LANG]}(#{formatted_perc})"
  end.join(" : ")
end

Protected Instance Methods

normalize() click to toggle source
# File lib/rlid/probabilities/language_probabilities.rb, line 126
def normalize
  tot = sum
  return if tot == 0
  @percentage.each_key do |key|
    @percentage[key] /= tot
  end
end
random_language_and_delete() click to toggle source
# File lib/rlid/probabilities/language_probabilities.rb, line 119
def random_language_and_delete
  l = random_language
  @percentage.delete(l)
  normalize
  l
end
sorted() click to toggle source
# File lib/rlid/probabilities/language_probabilities.rb, line 138
def sorted
  begin
    @percentage.to_a.sort!{|x,y| y[PERC] <=> x[PERC]}
  rescue
    p @percentage
  end
end
sum() click to toggle source
# File lib/rlid/probabilities/language_probabilities.rb, line 134
def sum
  @percentage.values.inject(0){|s, v| s + v}
end

Private Instance Methods

add(languages, perc) click to toggle source
# File lib/rlid/probabilities/language_probabilities.rb, line 99
def add(languages, perc)
  if perc < 0 or perc > 1
    perc = perc.round
  end
  languages = [languages] if not languages.is_a? Array
  perc = perc.to_f / languages.size
  languages.each {|l| @percentage[l] = perc}
end