similus 0.1.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.tar.gz.sig +0 -0
- data/LICENSES +23 -0
- data/Manifest +16 -0
- data/README.rdoc +80 -0
- data/Rakefile +22 -0
- data/benchmarks/benchmark1.rb +90 -0
- data/benchmarks/benchmark2.rb +92 -0
- data/benchmarks/custom_benchmark.rb +41 -0
- data/benchmarks/redis.conf +312 -0
- data/init.rb +2 -0
- data/lib/similus.rb +6 -0
- data/lib/similus/config.rb +24 -0
- data/lib/similus/core.rb +220 -0
- data/lib/similus/redis.rb +16 -0
- data/similus.gemspec +32 -0
- data/test/add_activity_spec.rb +37 -0
- data/test/recommended_spec.rb +104 -0
- data/test/similar_spec.rb +103 -0
- metadata +112 -0
- metadata.gz.sig +0 -0
@@ -0,0 +1,103 @@
|
|
1
|
+
$: << File.join(File.dirname(__FILE__), "/../lib")
|
2
|
+
require 'similus'
|
3
|
+
|
4
|
+
describe "Similus" do
|
5
|
+
before(:all) do
|
6
|
+
# Clear redis
|
7
|
+
Similus.clear_database!
|
8
|
+
|
9
|
+
Similus.add_activity(["User", 1], :view, ["Movie", "Star Wars 1"])
|
10
|
+
Similus.add_activity(["User", 1], :view, ["Movie", "Star Wars 2"])
|
11
|
+
Similus.add_activity(["User", 1], :view, ["Movie", "Star Wars 3"])
|
12
|
+
Similus.add_activity(["User", 1], :view, ["Movie", "Star Wars 4"])
|
13
|
+
|
14
|
+
Similus.add_activity(["User", 2], :view, ["Movie", "Star Wars 3"])
|
15
|
+
Similus.add_activity(["User", 2], :view, ["Movie", "Star Wars 4"])
|
16
|
+
Similus.add_activity(["User", 2], :view, ["Movie", "Star Wars 5"])
|
17
|
+
|
18
|
+
Similus.add_activity(["User", 3], :view, ["Movie", "Star Wars 1"])
|
19
|
+
Similus.add_activity(["User", 3], :view, ["Movie", "Star Wars 3"])
|
20
|
+
Similus.add_activity(["User", 3], :view, ["Movie", "Star Wars 5"])
|
21
|
+
|
22
|
+
Similus.add_activity(["User", 4], :view, ["Movie", "Star Wars 2"])
|
23
|
+
Similus.add_activity(["User", 4], :view, ["Movie", "Star Wars 3"])
|
24
|
+
|
25
|
+
Similus.add_activity(["User", 5], :view, ["Movie", "Star Wars 1"])
|
26
|
+
Similus.add_activity(["User", 5], :view, ["Movie", "Star Wars 2"])
|
27
|
+
Similus.add_activity(["User", 5], :view, ["Movie", "Star Wars 3"])
|
28
|
+
Similus.add_activity(["User", 5], :view, ["Movie", "Blade Runner"])
|
29
|
+
|
30
|
+
Similus.add_activity(["User", 6], :view, ["Movie", "Star Wars 1"])
|
31
|
+
Similus.add_activity(["User", 6], :view, ["Movie", "Star Wars 5"])
|
32
|
+
Similus.add_activity(["User", 6], :view, ["Movie", "Blade Runner"])
|
33
|
+
|
34
|
+
Similus.add_activity(["User", 7], :view, ["Movie", "Casablanca"])
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "#similar_to" do
|
38
|
+
describe "User 1" do
|
39
|
+
before(:all) do
|
40
|
+
@similar_to_user_1 = Similus.similar_to(["User", 1])
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should be most similar to user 5 with score of 3.0" do
|
44
|
+
@similar_to_user_1.first[:id].should == "5"
|
45
|
+
@similar_to_user_1.first[:score].should == 3.0
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should not include itself" do
|
49
|
+
@similar_to_user_1.detect { |x| x[:id] == "1" }.should be_nil
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should not be similar to users with just 1 similarity" do
|
53
|
+
@similar_to_user_1.detect { |x| x[:id] == "6" }.should be_nil
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should be similar to users even if they will not have new recommendations" do
|
57
|
+
@similar_to_user_1.detect { |x| x[:id] == "4" }.should_not be_nil
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should be similar to users 2, 3 and 4 with 2 similarities " do
|
61
|
+
@similar_to_user_1.select { |x| x[:score] == 2.0 }.size.should == 3
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "the other users" do
|
66
|
+
before(:all) do
|
67
|
+
@similar_to_user_2 = Similus.similar_to(["User", 2])
|
68
|
+
@similar_to_user_3 = Similus.similar_to(["User", 3])
|
69
|
+
@similar_to_user_4 = Similus.similar_to(["User", 4])
|
70
|
+
@similar_to_user_5 = Similus.similar_to(["User", 5])
|
71
|
+
@similar_to_user_6 = Similus.similar_to(["User", 6])
|
72
|
+
@similar_to_user_7 = Similus.similar_to(["User", 7])
|
73
|
+
end
|
74
|
+
|
75
|
+
it "shall have the expected similarities and scores for the rest of users" do
|
76
|
+
@similar_to_user_2.size.should == 2
|
77
|
+
@similar_to_user_2.select { |x| x[:score] == 2.0 }.size.should == 2
|
78
|
+
@similar_to_user_2.select { |x| %w(1 3).include? x[:id]}.size.should == 2
|
79
|
+
|
80
|
+
@similar_to_user_3.size.should == 4
|
81
|
+
@similar_to_user_3.select { |x| %w(1 2 5 6).include? x[:id]}.size.should == 4
|
82
|
+
@similar_to_user_3.select { |x| x[:score] == 2.0}.size.should == 4
|
83
|
+
|
84
|
+
@similar_to_user_4.size.should == 2
|
85
|
+
@similar_to_user_4.select { |x| %w(1 5).include? x[:id]}.size.should == 2
|
86
|
+
@similar_to_user_4.select { |x| x[:score] == 2.0}.size.should == 2
|
87
|
+
|
88
|
+
@similar_to_user_5.first[:score].should == 3.0
|
89
|
+
@similar_to_user_5.size.should == 4
|
90
|
+
@similar_to_user_5.select { |x| %w(1 3 4 6).include? x[:id]}.size.should == 4
|
91
|
+
@similar_to_user_5.select { |x| x[:score] == 2.0}.size.should == 3
|
92
|
+
|
93
|
+
@similar_to_user_6.size.should == 2
|
94
|
+
@similar_to_user_6.select { |x| %w(3 5).include? x[:id]}.size.should == 2
|
95
|
+
@similar_to_user_6.select { |x| x[:score] == 2.0}.size.should == 2
|
96
|
+
end
|
97
|
+
|
98
|
+
it "shall have no similarities for user 7" do
|
99
|
+
@similar_to_user_7.size.should == 0
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
metadata
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: similus
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 1
|
9
|
+
version: 0.1.1
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Horaci Cuevas
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain:
|
16
|
+
- |
|
17
|
+
-----BEGIN CERTIFICATE-----
|
18
|
+
MIIDLjCCAhagAwIBAgIBADANBgkqhkiG9w0BAQUFADA9MQ8wDQYDVQQDDAZob3Jh
|
19
|
+
Y2kxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkWA2NvbTAe
|
20
|
+
Fw0xMDEwMDcxMzEwMDlaFw0xMTEwMDcxMzEwMDlaMD0xDzANBgNVBAMMBmhvcmFj
|
21
|
+
aTEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYDY29tMIIB
|
22
|
+
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApLeu332eDpZ0g8mxNx9UPkr8
|
23
|
+
qG/bywvNXYjMpuHaSRgDDKP4fUGmGXy9A+y4CSYD6u2+zRCY/KdS9b+d077aGy3F
|
24
|
+
KDhSUx7mXYRO5dWvGWcj/nTTANLxQsDzS/JVL2LcWQDym0m24XquFmbiLRCikhmM
|
25
|
+
X7Kcmgo6cB2D0iUW5MTqFaSCkKkl0/KR3BUJ9bbRPQhDKke2Nyg4xz6Hmg1Ju69F
|
26
|
+
mJqGseYLRC2VxRhdJwl/ZwWvSA5C3ulrTozgTHkhhjmX20XWxpv6uTdSPk4MLYqv
|
27
|
+
dVjswl7X7Rm5XiJm9bVJnAoU4/k/X39mEIKIKcqe18oqwB0+O5USrt4W4Pc7DwID
|
28
|
+
AQABozkwNzAJBgNVHRMEAjAAMB0GA1UdDgQWBBSivbT4vUH86eE+g8HjLB9fb5pa
|
29
|
+
yjALBgNVHQ8EBAMCBLAwDQYJKoZIhvcNAQEFBQADggEBAFHTHc8/ntUrSGG6O6fZ
|
30
|
+
PPhPIzCDEp2qhpENsnJPBy4XYrHFGK8PDo1Qoi07SbqeQ+hgMVm9nQ3vZtOjQvx/
|
31
|
+
Qcm4q2DRKBNhAPYlEjyAvymzmbXNJb8QOA+5Jzs5Xa0knokGjYO0w6sw6pDZPOQg
|
32
|
+
YzWSRpnQxTgFbYZ4InqRfv1KU5urF3itsSSoChpVarloBW0M0ppcbnOip1Qj3IfU
|
33
|
+
Yn8bclUd5GoR/ZaSO9iXG7GkkczwwUI6d8esL6BXvZEUSiDC//xgYZUEb8lEDAJB
|
34
|
+
hv4MxrZjuDQ4zRtLTMV1+7761io+Ikp8UWLybRkOkq/t8oFMHsRvBkOAK7nFXdrD
|
35
|
+
BJ0=
|
36
|
+
-----END CERTIFICATE-----
|
37
|
+
|
38
|
+
date: 2010-10-07 00:00:00 +02:00
|
39
|
+
default_executable:
|
40
|
+
dependencies: []
|
41
|
+
|
42
|
+
description: A ruby library to find similar objects and make recommendations based on activity of objects
|
43
|
+
email: horaci @@ gmail.com
|
44
|
+
executables: []
|
45
|
+
|
46
|
+
extensions: []
|
47
|
+
|
48
|
+
extra_rdoc_files:
|
49
|
+
- LICENSES
|
50
|
+
- README.rdoc
|
51
|
+
- lib/similus.rb
|
52
|
+
- lib/similus/config.rb
|
53
|
+
- lib/similus/core.rb
|
54
|
+
- lib/similus/redis.rb
|
55
|
+
files:
|
56
|
+
- LICENSES
|
57
|
+
- README.rdoc
|
58
|
+
- Rakefile
|
59
|
+
- benchmarks/benchmark1.rb
|
60
|
+
- benchmarks/benchmark2.rb
|
61
|
+
- benchmarks/custom_benchmark.rb
|
62
|
+
- benchmarks/redis.conf
|
63
|
+
- init.rb
|
64
|
+
- lib/similus.rb
|
65
|
+
- lib/similus/config.rb
|
66
|
+
- lib/similus/core.rb
|
67
|
+
- lib/similus/redis.rb
|
68
|
+
- test/add_activity_spec.rb
|
69
|
+
- test/recommended_spec.rb
|
70
|
+
- test/similar_spec.rb
|
71
|
+
- Manifest
|
72
|
+
- similus.gemspec
|
73
|
+
has_rdoc: true
|
74
|
+
homepage: http://github.com/horaci/similus
|
75
|
+
licenses: []
|
76
|
+
|
77
|
+
post_install_message:
|
78
|
+
rdoc_options:
|
79
|
+
- --line-numbers
|
80
|
+
- --inline-source
|
81
|
+
- --title
|
82
|
+
- Similus
|
83
|
+
- --main
|
84
|
+
- README.rdoc
|
85
|
+
require_paths:
|
86
|
+
- lib
|
87
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
+
none: false
|
89
|
+
requirements:
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
segments:
|
93
|
+
- 0
|
94
|
+
version: "0"
|
95
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
|
+
none: false
|
97
|
+
requirements:
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
segments:
|
101
|
+
- 1
|
102
|
+
- 2
|
103
|
+
version: "1.2"
|
104
|
+
requirements: []
|
105
|
+
|
106
|
+
rubyforge_project: similus
|
107
|
+
rubygems_version: 1.3.7
|
108
|
+
signing_key:
|
109
|
+
specification_version: 3
|
110
|
+
summary: A ruby library to find similar objects and make recommendations based on activity of objects
|
111
|
+
test_files: []
|
112
|
+
|
metadata.gz.sig
ADDED
Binary file
|