lsh 0.1.1-java → 0.1.2-java
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/lib/lsh/storage/redis_backend.rb +43 -15
- metadata +2 -2
@@ -28,16 +28,24 @@ module LSH
|
|
28
28
|
def initialize(params = { :redis => { :host => '127.0.0.1', :port => 6379 }, :data_dir => 'data' })
|
29
29
|
@redis = Redis.new(params[:redis])
|
30
30
|
@data_dir = params[:data_dir]
|
31
|
-
|
31
|
+
unless File.exists?(@data_dir)
|
32
|
+
Dir.mkdir(@data_dir)
|
33
|
+
Dir.mkdir(File.join(@data_dir, 'projections'))
|
34
|
+
end
|
32
35
|
end
|
33
36
|
|
34
37
|
def reset!
|
35
38
|
@redis.flushall
|
36
|
-
|
39
|
+
delete_dat_files_in_dir(@data_dir)
|
40
|
+
delete_dat_files_in_dir(File.join(@data_dir, 'projections'))
|
41
|
+
end
|
42
|
+
|
43
|
+
def delete_dat_files_in_dir(dir)
|
44
|
+
Dir.foreach(dir) {|f| File.delete(File.join(dir, f)) if f != '.' and f != '..' and f.end_with?('.dat')}
|
37
45
|
end
|
38
46
|
|
39
47
|
def has_index?
|
40
|
-
|
48
|
+
parameters and projections and number_of_buckets > 0
|
41
49
|
end
|
42
50
|
|
43
51
|
def number_of_buckets
|
@@ -45,15 +53,31 @@ module LSH
|
|
45
53
|
end
|
46
54
|
|
47
55
|
def projections=(projections)
|
48
|
-
|
56
|
+
# Saving the projections to disk
|
57
|
+
# (too slow to serialize and store in Redis for
|
58
|
+
# large number of dimensions/projections)
|
59
|
+
projections.each_with_index do |projection, i|
|
60
|
+
projection.each_with_index do |vector, j|
|
61
|
+
vector.save(File.join(@data_dir, 'projections', "vector_#{i}_#{j}.dat"))
|
62
|
+
end
|
63
|
+
end
|
49
64
|
end
|
50
65
|
|
51
66
|
def projections
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
67
|
+
return unless parameters
|
68
|
+
@projections ||= (
|
69
|
+
projections = []
|
70
|
+
parameters[:number_of_independent_projections].times do |i|
|
71
|
+
vectors = []
|
72
|
+
parameters[:number_of_random_vectors].times do |j|
|
73
|
+
v = MathUtil.zeros(parameters[:dim])
|
74
|
+
v.load(File.join(@data_dir, 'projections', "vector_#{i}_#{j}.dat"))
|
75
|
+
vectors << v
|
76
|
+
end
|
77
|
+
projections << vectors
|
78
|
+
end
|
79
|
+
projections
|
80
|
+
)
|
57
81
|
end
|
58
82
|
|
59
83
|
def parameters=(parms)
|
@@ -62,12 +86,16 @@ module LSH
|
|
62
86
|
end
|
63
87
|
|
64
88
|
def parameters
|
65
|
-
|
66
|
-
parms
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
89
|
+
begin
|
90
|
+
@parms ||= (
|
91
|
+
parms = JSON.parse(@redis.get "parameters")
|
92
|
+
parms.keys.each { |k| parms[k.to_sym] = parms[k]; parms.delete(k) }
|
93
|
+
parms[:window] = Float::INFINITY if parms[:window] == 'Infinity'
|
94
|
+
parms
|
95
|
+
)
|
96
|
+
rescue TypeError
|
97
|
+
nil
|
98
|
+
end
|
71
99
|
end
|
72
100
|
|
73
101
|
def create_new_bucket
|
metadata
CHANGED
@@ -2,14 +2,14 @@
|
|
2
2
|
name: lsh
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.1.
|
5
|
+
version: 0.1.2
|
6
6
|
platform: java
|
7
7
|
authors:
|
8
8
|
- Yves Raimond
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-12-
|
12
|
+
date: 2012-12-31 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: jblas-ruby
|