vocalist 1.0.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.
Files changed (93) hide show
  1. data/.document +5 -0
  2. data/.gitignore +27 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +17 -0
  5. data/Rakefile +70 -0
  6. data/VERSION +1 -0
  7. data/data/countries/albania.yml +6 -0
  8. data/data/countries/algeria.yml +5 -0
  9. data/data/countries/argentina.yml +12 -0
  10. data/data/countries/armenia.yml +5 -0
  11. data/data/countries/australia.yml +22 -0
  12. data/data/countries/austria.yml +5 -0
  13. data/data/countries/bahamas.yml +7 -0
  14. data/data/countries/belarus.yml +6 -0
  15. data/data/countries/belgium.yml +6 -0
  16. data/data/countries/benin.yml +4 -0
  17. data/data/countries/bolivia.yml +5 -0
  18. data/data/countries/bonia.yml +10 -0
  19. data/data/countries/brazil.yml +6 -0
  20. data/data/countries/bulgaria.yml +6 -0
  21. data/data/countries/cameroon.yml +6 -0
  22. data/data/countries/canada.yml +13 -0
  23. data/data/countries/cape-verde.yml +9 -0
  24. data/data/countries/chile.yml +7 -0
  25. data/data/countries/china.yml +5 -0
  26. data/data/countries/colombia.yml +7 -0
  27. data/data/countries/croatia.yml +6 -0
  28. data/data/countries/cuba.yml +5 -0
  29. data/data/countries/cyprus.yml +5 -0
  30. data/data/countries/czech-republic.yml +6 -0
  31. data/data/countries/democratic-republic-of-the-congo.yml +5 -0
  32. data/data/countries/denmark.yml +5 -0
  33. data/data/countries/estonia.yml +5 -0
  34. data/data/countries/faroe-islands.yml +6 -0
  35. data/data/countries/finland.yml +5 -0
  36. data/data/countries/france.yml +14 -0
  37. data/data/countries/germany.yml +114 -0
  38. data/data/countries/greece.yml +5 -0
  39. data/data/countries/hungary.yml +5 -0
  40. data/data/countries/iceland.yml +7 -0
  41. data/data/countries/india.yml +9 -0
  42. data/data/countries/iran.yml +5 -0
  43. data/data/countries/ireland.yml +12 -0
  44. data/data/countries/island-of-dominica.yml +4 -0
  45. data/data/countries/israel.yml +6 -0
  46. data/data/countries/italy.yml +9 -0
  47. data/data/countries/ivory-coast.yml +5 -0
  48. data/data/countries/jamaica.yml +6 -0
  49. data/data/countries/japan.yml +6 -0
  50. data/data/countries/kazakhstan.yml +8 -0
  51. data/data/countries/korea.yml +6 -0
  52. data/data/countries/kyrgyzstan.yml +5 -0
  53. data/data/countries/latvia.yml +6 -0
  54. data/data/countries/lebanon.yml +5 -0
  55. data/data/countries/lithuania.yml +6 -0
  56. data/data/countries/luxembourg.yml +9 -0
  57. data/data/countries/macedonia.yml +6 -0
  58. data/data/countries/malaysia.yml +4 -0
  59. data/data/countries/mali.yml +4 -0
  60. data/data/countries/mexico.yml +8 -0
  61. data/data/countries/moldavia.yml +5 -0
  62. data/data/countries/mongolia.yml +4 -0
  63. data/data/countries/morocco.yml +12 -0
  64. data/data/countries/netherlands.yml +9 -0
  65. data/data/countries/new-zealand.yml +17 -0
  66. data/data/countries/norway.yml +11 -0
  67. data/data/countries/peru.yml +7 -0
  68. data/data/countries/philippines.yml +11 -0
  69. data/data/countries/poland.yml +9 -0
  70. data/data/countries/portugal.yml +9 -0
  71. data/data/countries/puerto-rico.yml +5 -0
  72. data/data/countries/romania.yml +6 -0
  73. data/data/countries/russia.yml +7 -0
  74. data/data/countries/senegal.yml +5 -0
  75. data/data/countries/serbia.yml +5 -0
  76. data/data/countries/slovakia.yml +6 -0
  77. data/data/countries/solvenia.yml +5 -0
  78. data/data/countries/south-africa.yml +5 -0
  79. data/data/countries/spain.yml +7 -0
  80. data/data/countries/sweden.yml +18 -0
  81. data/data/countries/switzerland.yml +5 -0
  82. data/data/countries/taiwan.yml +5 -0
  83. data/data/countries/tanzania.yml +5 -0
  84. data/data/countries/thailand.yml +8 -0
  85. data/data/countries/uk.yml +92 -0
  86. data/data/countries/usa.yml +44 -0
  87. data/lib/vocalist.rb +0 -0
  88. data/lib/vocalist/nationality.rb +95 -0
  89. data/spec/spec.opts +1 -0
  90. data/spec/spec_helper.rb +9 -0
  91. data/spec/vocalist_spec.rb +7 -0
  92. data/vocalist.gemspec +139 -0
  93. metadata +189 -0
