lib/groupie.rb in groupie-0.1.1 vs lib/groupie.rb in groupie-0.2.2
- old
+ new
@@ -10,42 +10,63 @@
def [](group)
@groups[group] ||= Group.new(group)
end
- def classify(entry)
+ def classify(entry, strategy=:sum)
results = {}
total_count = @groups.inject(0) do |sum, name_group|
group = name_group.last
- sum + group.count(entry)
+ count = group.count(entry)
+ if strategy==:sum
+ sum += count
+ elsif strategy==:sqrt
+ sum += Math::sqrt(count)
+ elsif strategy==:log
+ sum += Math::log10(count) if count > 0
+ else
+ raise "Invalid strategy: #{strategy}"
+ end
+ next sum
end
return results if 0 == total_count
@groups.each do |name, group|
count = group.count(entry)
+ if strategy==:sum
+ # keep count
+ elsif strategy==:sqrt
+ count = Math::sqrt(count)
+ elsif strategy==:log
+ count = Math::log10(count) if count > 0
+ else
+ raise "Invalid strategy: #{strategy}"
+ end
results[name] = count > 0 ? count.to_f / total_count : 0.0
end
return results
end
# Classify a text by taking the average of all word classifications.
- def classify_text(words)
+ def classify_text(words, strategy=:sum)
+ hits = 0
group_score_sums = words.inject({}) do |results, word|
- word_results = classify(word)
+ word_results = classify(word, strategy)
+ next results if word_results.empty?
+ hits += 1
results.merge(word_results) do |key, old, new|
old + new
end
end
- words_count = words.size.to_f
averages={}
group_score_sums.each do |group, sum|
- averages[group] = sum / words_count
+ averages[group] = hits > 0 ? sum / hits : 0
end
averages
end
-
+
def self.version
File.read(File.join(File.dirname(File.expand_path(__FILE__)), "..", "VERSION")).strip
end
end
\ No newline at end of file