taxamatch_rb 0.8.3 → 0.8.4

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -3,6 +3,7 @@ require 'yaml'
3
3
  # YAML::ENGINE.yamler= 'syck'
4
4
 
5
5
  gem "biodiversity19",">= 1.0.10"
6
+ gem "damerau-levenshtein", ">= 0.5.4"
6
7
 
7
8
 
8
9
  group :development do
data/Gemfile.lock CHANGED
@@ -15,6 +15,7 @@ GEM
15
15
  gherkin (~> 2.4.1)
16
16
  json (>= 1.4.6)
17
17
  term-ansicolor (>= 1.0.5)
18
+ damerau-levenshtein (0.5.4)
18
19
  diff-lcs (1.1.2)
19
20
  gherkin (2.4.1)
20
21
  json (>= 1.4.6)
@@ -65,6 +66,7 @@ DEPENDENCIES
65
66
  biodiversity19 (>= 1.0.10)
66
67
  bundler (~> 1.0.0)
67
68
  cucumber
69
+ damerau-levenshtein (>= 0.5.4)
68
70
  jeweler (~> 1.6.0)
69
71
  mocha
70
72
  rake-compiler
data/Rakefile CHANGED
@@ -10,7 +10,6 @@ rescue Bundler::BundlerError => e
10
10
  end
11
11
 
12
12
  require 'rake'
13
- require 'rake/extensiontask'
14
13
 
15
14
  begin
16
15
  require 'jeweler'
@@ -43,10 +42,4 @@ RSpec::Core::RakeTask.new(:rcov) do |spec|
43
42
  spec.rcov = true
44
43
  end
45
44
 
46
- Rake::ExtensionTask.new("damerau_levenshtein") do |extension|
47
- extension.lib_dir = "lib"
48
- end
49
-
50
- Rake::Task[:spec].prerequisites << :compile
51
-
52
45
  task :default => :spec
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.8.3
1
+ 0.8.4
data/lib/taxamatch_rb.rb CHANGED
@@ -2,7 +2,7 @@
2
2
  $:.unshift(File.dirname(__FILE__)) unless
3
3
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
4
4
  # $:.unshift('taxamatch_rb')
5
- require 'taxamatch_rb/damerau_levenshtein_mod'
5
+ require 'damerau-levenshtein'
6
6
  require 'taxamatch_rb/atomizer'
7
7
  require 'taxamatch_rb/normalizer'
8
8
  require 'taxamatch_rb/phonetizer'
@@ -17,7 +17,7 @@ module Taxamatch
17
17
 
18
18
  def initialize
19
19
  @parser = Taxamatch::Atomizer.new
20
- @dlm = Taxamatch::DamerauLevenshteinMod.new
20
+ @dlm = DamerauLevenshtein
21
21
  end
22
22
 
23
23
 
@@ -75,7 +75,7 @@ module Taxamatch
75
75
  def self.fuzzy_match_authors(author1, author2)
76
76
  au1_length = author1.size
77
77
  au2_length = author2.size
78
- dlm = Taxamatch::DamerauLevenshteinMod.new
78
+ dlm = DamerauLevenshtein
79
79
  ed = dlm.distance(author1, author2,2,3) #get around a bug in C code, but it really has to be fixed
80
80
  (ed <= 3 && ([au1_length, au2_length].min > ed * 2) && (ed < 2 || author1[0] == author2[0]))
81
81
  end
@@ -86,4 +86,4 @@ module Taxamatch
86
86
  nil
87
87
  end
88
88
  end
89
- end
89
+ end
@@ -1,19 +1,6 @@
1
1
  # encoding: UTF-8
2
2
  require 'spec_helper'
3
3
 
4
- describe 'DamerauLevenshteinMod' do
5
- it 'should get tests' do
6
- read_test_file(File.expand_path(File.dirname(__FILE__)) + '/damerau_levenshtein_mod_test.txt', 5) do |y|
7
- dl = Taxamatch::DamerauLevenshteinMod.new
8
- if y
9
- res = dl.distance(y[0], y[1], y[3].to_i, y[2].to_i)
10
- puts y if res != y[4].to_i
11
- res.should == y[4].to_i
12
- end
13
- end
14
- end
15
- end
16
-
17
4
  describe 'Atomizer' do
18
5
  before(:all) do
19
6
  @parser = Taxamatch::Atomizer.new
