jugyo-recommend 0.1.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.
- data/README.rdoc +7 -0
- data/Rakefile +53 -0
- data/examples/example1.rb +17 -0
- data/lib/recommend.rb +10 -0
- data/spec/recommend_spec.rb +16 -0
- metadata +57 -0
data/README.rdoc
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'spec/rake/spectask'
|
2
|
+
require 'rake/clean'
|
3
|
+
require 'rake/gempackagetask'
|
4
|
+
require 'rake/rdoctask'
|
5
|
+
|
6
|
+
name = 'recommend'
|
7
|
+
version = '0.1.0'
|
8
|
+
|
9
|
+
spec = Gem::Specification.new do |s|
|
10
|
+
s.name = name
|
11
|
+
s.version = version
|
12
|
+
s.summary = "Library for recommendation."
|
13
|
+
s.description = "Library for recommendation."
|
14
|
+
s.files = %w(Rakefile README.rdoc) + Dir.glob("{lib,spec,examples}/**/*")
|
15
|
+
s.author = 'jugyo'
|
16
|
+
s.email = 'jugyo.org@gmail.com'
|
17
|
+
s.homepage = 'http://github.com/jugyo/recommend'
|
18
|
+
s.rubyforge_project = 'recommend'
|
19
|
+
s.has_rdoc = false
|
20
|
+
end
|
21
|
+
|
22
|
+
task :gemspec do
|
23
|
+
filename = "#{name}.gemspec"
|
24
|
+
open(filename, 'w') do |f|
|
25
|
+
f.write spec.to_ruby
|
26
|
+
end
|
27
|
+
puts <<-EOS
|
28
|
+
Successfully generated gemspec
|
29
|
+
Name: #{name}
|
30
|
+
Version: #{version}
|
31
|
+
File: #{filename}
|
32
|
+
EOS
|
33
|
+
end
|
34
|
+
|
35
|
+
Rake::GemPackageTask.new(spec) do |p|
|
36
|
+
p.need_tar = true
|
37
|
+
end
|
38
|
+
|
39
|
+
task :install => [ :package ] do
|
40
|
+
sh %{sudo gem install pkg/#{name}-#{version}.gem}
|
41
|
+
end
|
42
|
+
|
43
|
+
task :uninstall => [ :clean ] do
|
44
|
+
sh %{sudo gem uninstall #{name}}
|
45
|
+
end
|
46
|
+
|
47
|
+
desc 'run all specs'
|
48
|
+
Spec::Rake::SpecTask.new do |t|
|
49
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
50
|
+
t.spec_opts = ['--colour --format progress --loadby mtime --reverse']
|
51
|
+
end
|
52
|
+
|
53
|
+
CLEAN.include [ 'pkg', '*.gem' ]
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'recommend'
|
3
|
+
|
4
|
+
item_data = []
|
5
|
+
item_data << {1 => 1, 2 => 3, 4 => 1, 6 => 3, 9 => 1}
|
6
|
+
item_data << {1 => 2, 3 => 1, 4 => 1, 7 => 3}
|
7
|
+
item_data << {2 => 1, 4 => 3, 6 => 2, 7 => 2, 8 => 2}
|
8
|
+
item_data << {3 => 2, 5 => 1, 6 => 4, 7 => 1, 8 => 2, 9 => 3}
|
9
|
+
item_data << {2 => 4, 3 => 1, 4 => 1, 6 => 2}
|
10
|
+
|
11
|
+
item_data.each_with_index do |item, i|
|
12
|
+
item_data.each_with_index do |other, j|
|
13
|
+
next if i == j
|
14
|
+
similarity = Recommend.similarity_by_euclidean_distance(item, other)
|
15
|
+
puts "similarity of '#{i}' and '#{j}' => #{similarity}"
|
16
|
+
end
|
17
|
+
end
|
data/lib/recommend.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
module Recommend
|
2
|
+
# data should be a Hash
|
3
|
+
def similarity_by_euclidean_distance(data1, data2)
|
4
|
+
sum = (data1.keys & data2.keys).inject(0) do |result, key|
|
5
|
+
result + (data1[key] - data2[key])**2
|
6
|
+
end
|
7
|
+
1.0 / (sum + 1)
|
8
|
+
end
|
9
|
+
module_function :similarity_by_euclidean_distance
|
10
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__) + '/../lib/')
|
2
|
+
require 'recommend'
|
3
|
+
|
4
|
+
describe Recommend do
|
5
|
+
it 'should calc similarity by euclidean distance' do
|
6
|
+
data1 = {1 => 1, 2 => 2, 5 => 1}
|
7
|
+
data2 = {1 => 2, 2 => 1, 3 => 2}
|
8
|
+
Recommend.similarity_by_euclidean_distance(data1, data2).should == 1.0 / (2 + 1)
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'should calc similarity for same data by euclidean distance' do
|
12
|
+
data1 = {1 => 1, 2 => 1, 5 => 1}
|
13
|
+
data2 = {1 => 1, 2 => 1, 3 => 2}
|
14
|
+
Recommend.similarity_by_euclidean_distance(data1, data2).should == 1.0
|
15
|
+
end
|
16
|
+
end
|
metadata
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jugyo-recommend
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- jugyo
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-06-06 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: Library for recommendation.
|
17
|
+
email: jugyo.org@gmail.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files: []
|
23
|
+
|
24
|
+
files:
|
25
|
+
- Rakefile
|
26
|
+
- README.rdoc
|
27
|
+
- lib/recommend.rb
|
28
|
+
- spec/recommend_spec.rb
|
29
|
+
- examples/example1.rb
|
30
|
+
has_rdoc: false
|
31
|
+
homepage: http://github.com/jugyo/recommend
|
32
|
+
post_install_message:
|
33
|
+
rdoc_options: []
|
34
|
+
|
35
|
+
require_paths:
|
36
|
+
- lib
|
37
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: "0"
|
42
|
+
version:
|
43
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: "0"
|
48
|
+
version:
|
49
|
+
requirements: []
|
50
|
+
|
51
|
+
rubyforge_project: recommend
|
52
|
+
rubygems_version: 1.2.0
|
53
|
+
signing_key:
|
54
|
+
specification_version: 2
|
55
|
+
summary: Library for recommendation.
|
56
|
+
test_files: []
|
57
|
+
|