levenshtein-distance 0.1

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.
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ *.gem
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,17 @@
1
+ # levenshtein-distance
2
+
3
+ ruby implementation of levenshtein distance ( http://en.wikipedia.org/wiki/Levenshtein_distance )
4
+
5
+ ### Examples
6
+
7
+ distance = "kitten".levenshtein_distance("sitting")
8
+ distance = "saturday".levenshtein_distance("sunday")
9
+ distance = "rosettacode".levenshtein_distance("raisethysword")
10
+
11
+ ### Install
12
+
13
+ gem install levenshtein-distance
14
+
15
+ ### Author
16
+
17
+ * Akira Hirakawa (http://www.akirahrkw.com)
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
@@ -0,0 +1,15 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |gem|
4
+ gem.authors = ["Akira Hirakawa"]
5
+ gem.email = ["akirahrkw@gmail.com"]
6
+ gem.summary = %q{ruby implementation of levenshtein distance}
7
+ gem.description = %q{ruby implementation of levenshtein distance (https://github.com/akirahrkw/levenshtein-distance) }
8
+ gem.homepage = "http://www.akirahrkw.com"
9
+ gem.files = `git ls-files`.split($\)
10
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
11
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
12
+ gem.name = "levenshtein-distance"
13
+ gem.require_paths = ["lib"]
14
+ gem.version = "0.1"
15
+ end
@@ -0,0 +1,28 @@
1
+ # http://en.wikipedia.org/wiki/Levenshtein_distance
2
+ class String
3
+
4
+ def ld(b)
5
+ levenshtein_distance(b)
6
+ end
7
+
8
+ def levenshtein_distance(b)
9
+ a = self
10
+ a_len = a.length
11
+ b_len = b.length
12
+ d = Array.new(a_len + 1).map! {
13
+ Array.new(b_len + 1).map!{
14
+ 0
15
+ }
16
+ }
17
+ (a_len + 1).times { |i| d[i][0] = i }
18
+ (b_len + 1).times { |i| d[0][i] = i }
19
+
20
+ for i in 1..(a_len)
21
+ for j in 1..(b_len)
22
+ cost = (a[i - 1] == b[j - 1]) ? 0 : 1
23
+ d[i][j] = [ d[i-1][j] + 1 , d[i][j-1] + 1 ,d[i-1][j-1] + cost].min
24
+ end
25
+ end
26
+ d[-1][-1]
27
+ end
28
+ end
@@ -0,0 +1,39 @@
1
+ $LEVENSHTEIN_LIB = File.join(File.dirname(__FILE__), '..', 'lib')
2
+ $LOAD_PATH << $LEVENSHTEIN_LIB
3
+ require 'test/unit'
4
+ require 'edit_distance'
5
+
6
+ class TestLevenshteinDistance < Test::Unit::TestCase
7
+
8
+ def test_ld
9
+ distance = "a".ld("a")
10
+ assert_equal distance, 0
11
+ end
12
+
13
+ def test_levenshtein_distance
14
+
15
+ distance = "a".levenshtein_distance("a")
16
+ assert_equal distance, 0
17
+
18
+ distance = "abc".levenshtein_distance("abc")
19
+ assert_equal distance, 0
20
+
21
+ distance = "abc".levenshtein_distance("abb")
22
+ assert_equal distance, 1
23
+
24
+ distance = "abc".levenshtein_distance("abcccc")
25
+ assert_equal distance, 3
26
+
27
+ distance = "akirahrkw".levenshtein_distance("hirakawa")
28
+ assert_equal distance, 6
29
+
30
+ distance = "kitten".levenshtein_distance("sitting")
31
+ assert_equal distance, 3
32
+
33
+ distance = "saturday".levenshtein_distance("sunday")
34
+ assert_equal distance, 3
35
+
36
+ distance = "rosettacode".levenshtein_distance("raisethysword")
37
+ assert_equal distance, 8
38
+ end
39
+ end
metadata ADDED
@@ -0,0 +1,53 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: levenshtein-distance
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Akira Hirakawa
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-06-29 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: ! 'ruby implementation of levenshtein distance (https://github.com/akirahrkw/levenshtein-distance) '
15
+ email:
16
+ - akirahrkw@gmail.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - .gitignore
22
+ - Gemfile
23
+ - README.md
24
+ - Rakefile
25
+ - levenshtein-distance.gemspec
26
+ - lib/edit_distance.rb
27
+ - test/test_levenshtein_distance.rb
28
+ homepage: http://www.akirahrkw.com
29
+ licenses: []
30
+ post_install_message:
31
+ rdoc_options: []
32
+ require_paths:
33
+ - lib
34
+ required_ruby_version: !ruby/object:Gem::Requirement
35
+ none: false
36
+ requirements:
37
+ - - ! '>='
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ required_rubygems_version: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ requirements: []
47
+ rubyforge_project:
48
+ rubygems_version: 1.8.24
49
+ signing_key:
50
+ specification_version: 3
51
+ summary: ruby implementation of levenshtein distance
52
+ test_files:
53
+ - test/test_levenshtein_distance.rb