@@ -54,12 +41,11 @@ describe 'Taxamatch::Base' do
54
41
  end
55
42
 
56
43
  it 'should get txt tests' do
57
- dl = Taxamatch::DamerauLevenshteinMod.new
58
44
  read_test_file(File.expand_path(File.dirname(__FILE__)) + '/taxamatch_test.txt', 4) do |y|
59
45
  if y
60
46
  y[2] = y[2] == 'true' ? true : false
61
47
  res = @tm.taxamatch(y[0], y[1], false)
62
- puts "%s, %s, %s, %s" % [y[0], y[1], y[2], y[3]]
48
+ # puts "%s, %s, %s, %s" % [y[0], y[1], y[2], y[3]]
63
49
  res['match'].should == y[2]
64
50
  res['edit_distance'].should == y[3].to_i
65
51
  end
data/taxamatch_rb.gemspec CHANGED
@@ -5,14 +5,13 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "taxamatch_rb"
8
- s.version = "0.8.3"
8
+ s.version = "0.8.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Dmitry Mozzherin"]
12
- s.date = "2012-02-03"
12
+ s.date = "2012-02-13"
13
13
  s.description = "This gem implements algorithm for fuzzy matching scientific names developed by Tony Rees"
14
14
  s.email = "dmozzherin@eol.org"
