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 ADDED
@@ -0,0 +1,7 @@
1
+ = recommend
2
+
3
+ http://github.com/jugyo/recommend
4
+
5
+ == DESCRIPTION:
6
+
7
+ Library for recommendation.
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
+