jugyo-recommend 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
+