lib/jaro_winkler.rb in jaro_winkler-1.2.1 vs lib/jaro_winkler.rb in jaro_winkler-1.2.2

- old
+ new

@@ -1,21 +1,22 @@ -require 'jaro_winkler/jaro_winkler.so' unless RUBY_PLATFORM == 'java' +require 'jaro_winkler/fallback' +require 'jaro_winkler/jaro_winkler.so' unless JaroWinkler.fallback? module JaroWinkler module_function def jaro_distance s1, s2 length1, length2 = s1.length, s2.length # Guarantee the length order if s1.length > s2.length s1, s2 = s2, s1 length1, length2 = length2, length1 end - window_size = (length2 / 2) - 1 - window_size = 0 if window_size < 0 - matches = 0.0 - transpositions = 0 - previous_index = -1 - max_index = length2 - 1 + window_size = (length2 / 2) - 1 + window_size = 0 if window_size < 0 + matches = 0.0 + transpositions = 0 + previous_index = -1 + max_index = length2 - 1 s1.chars.each_with_index do |c1, i| left = i - window_size right = i + window_size left = 0 if left < 0 right = max_index if right > max_index @@ -44,20 +45,20 @@ def r_distance s1, s2, options = {} options = {weight: 0.1, threshold: 0.7, case_match: false}.merge options weight, threshold, case_match = options[:weight], options[:threshold], options[:case_match] raise 'Scaling factor should not exceed 0.25, otherwise the distance can become larger than 1' if weight > 0.25 - s1, s2 = s1.downcase, s2.downcase if case_match - distance = jaro_distance(s1, s2) - prefix = 0 + s1, s2 = s1.downcase, s2.downcase if case_match + distance = jaro_distance(s1, s2) + prefix = 0 max_length = [4, s1.length, s2.length].min s1[0, max_length].chars.each_with_index do |c1, i| c1 == s2[i] ? prefix += 1 : break end distance < threshold ? distance : distance + ((prefix * weight) * (1 - distance)) end - if RUBY_PLATFORM == 'java' + if JaroWinkler.fallback? alias :distance :r_distance alias :c_distance :r_distance module_function :distance, :c_distance else alias :distance :c_distance \ No newline at end of file