Sha256: e4f4303c056261011d6469de5e8c9fefe31b2f5e88d200904a2ecb896ea1aec7
Contents?: true
Size: 1.14 KB
Versions: 2
Compression:
Stored size: 1.14 KB
Contents
# coding: utf-8 module StringMetric module Levenshtein class Recursive def self.distance(from, to, options = {}) return 0 if from == to return to.size if from.size.zero? return from.size if to.size.zero? max_distance = options[:max_distance] insertion_cost = options.fetch(:insertion_cost, 1) deletion_cost = options.fetch(:deletion_cost, 1) substitution_cost = options.fetch(:substitution_cost, 1) if from.chars.to_a.last == to.chars.to_a.last cost = 0 else cost = substitution_cost end if max_distance return [distance(from.chop, to, options) + deletion_cost, distance(from, to.chop, options) + insertion_cost, distance(from.chop, to.chop, options) + cost, max_distance ].min else return [distance(from.chop, to, options) + deletion_cost, distance(from, to.chop, options) + insertion_cost, distance(from.chop, to.chop, options) + cost ].min end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
string_metric-0.1.1 | lib/string_metric/levenshtein/recursive.rb |
string_metric-0.1.0 | lib/string_metric/levenshtein/recursive.rb |