Sha256: d7813973055d3a7d9799730e760ea1db1c5555d6f267d7aeb563c88930c14a37
Contents?: true
Size: 1.8 KB
Versions: 2
Compression:
Stored size: 1.8 KB
Contents
class FuzzyMatch class Similarity attr_reader :wrapper1 attr_reader :wrapper2 def initialize(wrapper1, wrapper2) @wrapper1 = wrapper1 @wrapper2 = wrapper2 end def <=>(other) by_score = best_score <=> other.best_score if by_score == 0 original_weight <=> other.original_weight else by_score end end def best_score @best_score ||= FuzzyMatch.score_class.new(best_wrapper1_variant, best_wrapper2_variant) end def satisfy?(needle, threshold) best_score.dices_coefficient_similar > threshold or ((wrapper2.render.length < 3 or needle.render.length < 3) and best_score.levenshtein_similar > 0) or (needle.words & wrapper2.words).any? end def inspect %{#<FuzzyMatch::Similarity #{wrapper2.render.inspect}=>#{best_wrapper2_variant.inspect} versus #{wrapper1.render.inspect}=>#{best_wrapper1_variant.inspect} original_weight=#{"%0.5f" % original_weight} best_score=#{best_score.inspect}>} end # Weight things towards short original strings def original_weight @original_weight ||= (1.0 / (wrapper1.render.length * wrapper2.render.length)) end private def best_wrapper1_variant best_variants[0] end def best_wrapper2_variant best_variants[1] end def best_variants @best_variants ||= begin wrapper1.variants.product(wrapper2.variants).sort do |tuple1, tuple2| wrapper1_variant1, wrapper2_variant1 = tuple1 wrapper1_variant2, wrapper2_variant2 = tuple2 score1 = FuzzyMatch.score_class.new wrapper1_variant1, wrapper2_variant1 score2 = FuzzyMatch.score_class.new wrapper1_variant2, wrapper2_variant2 score1 <=> score2 end.last end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
fuzzy_match-1.5.0 | lib/fuzzy_match/similarity.rb |
fuzzy_match-1.4.1 | lib/fuzzy_match/similarity.rb |