15
- s.extensions = ["ext/damerau_levenshtein/extconf.rb"]
16
15
  s.extra_rdoc_files = [
17
16
  "LICENSE",
18
17
  "README.rdoc"
@@ -25,14 +24,11 @@ Gem::Specification.new do |s|
25
24
  "README.rdoc",
26
25
  "Rakefile",
27
26
  "VERSION",
28
- "ext/damerau_levenshtein/damerau_levenshtein.c",
29
27
  "lib/taxamatch_rb.rb",
30
28
  "lib/taxamatch_rb/atomizer.rb",
31
29
  "lib/taxamatch_rb/authmatch.rb",
32
- "lib/taxamatch_rb/damerau_levenshtein_mod.rb",
33
30
  "lib/taxamatch_rb/normalizer.rb",
34
31
  "lib/taxamatch_rb/phonetizer.rb",
35
- "spec/damerau_levenshtein_mod_test.txt",
36
32
  "spec/spec.opts",
37
33
  "spec/spec_helper.rb",
38
34
  "spec/taxamatch_rb_spec.rb",
@@ -49,6 +45,7 @@ Gem::Specification.new do |s|
49
45
 
50
46
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
51
47
  s.add_runtime_dependency(%q<biodiversity19>, [">= 1.0.10"])
48
+ s.add_runtime_dependency(%q<damerau-levenshtein>, [">= 0.5.4"])
52
49
  s.add_development_dependency(%q<rake-compiler>, [">= 0"])
53
50
  s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
54
51
  s.add_development_dependency(%q<cucumber>, [">= 0"])
@@ -61,6 +58,7 @@ Gem::Specification.new do |s|
61
58
  s.add_development_dependency(%q<mocha>, [">= 0"])
62
59
  else
63
60
  s.add_dependency(%q<biodiversity19>, [">= 1.0.10"])
61
+ s.add_dependency(%q<damerau-levenshtein>, [">= 0.5.4"])
64
62
  s.add_dependency(%q<rake-compiler>, [">= 0"])
65
63
  s.add_dependency(%q<rspec>, ["~> 2.3.0"])
66
64
  s.add_dependency(%q<cucumber>, [">= 0"])
@@ -74,6 +72,7 @@ Gem::Specification.new do |s|
74
72
  end
75
73
  else
76
74
  s.add_dependency(%q<biodiversity19>, [">= 1.0.10"])
75
+ s.add_dependency(%q<damerau-levenshtein>, [">= 0.5.4"])
77
76
  s.add_dependency(%q<rake-compiler>, [">= 0"])
78
77
  s.add_dependency(%q<rspec>, ["~> 2.3.0"])
79
78
  s.add_dependency(%q<cucumber>, [">= 0"])
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: taxamatch_rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.3
4
+ version: 0.8.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-03 00:00:00.000000000Z
12
+ date: 2012-02-13 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: biodiversity19
16
- requirement: &70185570744000 !ruby/object:Gem::Requirement
16
+ requirement: &70328583642780 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,21 @@ dependencies:
21
21
  version: 1.0.10
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70185570744000
24
+ version_requirements: *70328583642780
25
+ - !ruby/object:Gem::Dependency
26
+ name: damerau-levenshtein
27
+ requirement: &70328583642180 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: 0.5.4
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70328583642180
25
36
  - !ruby/object:Gem::Dependency
26
37
  name: rake-compiler
27
- requirement: &70185570743400 !ruby/object:Gem::Requirement
38
+ requirement: &70328583629080 !ruby/object:Gem::Requirement
28
39
  none: false
29
40
  requirements:
30
41
  - - ! '>='
@@ -32,10 +43,10 @@ dependencies:
32
43
  version: '0'
33
44
  type: :development
34
45
  prerelease: false
35
- version_requirements: *70185570743400
46
+ version_requirements: *70328583629080
36
47
  - !ruby/object:Gem::Dependency
37
48
  name: rspec
38
- requirement: &70185570742800 !ruby/object:Gem::Requirement
49
+ requirement: &70328583628480 !ruby/object:Gem::Requirement
39
50
  none: false
40
51
  requirements:
41
52
  - - ~>
@@ -43,10 +54,10 @@ dependencies:
43
54
  version: 2.3.0
44
55
  type: :development
45
56
  prerelease: false
46
- version_requirements: *70185570742800
57
+ version_requirements: *70328583628480
47
58
  - !ruby/object:Gem::Dependency
48
59
  name: cucumber
49
- requirement: &70185570742200 !ruby/object:Gem::Requirement
60
+ requirement: &70328583627880 !ruby/object:Gem::Requirement
50
61
  none: false
51
62
  requirements:
52
63
  - - ! '>='
@@ -54,10 +65,10 @@ dependencies:
54
65
  version: '0'
55
66
  type: :development
56
67
  prerelease: false
57
- version_requirements: *70185570742200
68
+ version_requirements: *70328583627880
58
69
  - !ruby/object:Gem::Dependency
59
70
  name: bundler
60
- requirement: &70185570739600 !ruby/object:Gem::Requirement
71
+ requirement: &70328583627280 !ruby/object:Gem::Requirement
61
72
  none: false
62
73
  requirements:
63
74
  - - ~>
@@ -65,10 +76,10 @@ dependencies:
65
76
  version: 1.0.0
66
77
  type: :development
67
78
  prerelease: false
68
- version_requirements: *70185570739600
79
+ version_requirements: *70328583627280
69
80
  - !ruby/object:Gem::Dependency
70
81
  name: jeweler
71
- requirement: &70185570739080 !ruby/object:Gem::Requirement
82
+ requirement: &70328583626700 !ruby/object:Gem::Requirement
72
83
  none: false
73
84
  requirements:
74
85
  - - ~>
@@ -76,10 +87,10 @@ dependencies:
76
87
  version: 1.6.0
77
88
  type: :development
78
89
  prerelease: false
79
- version_requirements: *70185570739080
90
+ version_requirements: *70328583626700
80
91
  - !ruby/object:Gem::Dependency
81
92
  name: rcov
82
- requirement: &70185570738600 !ruby/object:Gem::Requirement
93
+ requirement: &70328583626100 !ruby/object:Gem::Requirement
83
94
  none: false
84
95
  requirements:
85
96
  - - ! '>='
@@ -87,10 +98,10 @@ dependencies:
87
98
  version: '0'
88
99
  type: :development
89
100
  prerelease: false
90
- version_requirements: *70185570738600
101
+ version_requirements: *70328583626100
91
102
  - !ruby/object:Gem::Dependency
92
103
  name: ruby-debug19
93
- requirement: &70185570738080 !ruby/object:Gem::Requirement
104
+ requirement: &70328583625500 !ruby/object:Gem::Requirement
94
105
  none: false
95
106
  requirements:
96
107
  - - ! '>='
@@ -98,10 +109,10 @@ dependencies:
98
109
  version: '0'
99
110
  type: :development
100
111
  prerelease: false
101
- version_requirements: *70185570738080
112
+ version_requirements: *70328583625500
102
113
  - !ruby/object:Gem::Dependency
103
114
  name: ruby-prof
104
- requirement: &70185570737580 !ruby/object:Gem::Requirement
115
+ requirement: &70328583624960 !ruby/object:Gem::Requirement
105
116
  none: false
106
117
  requirements:
107
118
  - - ! '>='
@@ -109,10 +120,10 @@ dependencies:
109
120
  version: '0'
110
121
  type: :development
111
122
  prerelease: false
112
- version_requirements: *70185570737580
123
+ version_requirements: *70328583624960
113
124
  - !ruby/object:Gem::Dependency
114
125
  name: shoulda
115
- requirement: &70185570737100 !ruby/object:Gem::Requirement
126
+ requirement: &70328583624380 !ruby/object:Gem::Requirement
116
127
  none: false
117
128
  requirements:
118
129
  - - ! '>='
@@ -120,10 +131,10 @@ dependencies:
120
131
  version: '0'
121
132
  type: :development
122
133
  prerelease: false
123
- version_requirements: *70185570737100
134
+ version_requirements: *70328583624380
124
135
  - !ruby/object:Gem::Dependency
125
136
  name: mocha
126
- requirement: &70185570736600 !ruby/object:Gem::Requirement
137
+ requirement: &70328583623720 !ruby/object:Gem::Requirement
127
138
  none: false
128
139
  requirements:
129
140
  - - ! '>='
@@ -131,13 +142,12 @@ dependencies:
131
142
  version: '0'
132
143
  type: :development
133
144
  prerelease: false
134
- version_requirements: *70185570736600
145
+ version_requirements: *70328583623720
135
146
  description: This gem implements algorithm for fuzzy matching scientific names developed
136
147
  by Tony Rees
137
148
  email: dmozzherin@eol.org
138
149
  executables: []
139
- extensions:
140
- - ext/damerau_levenshtein/extconf.rb
150
+ extensions: []
141
151
  extra_rdoc_files:
142
152
  - LICENSE
143
153
  - README.rdoc
@@ -149,20 +159,16 @@ files:
149
159
  - README.rdoc
150
160
  - Rakefile
151
161
  - VERSION
152
- - ext/damerau_levenshtein/damerau_levenshtein.c
153
162
  - lib/taxamatch_rb.rb
154
163
  - lib/taxamatch_rb/atomizer.rb
155
164
  - lib/taxamatch_rb/authmatch.rb
156
- - lib/taxamatch_rb/damerau_levenshtein_mod.rb
157
165
  - lib/taxamatch_rb/normalizer.rb
158
166
  - lib/taxamatch_rb/phonetizer.rb
159
- - spec/damerau_levenshtein_mod_test.txt
160
167
  - spec/spec.opts
161
168
  - spec/spec_helper.rb
162
169
  - spec/taxamatch_rb_spec.rb
163
170
  - spec/taxamatch_test.txt
164
171
  - taxamatch_rb.gemspec
165
- - ext/damerau_levenshtein/extconf.rb
166
172
  homepage: http://github.com/GlobalNamesArchitecture/taxamatch_rb
167
173
  licenses: []
168
174
  post_install_message:
@@ -177,7 +183,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
177
183
  version: '0'
178
184
  segments:
179
185
  - 0
180
- hash: -4043039729385044436
186
+ hash: 1595435064862339145
181
187
  required_rubygems_version: !ruby/object:Gem::Requirement
182
188
  none: false
183
189
  requirements:
@@ -1,112 +0,0 @@
1
- #include "ruby.h"
2
-
3
- VALUE DamerauLevenshtein = Qnil;
4
-
5
- void Init_damerau_levenshtein();
6
-
7
- VALUE method_distance_utf(VALUE self, VALUE _s, VALUE _t, VALUE _block_size, VALUE _max_distance);
8
-
9
- void Init_damerau_levenshtein() {
10
- DamerauLevenshtein = rb_define_module("DamerauLevenshtein");
11
- rb_define_method(DamerauLevenshtein, "distance_utf", method_distance_utf, 4);
12
- }
13
-
14
- VALUE method_distance_utf(VALUE self, VALUE _s, VALUE _t, VALUE _block_size, VALUE _max_distance){
15
- int i, i1, j, j1, k, half_tl, cost, *d, distance, del, ins, subs, transp, block;
16
- int sl, tl, half_sl;
17
- int stop_execution = 0;
18
- int min = 0;
19
- int current_distance = 0;
20
-
21
- int block_size = NUM2INT(_block_size);
22
- int max_distance = NUM2INT(_max_distance);
23
-
24
- VALUE *sv = RARRAY_PTR(_s);
25
- VALUE *tv = RARRAY_PTR(_t);
26
-
27
- sl = (int) RARRAY_LEN(_s);
28
- tl = (int) RARRAY_LEN(_t);
29
-
30
- if (sl == 0) return INT2NUM(tl);
31
- if (tl == 0) return INT2NUM(sl);
32
- //case of lengths 1 must present or it will break further in the code
33
- if (sl == 1 && tl == 1 && sv[0] != tv[0]) return INT2NUM(1);
34
-
35
- int s[sl];
36
- int t[tl];
37
-
38
- for (i=0; i < sl; i++) s[i] = NUM2INT(sv[i]);
39
- for (i=0; i < tl; i++) t[i] = NUM2INT(tv[i]);
40
-
41
- sl++;
42
- tl++;
43
-
44
- //one-dimentional representation of 2 dimentional array len(s)+1 * len(t)+1
45
- d = malloc((sizeof(int))*(sl)*(tl));
46
- //populate 'vertical' row starting from the 2nd position (first one is filled already)
47
- for(i = 0; i < tl; i++){
48
- d[i*sl] = i;
49
- }
50
-
51
- //fill up array with scores
52
- for(i = 1; i<sl; i++){
53
- d[i] = i;
54
- if (stop_execution == 1) break;
55
- current_distance = 10000;
56
- for(j = 1; j<tl; j++){
57
-
58
- cost = 1;
59
- if(s[i-1] == t[j-1]) cost = 0;
60
-
61
- half_sl = (sl - 1)/2;
62
- half_tl = (tl - 1)/2;
63
-
64
- block = block_size < half_sl ? block_size : half_sl;
65
- block = block < half_tl ? block : half_tl;
66
-
67
- while (block >= 1){
68
- int swap1 = 1;
69
- int swap2 = 1;
70
- i1 = i - (block * 2);
71
- j1 = j - (block * 2);
72
- for (k = i1; k < i1 + block; k++) {
73
- if (s[k] != t[k + block]){
74
- swap1 = 0;
75
- break;
76
- }
77
- }
78
- for (k = j1; k < j1 + block; k++) {
79
- if (t[k] != s[k + block]){
80
- swap2 = 0;
81
- break;
82
- }
83
- }
84
-
85
- del = d[j*sl + i - 1] + 1;
86
- ins = d[(j-1)*sl + i] + 1;
87
- min = del;
88
- if (ins < min) min = ins;
89
- //if (i == 2 && j==2) return INT2NUM(swap2+5);
90
- if (i >= block && j >= block && swap1 == 1 && swap2 == 1){
91
- transp = d[(j - block * 2) * sl + i - block * 2] + cost + block -1;
92
- if (transp < min) min = transp;
93
- block = 0;
94
- } else if (block == 1) {
95
- subs = d[(j-1)*sl + i - 1] + cost;
96
- if (subs < min) min = subs;
97
- }
98
- block--;
99
- }
100
- d[j*sl+i]=min;
101
- if (current_distance > d[j*sl+i]) current_distance = d[j*sl+i];
102
- }
103
- if (current_distance > max_distance) {
104
- stop_execution = 1;
105
- }
106
- }
107
- distance=d[sl * tl - 1];
108
- if (stop_execution == 1) distance = current_distance;
109
-
110
- free(d);
111
- return INT2NUM(distance);
112
- }
@@ -1,11 +0,0 @@
1
- # Loads mkmf which is used to make makefiles for Ruby extensions
2
- require 'mkmf'
3
-
4
- # Give it a name
5
- extension_name = 'damerau_levenshtein'
6
-
7
- # The destination
8
- dir_config(extension_name)
9
-
10
- # Do the work
11
- create_makefile(extension_name)
@@ -1,42 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'damerau_levenshtein'
4
-
5
- module Taxamatch
6
-
7
- class DamerauLevenshteinMod
8
- include DamerauLevenshtein
9
-
10
- def distance(str1, str2, block_size=2, max_distance=10)
11
- distance_utf(str1.unpack("U*"), str2.unpack("U*"), block_size, max_distance)
12
- end
13
- end
14
-
15
- end
16
-
17
- if __FILE__ == $0
18
-
19
- a = Taxamatch::DamerauLevenshteinMod.new
20
- s = 'Cedarinia scabra Sjöstedt 1921'.unpack('U*')
21
- t = 'Cedarinia scabra Söjstedt 1921'.unpack('U*')
22
-
23
- #puts s.join(",")
24
- #puts t.join(",")
25
-
26
- start = Time.now
27
- (1..100000).each do
28
- a.distance('Cedarinia scabra Sjöstedt 1921', 'Cedarinia scabra Söjstedt 1921',1,10)
29
- end
30
- puts "with unpack time: " + (Time.now - start).to_s + ' sec'
31
-
32
- start = Time.now
33
- (1..100000).each do
34
- a.distance_utf(s, t, 1, 10)
35
- end
36
- puts 'utf time: ' + (Time.now - start).to_s + ' sec'
37
-
38
- #puts a.distance('Cedarinia scabra Sjöstedt 1921','Cedarinia scabra Söjstedt 1921')
39
- #puts a.distance_utf(s, t, 2, 10)
40
- #puts a.distance('tar','atp',1,10);
41
- puts a.distance('sub', 'usb', 1, 10);
42
- end
@@ -1,63 +0,0 @@
1
- ######################
2
- # Tests for modified Damerau Levenshtein Distance algorithm (UTF-8 compatible)
3
- #
4
- # * B. Boehmer, T. Rees, Modified Damerau-Levenshtein Distance, Boehmer & Rees 2008
5
- # * F.J. Damerau. A technique for computer detection and correction of spelling errors, Communications of the ACM, 1964
6
- #
7
- # Fields:
8
- # String1|String2|maximum distance|transposition block size|expected distance
9
- # - String1, String2
10
- # compared strings
11
- # - maximum distance
12
- # stops execution of the algorithm when calculated distance exceeds the maximum distance number
13
- # - transosition block size
14
- # determines how many characters can be transposed. Block size 1 returns score according to Damerau-Levenshtein algorithm
15
- # - expected distance
16
- # resulting distance that has to be achieved by the algorithm
17
- # Note: algorithm does not try to normalize or interpret strings in any way.
18
- ######################
19
-
20
- #it whould recognize the exact match
21
- Pomatomus|Pomatomus|10|1|0
22
-
23
- #it should not try to normalize incoming strings
24
- Pomatomus|Pomatomus|10|1|1
25
- Pomatomus|pomatomus|10|1|1
26
-
27
- #it should calculate special cases
28
- Pomatomus||10|1|9
29
- |Pomatomus|10|1|9
30
- P|p|10|1|1
31
- #TODO: one letter vs longer string generates a big negative number
32
- #L|Linneaus|10|1|7
33
-
34
-
35
- #it should calculate Damerau Levenshtein distance with 1 character transpositions, insertions, deletions, substitutions (block size 1)
36
- Pomatomus|Pomatomux|10|1|1
37
- Pmatomus|Pomatomus|10|1|1
38
- Pomatomus|Pmatomus|10|1|1
39
- Rpmatomus|Pomatomus|10|1|2
40
- Pommtomus|Pomatomus|10|1|1
41
- Potamomus|Pomatomus|10|1|2
42
- Cedarinia scabra Sjöstedt 1921|Cedarinia scabra Sjostedt 1921|10|1|1
43
- Pomatomus|oPmatomus|10|1|1
44
- Pomatomus|Pomatomsu|10|1|1
45
- Pomtaomus|Pomatomus|10|1|1
46
- Pomatoums|Pomatomus|10|1|1
47
- Potamomus|Pomatomus|10|1|2
48
- Cedarinia scabra Sjöstedt 1921|Cedarinia scabra Söjstedt 1921|10|2|1
49
-
50
- #it should calculate Modified Damerau Levenshtein distance with 2 or more characters transposition (block size > 2)
51
- serrulatus|serratulus|10|2|2
52
- Pomatomus|Poomumats|10|3|3
53
- vesiculosus|vecusilosus|10|1|4
54
- vesiculosus|vecusilosus|10|2|2
55
- trimerophyton|mertriophyton|10|1|6
56
- trimerophyton|mertriophyton|10|3|3
57
-
58
- #it should stop trying if distance exceeds maximum allowed distance
59
- Pxxxxomus|Pomatomus|10|1|4
60
- Pxxxxomus|Pomatomus|2|1|3
61
-
62
- #
63
- PUNCTATA|PUNCTATA|10|1|0