edits 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rspec +0 -1
- data/.rubocop.yml +4 -1
- data/.travis.yml +13 -10
- data/README.md +7 -2
- data/edits.gemspec +3 -2
- data/lib/edits/damerau_levenshtein.rb +3 -3
- data/lib/edits/jaro.rb +2 -2
- data/lib/edits/levenshtein.rb +5 -5
- data/lib/edits/restricted_edit.rb +9 -9
- data/lib/edits/version.rb +1 -1
- metadata +30 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1c829d27a322f8c9b3ad50437a3b66d2548ccfc40d435ebaee4c362b22802fb8
|
4
|
+
data.tar.gz: dd351b715125154bd7f9b37b98fd1f75aea504163fe550795c0615af1fea9b65
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8d5b3cd301621b913768f63c50f4876a340f620c22c2fbe68d1659bd1566141f6a737264dfb3da15f0b7a7e1a567a1036dcd978cd9c2001210f843a1e5da8f93
|
7
|
+
data.tar.gz: 821c4cd4acf9e2b9e25c21ce2f61a4f489838c4252fd6c4e0fd323fe9b5f3baaa1948e3ab87b0c1448830e39c9ff2362aa457e4fe9ce902994545dd8c986137e
|
data/.rspec
CHANGED
data/.rubocop.yml
CHANGED
@@ -10,11 +10,14 @@ Metrics/PerceivedComplexity:
|
|
10
10
|
Enabled: false
|
11
11
|
Metrics/BlockLength:
|
12
12
|
Exclude:
|
13
|
+
- edits.gemspec
|
13
14
|
- "tasks/**/*.rake"
|
14
15
|
|
16
|
+
Style/NumericPredicate:
|
17
|
+
Enabled: false
|
15
18
|
Style/StringLiterals:
|
16
19
|
EnforcedStyle: double_quotes
|
17
|
-
Layout/
|
20
|
+
Layout/ParameterAlignment:
|
18
21
|
EnforcedStyle: with_fixed_indentation
|
19
22
|
Layout/MultilineMethodCallIndentation:
|
20
23
|
EnforcedStyle: indented
|
data/.travis.yml
CHANGED
@@ -1,26 +1,29 @@
|
|
1
|
-
|
1
|
+
os: linux
|
2
2
|
language: ruby
|
3
3
|
cache: bundler
|
4
4
|
rvm:
|
5
|
-
- 2.3
|
6
5
|
- 2.4
|
7
|
-
- 2.5
|
8
|
-
- 2.6
|
6
|
+
- 2.5
|
7
|
+
- 2.6.5
|
8
|
+
- 2.7
|
9
9
|
- ruby-head
|
10
10
|
- rbx-3
|
11
|
-
matrix:
|
12
|
-
allow_failures:
|
13
|
-
- rvm: ruby-head
|
14
|
-
- rvm: rbx-3
|
15
|
-
fast_finish: true
|
16
11
|
before_install:
|
17
12
|
- gem update --system
|
18
13
|
- gem install bundler
|
14
|
+
- sudo apt-get install jq
|
15
|
+
- curl -LSs "$(curl -LSs https://api.github.com/repos/codacy/codacy-coverage-reporter/releases/latest | jq -r '.assets | map({name, browser_download_url} | select(.name | endswith(".jar"))) | .[0].browser_download_url')" -o codacy-coverage-reporter-assembly.jar
|
16
|
+
after_success:
|
17
|
+
- java -jar codacy-coverage-reporter-assembly.jar report -l Ruby -r coverage/lcov/edits.lcov
|
19
18
|
jobs:
|
19
|
+
allow_failures:
|
20
|
+
- rvm: ruby-head
|
21
|
+
- rvm: rbx-3
|
22
|
+
fast_finish: true
|
20
23
|
include:
|
21
24
|
- stage: gem release
|
22
25
|
if: tag IS present
|
23
|
-
rvm: 2.5
|
26
|
+
rvm: 2.6.5
|
24
27
|
script: echo "Deploying to rubygems.org ..."
|
25
28
|
deploy:
|
26
29
|
provider: rubygems
|
data/README.md
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# Edits
|
2
2
|
|
3
|
+
[](https://rubygems.org/gems/edits)
|
3
4
|
[](https://travis-ci.org/tcrouch/edits)
|
4
5
|
[](https://app.codacy.com/app/t.crouch/edits?utm_source=github.com&utm_medium=referral&utm_content=tcrouch/edits&utm_campaign=Badge_Grade_Dashboard)
|
5
6
|
[](http://inch-ci.org/github/tcrouch/edits)
|
@@ -19,11 +20,15 @@ gem 'edits'
|
|
19
20
|
|
20
21
|
And then execute:
|
21
22
|
|
22
|
-
|
23
|
+
```console
|
24
|
+
$ bundle
|
25
|
+
```
|
23
26
|
|
24
27
|
Or install it yourself as:
|
25
28
|
|
26
|
-
|
29
|
+
```console
|
30
|
+
$ gem install edits
|
31
|
+
```
|
27
32
|
|
28
33
|
## Usage
|
29
34
|
|
data/edits.gemspec
CHANGED
@@ -28,9 +28,10 @@ Gem::Specification.new do |spec|
|
|
28
28
|
|
29
29
|
spec.add_development_dependency "benchmark-ips", "~> 2.7"
|
30
30
|
spec.add_development_dependency "bundler", "~> 2.0"
|
31
|
-
spec.add_development_dependency "
|
32
|
-
spec.add_development_dependency "rake", "~> 12.1"
|
31
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
33
32
|
spec.add_development_dependency "redcarpet", "~> 3.4"
|
34
33
|
spec.add_development_dependency "rspec", "~> 3.6"
|
34
|
+
spec.add_development_dependency "simplecov", "~> 0.18"
|
35
|
+
spec.add_development_dependency "simplecov-lcov", "~> 0.8"
|
35
36
|
spec.add_development_dependency "yard", "~> 0.9"
|
36
37
|
end
|
@@ -26,8 +26,8 @@ module Edits
|
|
26
26
|
|
27
27
|
rows = seq1.length
|
28
28
|
cols = seq2.length
|
29
|
-
return cols if rows
|
30
|
-
return rows if cols
|
29
|
+
return cols if rows == 0
|
30
|
+
return rows if cols == 0
|
31
31
|
|
32
32
|
# 'infinite' edit distance for padding cost matrix.
|
33
33
|
# Can be any value > max[rows, cols]
|
@@ -78,7 +78,7 @@ module Edits
|
|
78
78
|
|
79
79
|
matrix[row + 1][col + 1] = cost
|
80
80
|
|
81
|
-
last_match_col = col if sub_cost
|
81
|
+
last_match_col = col if sub_cost == 0
|
82
82
|
end
|
83
83
|
|
84
84
|
item_history[seq1_item] = row
|
data/lib/edits/jaro.rb
CHANGED
@@ -25,7 +25,7 @@ module Edits
|
|
25
25
|
seq2 = seq2.codepoints if seq2.is_a? String
|
26
26
|
|
27
27
|
m, t = jaro_matches(seq1, seq2)
|
28
|
-
return 0.0 if m
|
28
|
+
return 0.0 if m == 0
|
29
29
|
|
30
30
|
m = m.to_f
|
31
31
|
((m / seq1.length) + (m / seq2.length) + ((m - t) / m)) / 3
|
@@ -78,7 +78,7 @@ module Edits
|
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
81
|
-
return [0, 0] if matches
|
81
|
+
return [0, 0] if matches == 0
|
82
82
|
|
83
83
|
transposes = 0
|
84
84
|
j = 0
|
data/lib/edits/levenshtein.rb
CHANGED
@@ -30,8 +30,8 @@ module Edits
|
|
30
30
|
|
31
31
|
rows = seq1.length
|
32
32
|
cols = seq2.length
|
33
|
-
return cols if rows
|
34
|
-
return rows if cols
|
33
|
+
return cols if rows == 0
|
34
|
+
return rows if cols == 0
|
35
35
|
|
36
36
|
# Initialize first row of cost matrix.
|
37
37
|
# The full initial state where cols=3, rows=2 would be:
|
@@ -82,8 +82,8 @@ module Edits
|
|
82
82
|
|
83
83
|
rows = seq1.length
|
84
84
|
cols = seq2.length
|
85
|
-
return cols > max ? max : cols if rows
|
86
|
-
return rows > max ? max : rows if cols
|
85
|
+
return cols > max ? max : cols if rows == 0
|
86
|
+
return rows > max ? max : rows if cols == 0
|
87
87
|
return max if (cols - rows) >= max
|
88
88
|
|
89
89
|
# array of codepoints outperforms String
|
@@ -103,7 +103,7 @@ module Edits
|
|
103
103
|
max_col = row + max
|
104
104
|
max_col = cols - 1 if max_col > cols - 1
|
105
105
|
|
106
|
-
prev_col_cost = min_col
|
106
|
+
prev_col_cost = min_col == 0 ? row + 1 : inf
|
107
107
|
seq1_item = seq1[row]
|
108
108
|
diagonal = cols - rows + row
|
109
109
|
|
@@ -34,8 +34,8 @@ module Edits
|
|
34
34
|
|
35
35
|
rows = seq1.length
|
36
36
|
cols = seq2.length
|
37
|
-
return cols if rows
|
38
|
-
return rows if cols
|
37
|
+
return cols if rows == 0
|
38
|
+
return rows if cols == 0
|
39
39
|
|
40
40
|
# retain previous two rows of cost matrix
|
41
41
|
lastlast_row = []
|
@@ -57,8 +57,8 @@ module Edits
|
|
57
57
|
|
58
58
|
cols.times do |col|
|
59
59
|
sub_cost = seq1_item == seq2[col] ? 0 : 1
|
60
|
-
is_swap = sub_cost
|
61
|
-
row
|
60
|
+
is_swap = sub_cost > 0 &&
|
61
|
+
row > 0 && col > 0 &&
|
62
62
|
seq1_item == seq2[col - 1] &&
|
63
63
|
seq1[row - 1] == seq2[col]
|
64
64
|
|
@@ -102,8 +102,8 @@ module Edits
|
|
102
102
|
|
103
103
|
rows = seq1.length
|
104
104
|
cols = seq2.length
|
105
|
-
return cols > max ? max : cols if rows
|
106
|
-
return rows > max ? max : rows if cols
|
105
|
+
return cols > max ? max : cols if rows == 0
|
106
|
+
return rows > max ? max : rows if cols == 0
|
107
107
|
return max if (cols - rows) >= max
|
108
108
|
|
109
109
|
# array of codepoints outperforms String
|
@@ -129,7 +129,7 @@ module Edits
|
|
129
129
|
max_col = row + max
|
130
130
|
max_col = cols - 1 if max_col > cols - 1
|
131
131
|
|
132
|
-
curr_row[min_col] = min_col
|
132
|
+
curr_row[min_col] = min_col == 0 ? row + 1 : inf
|
133
133
|
seq1_item = seq1[row]
|
134
134
|
diagonal = cols - rows + row
|
135
135
|
|
@@ -137,8 +137,8 @@ module Edits
|
|
137
137
|
return max if diagonal == col && last_row[col] >= max
|
138
138
|
|
139
139
|
sub_cost = seq1_item == seq2[col] ? 0 : 1
|
140
|
-
is_swap = sub_cost
|
141
|
-
row
|
140
|
+
is_swap = sub_cost > 0 &&
|
141
|
+
row > 0 && col > 0 &&
|
142
142
|
seq1_item == seq2[col - 1] &&
|
143
143
|
seq1[row - 1] == seq2[col]
|
144
144
|
|
data/lib/edits/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: edits
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom Crouch
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-05-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: benchmark-ips
|
@@ -39,61 +39,75 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '2.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '13.0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '13.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: redcarpet
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '3.4'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '3.4'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: rspec
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '3.
|
75
|
+
version: '3.6'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '3.
|
82
|
+
version: '3.6'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: simplecov
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '0.18'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '0.18'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: simplecov-lcov
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.8'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.8'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: yard
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -160,7 +174,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
160
174
|
- !ruby/object:Gem::Version
|
161
175
|
version: '0'
|
162
176
|
requirements: []
|
163
|
-
|
177
|
+
rubyforge_project:
|
178
|
+
rubygems_version: 2.7.7
|
164
179
|
signing_key:
|
165
180
|
specification_version: 4
|
166
181
|
summary: A collection of edit distance algorithms.
|