jaro_winkler 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/jaro_winkler.gemspec +1 -1
- data/lib/jaro_winkler.rb +8 -4
- data/lib/jaro_winkler/version.rb +1 -1
- data/spec/jaro_winkler_spec.rb +3 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ca8266cce395bbcf2b425545e7a426110ef2601
|
4
|
+
data.tar.gz: 23689730155a05387f5908b4661271f20aa118af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 67661a5f12b0204e76cf50fc44bad3a912b3a570602d18402e29065a6d75455cf7666b439f1aecb8b4d8f77b380cc5af8ff0b7c1f143b557b6fb4488198c19cf
|
7
|
+
data.tar.gz: cb172f54e6ac951d068ad805e157d31c233335e50ecf81c89c15d7cdf50b3b092cbfda044b962639b8e0f48d760bcddfb2277893d70a83b018e63cad97084e0f
|
data/jaro_winkler.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = JaroWinkler::VERSION
|
9
9
|
spec.authors = ["Jian Weihang"]
|
10
10
|
spec.email = ["tonytonyjan@gmail.com"]
|
11
|
-
spec.extensions = ["ext/jaro_winkler/extconf.rb"]
|
11
|
+
spec.extensions = ["ext/jaro_winkler/extconf.rb"] unless RUBY_PLATFORM == 'java'
|
12
12
|
spec.summary = %q{Pure Ruby implementation of Jaro-Winkler distance algorithm.}
|
13
13
|
spec.description = %q{Pure Ruby implementation of Jaro-Winkler distance algorithm.}
|
14
14
|
spec.homepage = "https://github.com/tonytonyjan/jaro_winkler"
|
data/lib/jaro_winkler.rb
CHANGED
@@ -1,15 +1,19 @@
|
|
1
|
-
require 'jaro_winkler/jaro_winkler.so'
|
1
|
+
require 'jaro_winkler/jaro_winkler.so' unless RUBY_PLATFORM == 'java'
|
2
2
|
module JaroWinkler
|
3
3
|
module_function
|
4
4
|
def jaro_distance s1, s2
|
5
5
|
return 0.0 if s1.empty? || s2.empty?
|
6
|
+
# Guarantee the length order
|
7
|
+
if s1.length > s2.length
|
8
|
+
tmp = s1; s1 = s2; s2 = tmp
|
9
|
+
end
|
6
10
|
length1, length2 = s1.length, s2.length
|
7
|
-
window_size = (
|
11
|
+
window_size = (s2.length / 2) - 1
|
8
12
|
matches = 0.0
|
9
13
|
transpositions = 0
|
10
14
|
previous_index = -1
|
15
|
+
max_index = length2 - 1
|
11
16
|
s1.chars.each_with_index do |c1, i|
|
12
|
-
max_index = length2 - 1
|
13
17
|
left = i - window_size
|
14
18
|
right = i + window_size
|
15
19
|
left = 0 if left < 0
|
@@ -39,7 +43,7 @@ module JaroWinkler
|
|
39
43
|
|
40
44
|
def distance s1, s2, options = {}
|
41
45
|
options = {weight: 0.1, threshold: 0.7, case_match: false, native: false}.merge options
|
42
|
-
return c_distance(s1, s2) if options[:native]
|
46
|
+
return c_distance(s1, s2) if RUBY_PLATFORM != 'java' && options[:native]
|
43
47
|
weight, threshold, case_match = options[:weight], options[:threshold], options[:case_match]
|
44
48
|
raise 'Scaling factor should not exceed 0.25, otherwise the distance can become larger than 1' if weight > 0.25
|
45
49
|
s1, s2 = s1.downcase, s2.downcase if case_match
|
data/lib/jaro_winkler/version.rb
CHANGED
data/spec/jaro_winkler_spec.rb
CHANGED