bk 0.0.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,8 +1,2 @@
1
- # A sample Gemfile
2
1
  source "http://rubygems.org"
3
-
4
- gem "text"
5
-
6
- group :test do
7
- gem "test-unit"
8
- end
2
+ gemspec
data/README.md CHANGED
@@ -1,57 +1,78 @@
1
1
  # BK-Tree implementation in Ruby
2
2
 
3
- If you don’t know what a BK-tree is, these links should provide a good explanation and introduction.
3
+ BK-trees can be used to efficiently locate strings' best matches from within a
4
+ large set. If you don’t know what a BK-tree is, these links should provide a
5
+ good explanation and introduction.
4
6
 
5
7
  * [Damn Cool Algorithms, Part 1: BK-Trees](http://blog.notdot.net/2007/4/Damn-Cool-Algorithms-Part-1-BK-Trees)
6
8
  * [Fast Approximate String Matching in a Dictionary](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.21.3317)
7
9
 
10
+
11
+ ## Installation
12
+
13
+ BK is available as a Ruby gem:
14
+
15
+ gem install bk
16
+
8
17
  ## Usage
9
18
 
10
- require "bk"
11
- tree = BK::Tree.new # Use the default Levenshtein distance algorithm
19
+ ```ruby
20
+ require "bk"
21
+ tree = BK::Tree.new # Use the default Levenshtein distance algorithm
22
+ ```
12
23
 
13
24
  Add items to the tree:
14
25
 
15
- tree.add "cat"
16
- tree.add "dog"
17
- tree.add "monkey"
18
- tree.add "donkey"
26
+ ```ruby
27
+ tree.add "cat"
28
+ tree.add "dog"
29
+ tree.add "monkey"
30
+ tree.add "donkey"
31
+ ```
19
32
 
20
33
  Find all items within distance 1 of ‘munkey’:
21
34
 
22
- tree.query("munkey", 1)
23
- # => {"monkey"=>1}
35
+ ```ruby
36
+ tree.query("munkey", 1)
37
+ # => {"monkey"=>1}
38
+ ```
24
39
 
25
40
  Find all items within distance 2 of ‘munkey’:
26
41
 
27
- tree.query("munkey", 2)
28
- # => {"donkey"=>2, "monkey"=>1}
42
+ ```ruby
43
+ tree.query("munkey", 2)
44
+ # => {"donkey"=>2, "monkey"=>1}
45
+ ```
29
46
 
30
47
  You can specify a custom distance algorithm by passing an object that responds
31
48
  to `call(a, b)` with a number:
32
49
 
33
- custom_algorithm = lambda{ |a, b|
34
- Text::Levenshtein.distance(a, b)
35
- }
50
+ ```ruby
51
+ custom_algorithm = lambda{ |a, b|
52
+ Text::Levenshtein.distance(a, b)
53
+ }
36
54
 
37
- tree = BK::Tree.new(custom_algorithm)
55
+ # or, more tersely:
56
+
57
+ custom_algorithm = Text::Levenshtein.public_method(:distance)
58
+
59
+ tree = BK::Tree.new(custom_algorithm)
60
+ ```
38
61
 
39
62
  Note that the result *must* satisfy the
40
63
  _triangle inequality_, i.e. _d(x,z) ≤ d(x,y) + d(y,z)_.
41
64
 
42
65
  The precomputed tree can be exported to and reimported later from an IO-like object:
43
66
 
44
- File.open("tree", "wb") do |f|
45
- tree.export(f)
46
- end
47
-
48
- File.open("tree", "rb") do |f|
49
- tree = BK::Tree.import(f)
50
- end
67
+ ```ruby
68
+ File.open("tree", "wb") do |f|
69
+ tree.export(f)
70
+ end
51
71
 
52
- ## Dependencies
53
-
54
- * [text](http://rubygems.org/gems/text) version 0.2.0 or newer.
72
+ File.open("tree", "rb") do |f|
73
+ tree = BK::Tree.import(f)
74
+ end
75
+ ```
55
76
 
56
77
  ## Performance
57
78
 
@@ -75,3 +96,15 @@ As the threshold increases, the benefit is reduced. At threshold 3:
75
96
 
76
97
  * Memory usage: around 6 MB for a 20,000-word tree.
77
98
  * Maximum tree depth is limited by the stack.
99
+
100
+ ## Testing
101
+
102
+ rake test
103
+
104
+ ...or, for specific tests:
105
+
106
+ ruby -Itest test/test_building_tree.rb
107
+
108
+ ## Licensing
109
+
110
+ MIT (see COPYING.txt)
@@ -1,3 +1,3 @@
1
1
  module BK
2
- VERSION = '0.0.1'
2
+ VERSION = '1.0.0'
3
3
  end
@@ -0,0 +1,4 @@
1
+ lib = File.expand_path("../../lib", __FILE__)
2
+ $:.unshift lib unless $:.include?(lib)
3
+
4
+ require "test/unit"
@@ -1,5 +1,4 @@
1
- $:.unshift( File.join( File.dirname(__FILE__), '..', 'lib' ))
2
- require 'test/unit'
1
+ require 'common'
3
2
  require 'bk'
4
3
  require 'bk/dump'
5
4
 
@@ -1,5 +1,4 @@
1
- $:.unshift( File.join( File.dirname(__FILE__), '..', 'lib' ))
2
- require 'test/unit'
1
+ require 'common'
3
2
  require 'bk'
4
3
  require 'stringio'
5
4
 
@@ -1,5 +1,4 @@
1
- $:.unshift( File.join( File.dirname(__FILE__), '..', 'lib' ))
2
- require 'test/unit'
1
+ require 'common'
3
2
  require 'bk'
4
3
 
5
4
  class BKTreeQueryAccuracyTest < Test::Unit::TestCase
@@ -33,6 +32,7 @@ class BKTreeSearchSpaceTest < Test::Unit::TestCase
33
32
  def initialize
34
33
  @history = []
35
34
  @counting = false
35
+ @recording = false
36
36
  end
37
37
 
38
38
  def call(a, b)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.0.0
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-06-13 00:00:00.000000000Z
12
+ date: 2012-07-04 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: text
16
- requirement: &70195843345880 !ruby/object:Gem::Requirement
16
+ requirement: &2152922040 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70195843345880
24
+ version_requirements: *2152922040
25
25
  - !ruby/object:Gem::Dependency
26
- name: test-unit
27
- requirement: &70195843345460 !ruby/object:Gem::Requirement
26
+ name: rake
27
+ requirement: &2152921620 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70195843345460
35
+ version_requirements: *2152921620
36
36
  description: Burkhard Keller Tree implementation in Ruby
37
37
  email: pbattley@gmail.com
38
38
  executables: []
@@ -47,7 +47,7 @@ files:
47
47
  - lib/bk.rb
48
48
  - samples/graph.rb
49
49
  - samples/performance.rb
50
- - test/test_all.rb
50
+ - test/common.rb
51
51
  - test/test_building_tree.rb
52
52
  - test/test_import_and_export.rb
53
53
  - test/test_querying_tree.rb
@@ -76,7 +76,7 @@ signing_key:
76
76
  specification_version: 3
77
77
  summary: Burkhard Keller Tree implementation in Ruby
78
78
  test_files:
79
- - test/test_all.rb
79
+ - test/common.rb
80
80
  - test/test_building_tree.rb
81
81
  - test/test_import_and_export.rb
82
82
  - test/test_querying_tree.rb
@@ -1,3 +0,0 @@
1
- Dir[ File.join( File.dirname(__FILE__), '*.rb' )].each do |f|
2
- require f
3
- end