@@ -0,0 +1,44 @@
1
+ ---
2
+ :tags:
3
+ - american
4
+ - americana
5
+ - american pop
6
+ - american street punk
7
+ - america
8
+ - american metal
9
+ - american thrash metal
10
+ - brooklyn
11
+ - california
12
+ - californian punk
13
+ - california punk
14
+ - detroit
15
+ - florida
16
+ - iowa
17
+ - jacksonville
18
+ - kentucky
19
+ - louisville
20
+ - los angeles
21
+ - minnesota
22
+ - new wave of american metal
23
+ - new york
24
+ - new york city
25
+ - nyc
26
+ - pennsylvania
27
+ - orange county
28
+ - san diego
29
+ - seattle
30
+ - seattle sound
31
+ - seattle eclectica
32
+ - san francisco
33
+ - texas punk
34
+ - united states
35
+ - usa
36
+ - us
37
+ - washington artists
38
+ - black kids
39
+ - bloodhound gang
40
+ - lady gaga
41
+ - ladygaga
42
+ - metro station
43
+ - mason musso
44
+ :country: United States
File without changes
@@ -0,0 +1,95 @@
1
+ require 'yaml'
2
+
3
+ module Vocalist
4
+ # Class which resolves an artist to its nationality
5
+ class Nationality
6
+
7
+ # Create a new instance. There is no data loaded at this point,
8
+ # everything needs to be loaded separate.
9
+ def initialize()
10
+ @tag_map = {}
11
+ end
12
+
13
+ # Loads the specified Files
14
+ #
15
+ # @param [Array<String>] files A list of file names (could be regular
16
+ # expressions, e.g. 'lib/**/*.yml')
17
+ # @return [void]
18
+ def load_files(files)
19
+ Dir.glob(files).each do |file|
20
+ load_file(file)
21
+ end
22
+ end
23
+
24
+ # Load a given file
25
+ #
26
+ # @param [String] file A file name where to load mappings from.
27
+ # @return [void]
28
+ def load_file(file)
29
+ file_data = YAML.load(File.read(file))
30
+ country = file_data[:country]
31
+ file_data[:tags].each do |tag|
32
+ @tag_map[tag.downcase] = country
33
+ end
34
+ end
35
+
36
+ # Add a tag => country mapping to the list.
37
+ #
38
+ # @param [String] tag The tag mapped to the country (case-insensitive)
39
+ # @param [String] country The country identified be tag (case-sensitive)
40
+ def add_mapping(tag, country)
41
+ @tag_map[tag.downcase] = country
42
+ end
43
+
44
+ # Classify an artist by its tags on Last.fm.
45
+ #
46
+ # Extended version: Returns all possible countries.
47
+ #
48
+ # @param [Array<Scrobbler::Tag>] tags The artist's tags from Last.FM
49
+ # @return [Hash<String, Fixnum>] The countries this artist may belong to and
50
+ # their score (a higher score => probability is higher)
51
+ def by_scrobbler_tags_ex(tags)
52
+ countries = {}
53
+ tags.each do |tag|
54
+ # by default we only handle tags case-insensitive
55
+ country = @tag_map[tag.name.downcase]
56
+ if !country.nil? then
57
+ countries[country] = Nationality::__count_tag(tag, countries[country])
58
+ end
59
+ end
60
+
61
+ countries
62
+ end
63
+
64
+
65
+ # Classify an artist by its tags on Last.fm.
66
+ #
67
+ # @param [Array<Scrobbler::Tag>] tags The artist's tags from Last.FM
68
+ # @return [String] The country this artist may belong to
69
+ def by_scrobbler_tags(tags)
70
+ result = by_scrobbler_tags_ex(tags).to_a.each { |s| s.reverse! }.max
71
+ result[1] unless result.nil?
72
+ end
73
+
74
+
75
+ # Do we already know about a tag?
76
+ #
77
+ # @param [String] tag The tag that should be checked if we already have a
78
+ # mapping including it.
79
+ # @return [Boolean] True, if there is a mapping including this tag.
80
+ def has_tag?(tag)
81
+ @tag_map.has_key?(tag.downcase)
82
+ end
83
+
84
+ # Helper function to compute tag count and an maybe-nil entry
85
+ #
86
+ # @private
87
+ # @param tag [Scrobbler::Tag]
88
+ # @param entry [Fixnum, Nil]
89
+ def self.__count_tag(tag, entry)
90
+ count = (entry.nil? ? 0 : entry)
91
+ count += [tag.count, 1].max
92
+ end
93
+
94
+ end
95
+ end
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1,9 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'vocalist'
4
+ require 'spec'
5
+ require 'spec/autorun'
6
+
7
+ Spec::Runner.configure do |config|
8
+
9
+ end
@@ -0,0 +1,7 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "Vocalist" do
4
+ it "fails" do
5
+ fail "hey buddy, you should probably rename this file and start specing for real"
6
+ end
7
+ end
@@ -0,0 +1,139 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{vocalist}
8
+ s.version = "1.0.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Uwe L. Korn"]
12
+ s.date = %q{2010-08-09}
13
+ s.description = %q{Library for various music analysis thins, e.g. determing from where an artist comes from.}
14
+ s.email = %q{uwelk@xhochy.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".gitignore",
22
+ "LICENSE",
23
+ "README.rdoc",
24
+ "Rakefile",
25
+ "VERSION",
26
+ "data/countries/albania.yml",
27
+ "data/countries/algeria.yml",
28
+ "data/countries/argentina.yml",
29
+ "data/countries/armenia.yml",
30
+ "data/countries/australia.yml",
31
+ "data/countries/austria.yml",
32
+ "data/countries/bahamas.yml",
33
+ "data/countries/belarus.yml",
34
+ "data/countries/belgium.yml",
35
+ "data/countries/benin.yml",
36
+ "data/countries/bolivia.yml",
37
+ "data/countries/bonia.yml",
38
+ "data/countries/brazil.yml",
39
+ "data/countries/bulgaria.yml",
40
+ "data/countries/cameroon.yml",
41
+ "data/countries/canada.yml",
42
+ "data/countries/cape-verde.yml",
43
+ "data/countries/chile.yml",
44
+ "data/countries/china.yml",
45
+ "data/countries/colombia.yml",
46
+ "data/countries/croatia.yml",
47
+ "data/countries/cuba.yml",
48
+ "data/countries/cyprus.yml",
49
+ "data/countries/czech-republic.yml",
50
+ "data/countries/democratic-republic-of-the-congo.yml",
51
+ "data/countries/denmark.yml",
52
+ "data/countries/estonia.yml",
53
+ "data/countries/faroe-islands.yml",
54
+ "data/countries/finland.yml",
55
+ "data/countries/france.yml",
56
+ "data/countries/germany.yml",
57
+ "data/countries/greece.yml",
58
+ "data/countries/hungary.yml",
59
+ "data/countries/iceland.yml",
60
+ "data/countries/india.yml",
61
+ "data/countries/iran.yml",
62
+ "data/countries/ireland.yml",
63
+ "data/countries/island-of-dominica.yml",
64
+ "data/countries/israel.yml",
65
+ "data/countries/italy.yml",
66
+ "data/countries/ivory-coast.yml",
67
+ "data/countries/jamaica.yml",
68
+ "data/countries/japan.yml",
69
+ "data/countries/kazakhstan.yml",
70
+ "data/countries/korea.yml",
71
+ "data/countries/kyrgyzstan.yml",
72
+ "data/countries/latvia.yml",
73
+ "data/countries/lebanon.yml",
74
+ "data/countries/lithuania.yml",
75
+ "data/countries/luxembourg.yml",
76
+ "data/countries/macedonia.yml",
77
+ "data/countries/malaysia.yml",
78
+ "data/countries/mali.yml",
79
+ "data/countries/mexico.yml",
80
+ "data/countries/moldavia.yml",
81
+ "data/countries/mongolia.yml",
82
+ "data/countries/morocco.yml",
83
+ "data/countries/netherlands.yml",
84
+ "data/countries/new-zealand.yml",
85
+ "data/countries/norway.yml",
86
+ "data/countries/peru.yml",
87
+ "data/countries/philippines.yml",
88
+ "data/countries/poland.yml",
89
+ "data/countries/portugal.yml",
90
+ "data/countries/puerto-rico.yml",
91
+ "data/countries/romania.yml",
92
+ "data/countries/russia.yml",
93
+ "data/countries/senegal.yml",
94
+ "data/countries/serbia.yml",
95
+ "data/countries/slovakia.yml",
96
+ "data/countries/solvenia.yml",
97
+ "data/countries/south-africa.yml",
98
+ "data/countries/spain.yml",
99
+ "data/countries/sweden.yml",
100
+ "data/countries/switzerland.yml",
101
+ "data/countries/taiwan.yml",
102
+ "data/countries/tanzania.yml",
103
+ "data/countries/thailand.yml",
104
+ "data/countries/uk.yml",
105
+ "data/countries/usa.yml",
106
+ "lib/vocalist.rb",
107
+ "lib/vocalist/nationality.rb",
108
+ "spec/spec.opts",
109
+ "spec/spec_helper.rb",
110
+ "spec/vocalist_spec.rb",
111
+ "vocalist.gemspec"
112
+ ]
113
+ s.homepage = %q{http://github.com/xhochy/vocalist}
114
+ s.rdoc_options = ["--charset=UTF-8"]
115
+ s.require_paths = ["lib"]
116
+ s.rubygems_version = %q{1.3.7}
117
+ s.summary = %q{Library for various music analysis}
118
+ s.test_files = [
119
+ "spec/spec_helper.rb",
120
+ "spec/vocalist_spec.rb"
121
+ ]
122
+
123
+ if s.respond_to? :specification_version then
124
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
125
+ s.specification_version = 3
126
+
127
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
128
+ s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
129
+ s.add_development_dependency(%q<yard>, [">= 0"])
130
+ else
131
+ s.add_dependency(%q<rspec>, [">= 1.2.9"])
132
+ s.add_dependency(%q<yard>, [">= 0"])
133
+ end
134
+ else
135
+ s.add_dependency(%q<rspec>, [">= 1.2.9"])
136
+ s.add_dependency(%q<yard>, [">= 0"])
137
+ end
138
+ end
139
+
metadata ADDED
@@ -0,0 +1,189 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vocalist
3
+ version: !ruby/object:Gem::Version
4
+ hash: 21
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 1
10
+ version: 1.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Uwe L. Korn
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-08-09 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rspec
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 13
30
+ segments:
31
+ - 1
32
+ - 2
33
+ - 9
34
+ version: 1.2.9
35
+ type: :development
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: yard
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 3
46
+ segments:
47
+ - 0
48
+ version: "0"
49
+ type: :development
50
+ version_requirements: *id002
51
+ description: Library for various music analysis thins, e.g. determing from where an artist comes from.
52
+ email: uwelk@xhochy.com
53
+ executables: []
54
+
55
+ extensions: []
56
+
57
+ extra_rdoc_files:
58
+ - LICENSE
59
+ - README.rdoc
60
+ files:
61
+ - .document
62
+ - .gitignore
63
+ - LICENSE
64
+ - README.rdoc
65
+ - Rakefile
66
+ - VERSION
67
+ - data/countries/albania.yml
68
+ - data/countries/algeria.yml
69
+ - data/countries/argentina.yml
70
+ - data/countries/armenia.yml
71
+ - data/countries/australia.yml
72
+ - data/countries/austria.yml
73
+ - data/countries/bahamas.yml
74
+ - data/countries/belarus.yml
75
+ - data/countries/belgium.yml
76
+ - data/countries/benin.yml
77
+ - data/countries/bolivia.yml
78
+ - data/countries/bonia.yml
79
+ - data/countries/brazil.yml
80
+ - data/countries/bulgaria.yml
81
+ - data/countries/cameroon.yml
82
+ - data/countries/canada.yml
83
+ - data/countries/cape-verde.yml
84
+ - data/countries/chile.yml
85
+ - data/countries/china.yml
86
+ - data/countries/colombia.yml
87
+ - data/countries/croatia.yml
88
+ - data/countries/cuba.yml
89
+ - data/countries/cyprus.yml
90
+ - data/countries/czech-republic.yml
91
+ - data/countries/democratic-republic-of-the-congo.yml
92
+ - data/countries/denmark.yml
93
+ - data/countries/estonia.yml
94
+ - data/countries/faroe-islands.yml
95
+ - data/countries/finland.yml
96
+ - data/countries/france.yml
97
+ - data/countries/germany.yml
98
+ - data/countries/greece.yml
99
+ - data/countries/hungary.yml
100
+ - data/countries/iceland.yml
101
+ - data/countries/india.yml
102
+ - data/countries/iran.yml
103
+ - data/countries/ireland.yml
104
+ - data/countries/island-of-dominica.yml
105
+ - data/countries/israel.yml
106
+ - data/countries/italy.yml
107
+ - data/countries/ivory-coast.yml
108
+ - data/countries/jamaica.yml
109
+ - data/countries/japan.yml
110
+ - data/countries/kazakhstan.yml
111
+ - data/countries/korea.yml
112
+ - data/countries/kyrgyzstan.yml
113
+ - data/countries/latvia.yml
114
+ - data/countries/lebanon.yml
115
+ - data/countries/lithuania.yml
116
+ - data/countries/luxembourg.yml
117
+ - data/countries/macedonia.yml
118
+ - data/countries/malaysia.yml
119
+ - data/countries/mali.yml
120
+ - data/countries/mexico.yml
121
+ - data/countries/moldavia.yml
122
+ - data/countries/mongolia.yml
123
+ - data/countries/morocco.yml
124
+ - data/countries/netherlands.yml
125
+ - data/countries/new-zealand.yml
126
+ - data/countries/norway.yml
127
+ - data/countries/peru.yml
128
+ - data/countries/philippines.yml
129
+ - data/countries/poland.yml
130
+ - data/countries/portugal.yml
131
+ - data/countries/puerto-rico.yml
132
+ - data/countries/romania.yml
133
+ - data/countries/russia.yml
134
+ - data/countries/senegal.yml
135
+ - data/countries/serbia.yml
136
+ - data/countries/slovakia.yml
137
+ - data/countries/solvenia.yml
138
+ - data/countries/south-africa.yml
139
+ - data/countries/spain.yml
140
+ - data/countries/sweden.yml
141
+ - data/countries/switzerland.yml
142
+ - data/countries/taiwan.yml
143
+ - data/countries/tanzania.yml
144
+ - data/countries/thailand.yml
145
+ - data/countries/uk.yml
146
+ - data/countries/usa.yml
147
+ - lib/vocalist.rb
148
+ - lib/vocalist/nationality.rb
149
+ - spec/spec.opts
150
+ - spec/spec_helper.rb
151
+ - spec/vocalist_spec.rb
152
+ - vocalist.gemspec
153
+ has_rdoc: true
154
+ homepage: http://github.com/xhochy/vocalist
155
+ licenses: []
156
+
157
+ post_install_message:
158
+ rdoc_options:
159
+ - --charset=UTF-8
160
+ require_paths:
161
+ - lib
162
+ required_ruby_version: !ruby/object:Gem::Requirement
163
+ none: false
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ hash: 3
168
+ segments:
169
+ - 0
170
+ version: "0"
171
+ required_rubygems_version: !ruby/object:Gem::Requirement
172
+ none: false
173
+ requirements:
174
+ - - ">="
175
+ - !ruby/object:Gem::Version
176
+ hash: 3
177
+ segments:
178
+ - 0
179
+ version: "0"
180
+ requirements: []
181
+
182
+ rubyforge_project:
183
+ rubygems_version: 1.3.7
184
+ signing_key:
185
+ specification_version: 3
186
+ summary: Library for various music analysis
187
+ test_files:
188
+ - spec/spec_helper.rb
189
+ - spec/vocalist_spec.rb