picky 2.7.0 → 3.0.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (213) hide show
  1. data/lib/picky/adapters/rack/base.rb +20 -16
  2. data/lib/picky/adapters/rack/live_parameters.rb +28 -24
  3. data/lib/picky/adapters/rack/search.rb +67 -0
  4. data/lib/picky/adapters/rack.rb +27 -23
  5. data/lib/picky/application.rb +246 -236
  6. data/lib/picky/backend/base.rb +115 -119
  7. data/lib/picky/backend/file/basic.rb +102 -98
  8. data/lib/picky/backend/file/json.rb +27 -23
  9. data/lib/picky/backend/file/marshal.rb +32 -28
  10. data/lib/picky/backend/file/text.rb +45 -41
  11. data/lib/picky/backend/files.rb +19 -15
  12. data/lib/picky/backend/redis/basic.rb +76 -72
  13. data/lib/picky/backend/redis/list_hash.rb +40 -36
  14. data/lib/picky/backend/redis/string_hash.rb +30 -26
  15. data/lib/picky/backend/redis.rb +32 -28
  16. data/lib/picky/bundle.rb +82 -57
  17. data/lib/{bundling.rb → picky/bundling.rb} +0 -0
  18. data/lib/picky/calculations/location.rb +51 -47
  19. data/lib/picky/categories.rb +60 -56
  20. data/lib/picky/categories_indexed.rb +73 -82
  21. data/lib/picky/categories_indexing.rb +12 -8
  22. data/lib/picky/category.rb +109 -120
  23. data/lib/picky/category_indexed.rb +39 -41
  24. data/lib/picky/category_indexing.rb +123 -125
  25. data/lib/picky/character_substituters/west_european.rb +32 -26
  26. data/lib/{constants.rb → picky/constants.rb} +0 -0
  27. data/lib/picky/cores.rb +96 -92
  28. data/lib/{deployment.rb → picky/deployment.rb} +0 -0
  29. data/lib/picky/frontend_adapters/rack.rb +133 -118
  30. data/lib/picky/generators/aliases.rb +5 -3
  31. data/lib/picky/generators/base.rb +11 -7
  32. data/lib/picky/generators/partial/default.rb +7 -3
  33. data/lib/picky/generators/partial/none.rb +24 -20
  34. data/lib/picky/generators/partial/strategy.rb +20 -16
  35. data/lib/picky/generators/partial/substring.rb +94 -90
  36. data/lib/picky/generators/partial_generator.rb +11 -7
  37. data/lib/picky/generators/similarity/default.rb +9 -5
  38. data/lib/picky/generators/similarity/double_metaphone.rb +20 -16
  39. data/lib/picky/generators/similarity/metaphone.rb +20 -16
  40. data/lib/picky/generators/similarity/none.rb +23 -19
  41. data/lib/picky/generators/similarity/phonetic.rb +49 -45
  42. data/lib/picky/generators/similarity/soundex.rb +20 -16
  43. data/lib/picky/generators/similarity/strategy.rb +10 -6
  44. data/lib/picky/generators/similarity_generator.rb +11 -7
  45. data/lib/picky/generators/strategy.rb +14 -10
  46. data/lib/picky/generators/weights/default.rb +9 -5
  47. data/lib/picky/generators/weights/logarithmic.rb +30 -26
  48. data/lib/picky/generators/weights/strategy.rb +10 -6
  49. data/lib/picky/generators/weights_generator.rb +11 -7
  50. data/lib/picky/helpers/measuring.rb +20 -16
  51. data/lib/picky/indexed/bundle/base.rb +39 -37
  52. data/lib/picky/indexed/bundle/memory.rb +68 -64
  53. data/lib/picky/indexed/bundle/redis.rb +73 -69
  54. data/lib/picky/indexed/wrappers/bundle/calculation.rb +26 -22
  55. data/lib/picky/indexed/wrappers/bundle/location.rb +30 -26
  56. data/lib/picky/indexed/wrappers/bundle/wrapper.rb +36 -32
  57. data/lib/picky/indexed/wrappers/category/location.rb +17 -13
  58. data/lib/picky/indexed/wrappers/exact_first.rb +46 -42
  59. data/lib/picky/indexers/base.rb +26 -22
  60. data/lib/picky/indexers/parallel.rb +62 -58
  61. data/lib/picky/indexers/serial.rb +41 -37
  62. data/lib/picky/indexes/index.rb +400 -0
  63. data/lib/picky/indexes/index_indexed.rb +24 -0
  64. data/lib/picky/indexes/index_indexing.rb +138 -0
  65. data/lib/picky/indexes/memory.rb +20 -0
  66. data/lib/picky/indexes/redis.rb +20 -0
  67. data/lib/picky/indexes.rb +68 -61
  68. data/lib/picky/indexes_indexed.rb +16 -12
  69. data/lib/picky/indexes_indexing.rb +41 -37
  70. data/lib/picky/indexing/bundle/base.rb +216 -205
  71. data/lib/picky/indexing/bundle/memory.rb +16 -11
  72. data/lib/picky/indexing/bundle/redis.rb +14 -12
  73. data/lib/picky/indexing/wrappers/category/location.rb +17 -13
  74. data/lib/picky/interfaces/live_parameters.rb +159 -154
  75. data/lib/picky/loader.rb +267 -304
  76. data/lib/picky/loggers/search.rb +20 -13
  77. data/lib/picky/no_source_specified_exception.rb +7 -3
  78. data/lib/picky/performant.rb +6 -2
  79. data/lib/picky/query/allocation.rb +71 -67
  80. data/lib/picky/query/allocations.rb +99 -94
  81. data/lib/picky/query/combination.rb +70 -66
  82. data/lib/picky/query/combinations/base.rb +56 -52
  83. data/lib/picky/query/combinations/memory.rb +36 -32
  84. data/lib/picky/query/combinations/redis.rb +66 -62
  85. data/lib/picky/query/indexes.rb +175 -160
  86. data/lib/picky/query/qualifier_category_mapper.rb +43 -0
  87. data/lib/picky/query/token.rb +165 -172
  88. data/lib/picky/query/tokens.rb +86 -82
  89. data/lib/picky/query/weights.rb +44 -48
  90. data/lib/picky/query.rb +5 -1
  91. data/lib/picky/rack/harakiri.rb +51 -47
  92. data/lib/picky/results.rb +81 -77
  93. data/lib/picky/search.rb +169 -158
  94. data/lib/picky/sinatra.rb +34 -0
  95. data/lib/picky/sources/base.rb +73 -70
  96. data/lib/picky/sources/couch.rb +61 -57
  97. data/lib/picky/sources/csv.rb +68 -64
  98. data/lib/picky/sources/db.rb +139 -135
  99. data/lib/picky/sources/delicious.rb +52 -48
  100. data/lib/picky/sources/mongo.rb +68 -63
  101. data/lib/picky/sources/wrappers/base.rb +20 -16
  102. data/lib/picky/sources/wrappers/location.rb +37 -33
  103. data/lib/picky/statistics.rb +46 -43
  104. data/lib/picky/tasks.rb +3 -0
  105. data/lib/picky/tokenizers/base.rb +192 -187
  106. data/lib/picky/tokenizers/index.rb +25 -21
  107. data/lib/picky/tokenizers/location.rb +33 -29
  108. data/lib/picky/tokenizers/query.rb +49 -43
  109. data/lib/picky.rb +21 -13
  110. data/lib/tasks/application.rake +1 -1
  111. data/lib/tasks/index.rake +3 -3
  112. data/lib/tasks/routes.rake +1 -1
  113. data/lib/tasks/server.rake +1 -1
  114. data/spec/lib/adapters/rack/base_spec.rb +1 -1
  115. data/spec/lib/adapters/rack/live_parameters_spec.rb +1 -1
  116. data/spec/lib/adapters/rack/query_spec.rb +1 -1
  117. data/spec/lib/application_spec.rb +39 -32
  118. data/spec/lib/backend/file/basic_spec.rb +2 -2
  119. data/spec/lib/backend/file/json_spec.rb +2 -2
  120. data/spec/lib/backend/file/marshal_spec.rb +2 -2
  121. data/spec/lib/backend/file/text_spec.rb +1 -1
  122. data/spec/lib/backend/files_spec.rb +14 -24
  123. data/spec/lib/backend/redis/basic_spec.rb +2 -2
  124. data/spec/lib/backend/redis/list_hash_spec.rb +3 -3
  125. data/spec/lib/backend/redis/string_hash_spec.rb +3 -3
  126. data/spec/lib/backend/redis_spec.rb +20 -13
  127. data/spec/lib/calculations/location_spec.rb +1 -1
  128. data/spec/lib/categories_indexed_spec.rb +16 -34
  129. data/spec/lib/category_indexed_spec.rb +9 -27
  130. data/spec/lib/category_indexing_spec.rb +2 -3
  131. data/spec/lib/category_spec.rb +10 -10
  132. data/spec/lib/character_substituters/west_european_spec.rb +6 -5
  133. data/spec/lib/cores_spec.rb +17 -17
  134. data/spec/lib/extensions/symbol_spec.rb +15 -1
  135. data/spec/lib/frontend_adapters/rack_spec.rb +20 -20
  136. data/spec/lib/generators/aliases_spec.rb +3 -3
  137. data/spec/lib/generators/cacher_strategy_spec.rb +1 -1
  138. data/spec/lib/generators/partial/default_spec.rb +3 -3
  139. data/spec/lib/generators/partial/none_spec.rb +2 -2
  140. data/spec/lib/generators/partial/substring_spec.rb +1 -1
  141. data/spec/lib/generators/partial_generator_spec.rb +3 -3
  142. data/spec/lib/generators/similarity/double_metaphone_spec.rb +1 -1
  143. data/spec/lib/generators/similarity/metaphone_spec.rb +1 -1
  144. data/spec/lib/generators/similarity/none_spec.rb +1 -1
  145. data/spec/lib/generators/similarity/phonetic_spec.rb +1 -1
  146. data/spec/lib/generators/similarity/soundex_spec.rb +1 -1
  147. data/spec/lib/generators/similarity_generator_spec.rb +2 -2
  148. data/spec/lib/generators/weights/logarithmic_spec.rb +1 -1
  149. data/spec/lib/generators/weights_generator_spec.rb +1 -1
  150. data/spec/lib/helpers/measuring_spec.rb +2 -2
  151. data/spec/lib/indexed/bundle/memory_spec.rb +6 -6
  152. data/spec/lib/indexed/bundle/redis_spec.rb +4 -4
  153. data/spec/lib/indexed/wrappers/bundle/calculation_spec.rb +2 -3
  154. data/spec/lib/indexed/wrappers/bundle/wrapper_spec.rb +2 -2
  155. data/spec/lib/indexed/wrappers/exact_first_spec.rb +5 -5
  156. data/spec/lib/indexers/base_spec.rb +1 -1
  157. data/spec/lib/indexers/parallel_spec.rb +1 -1
  158. data/spec/lib/indexers/serial_spec.rb +1 -1
  159. data/spec/lib/{index/base_indexed_spec.rb → indexes/index_indexed_spec.rb} +3 -3
  160. data/spec/lib/{index/base_indexing_spec.rb → indexes/index_indexing_spec.rb} +19 -2
  161. data/spec/lib/{index/base_spec.rb → indexes/index_spec.rb} +6 -25
  162. data/spec/lib/{index → indexes}/redis_spec.rb +1 -1
  163. data/spec/lib/indexes_class_spec.rb +2 -2
  164. data/spec/lib/indexes_indexed_spec.rb +1 -1
  165. data/spec/lib/indexes_indexing_spec.rb +1 -1
  166. data/spec/lib/indexes_spec.rb +1 -1
  167. data/spec/lib/indexing/bundle/base_spec.rb +7 -5
  168. data/spec/lib/indexing/bundle/memory_partial_generation_speed_spec.rb +4 -4
  169. data/spec/lib/indexing/bundle/memory_spec.rb +15 -15
  170. data/spec/lib/indexing/bundle/redis_spec.rb +9 -9
  171. data/spec/lib/interfaces/live_parameters_spec.rb +5 -5
  172. data/spec/lib/loader_spec.rb +17 -19
  173. data/spec/lib/loggers/search_spec.rb +2 -2
  174. data/spec/lib/query/allocation_spec.rb +1 -1
  175. data/spec/lib/query/allocations_spec.rb +1 -1
  176. data/spec/lib/query/combination_spec.rb +4 -4
  177. data/spec/lib/query/combinations/base_spec.rb +1 -1
  178. data/spec/lib/query/combinations/memory_spec.rb +1 -1
  179. data/spec/lib/query/combinations/redis_spec.rb +1 -1
  180. data/spec/lib/query/indexes_spec.rb +7 -2
  181. data/spec/lib/query/qualifier_category_mapper_spec.rb +34 -0
  182. data/spec/lib/query/token_spec.rb +32 -53
  183. data/spec/lib/query/tokens_spec.rb +30 -35
  184. data/spec/lib/query/weights_spec.rb +16 -16
  185. data/spec/lib/rack/harakiri_spec.rb +5 -5
  186. data/spec/lib/results_spec.rb +1 -1
  187. data/spec/lib/search_spec.rb +24 -22
  188. data/spec/lib/sinatra_spec.rb +36 -0
  189. data/spec/lib/sources/base_spec.rb +1 -1
  190. data/spec/lib/sources/couch_spec.rb +9 -9
  191. data/spec/lib/sources/csv_spec.rb +7 -7
  192. data/spec/lib/sources/db_spec.rb +2 -2
  193. data/spec/lib/sources/delicious_spec.rb +5 -5
  194. data/spec/lib/sources/mongo_spec.rb +7 -7
  195. data/spec/lib/sources/wrappers/base_spec.rb +2 -2
  196. data/spec/lib/sources/wrappers/location_spec.rb +1 -1
  197. data/spec/lib/statistics_spec.rb +1 -1
  198. data/spec/lib/tokenizers/base_spec.rb +2 -2
  199. data/spec/lib/tokenizers/index_spec.rb +1 -1
  200. data/spec/lib/tokenizers/query_spec.rb +1 -1
  201. metadata +30 -30
  202. data/lib/picky/adapters/rack/query.rb +0 -65
  203. data/lib/picky/index/base.rb +0 -409
  204. data/lib/picky/index/base_indexed.rb +0 -29
  205. data/lib/picky/index/base_indexing.rb +0 -127
  206. data/lib/picky/index/memory.rb +0 -16
  207. data/lib/picky/index/redis.rb +0 -16
  208. data/lib/picky/query/qualifiers.rb +0 -76
  209. data/lib/picky/query/solr.rb +0 -60
  210. data/lib/picky/signals.rb +0 -8
  211. data/lib/picky-tasks.rb +0 -6
  212. data/lib/tasks/spec.rake +0 -11
  213. data/spec/lib/query/qualifiers_spec.rb +0 -31
@@ -1,24 +1,28 @@
1
- # encoding: utf-8
2
- #
3
- module Generators
1
+ module Picky
4
2
 
5
- module Similarity
3
+ # encoding: utf-8
4
+ #
5
+ module Generators
6
6
 
7
- # It's actually a combination of double metaphone
8
- # and Levenshtein.
9
- #
10
- # It uses the double metaphone to get similar words
11
- # and ranks them using the levenshtein.
12
- #
13
- class DoubleMetaphone < Phonetic
7
+ module Similarity
14
8
 
15
- # Encodes the given symbol.
9
+ # It's actually a combination of double metaphone
10
+ # and Levenshtein.
16
11
  #
17
- # Returns a symbol.
12
+ # It uses the double metaphone to get similar words
13
+ # and ranks them using the levenshtein.
18
14
  #
19
- def encoded sym
20
- codes = Text::Metaphone.double_metaphone sym.to_s
21
- codes.first.to_sym unless codes.empty?
15
+ class DoubleMetaphone < Phonetic
16
+
17
+ # Encodes the given symbol.
18
+ #
19
+ # Returns a symbol.
20
+ #
21
+ def encoded sym
22
+ codes = Text::Metaphone.double_metaphone sym.to_s
23
+ codes.first.to_sym unless codes.empty?
24
+ end
25
+
22
26
  end
23
27
 
24
28
  end
@@ -1,24 +1,28 @@
1
- # encoding: utf-8
2
- #
3
- module Generators
1
+ module Picky
4
2
 
5
- module Similarity
3
+ # encoding: utf-8
4
+ #
5
+ module Generators
6
6
 
7
- # It's actually a combination of metaphone
8
- # and Levenshtein.
9
- #
10
- # It uses the metaphone to get similar words
11
- # and ranks them using the levenshtein.
12
- #
13
- class Metaphone < Phonetic
7
+ module Similarity
14
8
 
15
- # Encodes the given symbol.
9
+ # It's actually a combination of metaphone
10
+ # and Levenshtein.
16
11
  #
17
- # Returns a symbol.
12
+ # It uses the metaphone to get similar words
13
+ # and ranks them using the levenshtein.
18
14
  #
19
- def encoded sym
20
- code = Text::Metaphone.metaphone sym.to_s
21
- code.to_sym if code
15
+ class Metaphone < Phonetic
16
+
17
+ # Encodes the given symbol.
18
+ #
19
+ # Returns a symbol.
20
+ #
21
+ def encoded sym
22
+ code = Text::Metaphone.metaphone sym.to_s
23
+ code.to_sym if code
24
+ end
25
+
22
26
  end
23
27
 
24
28
  end
@@ -1,27 +1,31 @@
1
- module Generators
1
+ module Picky
2
2
 
3
- module Similarity
3
+ module Generators
4
4
 
5
- # Similarity strategy that does nothing.
6
- #
7
- class None < Strategy
5
+ module Similarity
8
6
 
9
- # Does not encode text. Just returns nil.
7
+ # Similarity strategy that does nothing.
10
8
  #
11
- def encoded text
12
- nil
13
- end
9
+ class None < Strategy
10
+
11
+ # Does not encode text. Just returns nil.
12
+ #
13
+ def encoded text
14
+ nil
15
+ end
16
+
17
+ # Returns an empty index.
18
+ #
19
+ def generate_from index
20
+ {}
21
+ end
22
+
23
+ # Returns if this strategy's generated file is saved.
24
+ #
25
+ def saved?
26
+ false
27
+ end
14
28
 
15
- # Returns an empty index.
16
- #
17
- def generate_from index
18
- {}
19
- end
20
-
21
- # Returns if this strategy's generated file is saved.
22
- #
23
- def saved?
24
- false
25
29
  end
26
30
 
27
31
  end
@@ -1,62 +1,66 @@
1
- # encoding: utf-8
2
- #
3
- module Generators
1
+ module Picky
4
2
 
5
- module Similarity
3
+ # encoding: utf-8
4
+ #
5
+ module Generators
6
6
 
7
- # It's actually a combination of double metaphone
8
- # and Levenshtein.
9
- #
10
- # It uses the double metaphone to get similar words
11
- # and ranks them using the levenshtein.
12
- #
13
- class Phonetic < Strategy
14
-
15
- attr_reader :amount
7
+ module Similarity
16
8
 
9
+ # It's actually a combination of double metaphone
10
+ # and Levenshtein.
17
11
  #
12
+ # It uses the double metaphone to get similar words
13
+ # and ranks them using the levenshtein.
18
14
  #
19
- def initialize amount = 10
20
- raise "In Picky 2.0+, the Similarity::Phonetic has been renamed to Similarity::DoubleMetaphone. Please use that one. Thanks!" if self.class == Phonetic
21
- @amount = amount
22
- end
15
+ class Phonetic < Strategy
23
16
 
24
- # Generates an index for the given index (in exact index style).
25
- #
26
- # In the following form:
27
- # [:meier, :mueller, :peter, :pater] => { MR: [:meier], MLR: [:mueller], PTR: [:peter, :pater] }
28
- #
29
- def generate_from inverted
30
- hash = hashify inverted.keys
31
- sort hash
32
- end
17
+ attr_reader :amount
33
18
 
34
- protected
35
-
36
- # Sorts the index values in place.
37
19
  #
38
- def sort hash
39
- hash.each_pair.each do |code, ary|
40
- ary.sort_by_levenshtein! code
41
- ary.slice! amount, ary.size # size is not perfectly correct, but anyway
42
- end
43
- hash
20
+ #
21
+ def initialize amount = 10
22
+ raise "In Picky 2.0+, the Similarity::Phonetic has been renamed to Similarity::DoubleMetaphone. Please use that one. Thanks!" if self.class == Phonetic
23
+ @amount = amount
44
24
  end
45
25
 
46
- # Hashifies a list of symbols.
26
+ # Generates an index for the given index (in exact index style).
47
27
  #
48
- # Where:
49
- # { encoded_sym => [syms] }
28
+ # In the following form:
29
+ # [:meier, :mueller, :peter, :pater] => { MR: [:meier], MLR: [:mueller], PTR: [:peter, :pater] }
50
30
  #
51
- def hashify list
52
- list.inject({}) do |total, element|
53
- if code = encoded(element)
54
- total[code] ||= []
55
- total[code] << element
31
+ def generate_from inverted
32
+ hash = hashify inverted.keys
33
+ sort hash
34
+ end
35
+
36
+ protected
37
+
38
+ # Sorts the index values in place.
39
+ #
40
+ def sort hash
41
+ hash.each_pair.each do |code, ary|
42
+ ary.sort_by_levenshtein! code
43
+ ary.slice! amount, ary.size # size is not perfectly correct, but anyway
56
44
  end
57
- total
45
+ hash
58
46
  end
59
- end
47
+
48
+ # Hashifies a list of symbols.
49
+ #
50
+ # Where:
51
+ # { encoded_sym => [syms] }
52
+ #
53
+ def hashify list
54
+ list.inject({}) do |total, element|
55
+ if code = encoded(element)
56
+ total[code] ||= []
57
+ total[code] << element
58
+ end
59
+ total
60
+ end
61
+ end
62
+
63
+ end
60
64
 
61
65
  end
62
66
 
@@ -1,24 +1,28 @@
1
- # encoding: utf-8
2
- #
3
- module Generators
1
+ module Picky
4
2
 
5
- module Similarity
3
+ # encoding: utf-8
4
+ #
5
+ module Generators
6
6
 
7
- # It's actually a combination of soundex
8
- # and Levenshtein.
9
- #
10
- # It uses the soundex to get similar words
11
- # and ranks them using the levenshtein.
12
- #
13
- class Soundex < Phonetic
7
+ module Similarity
14
8
 
15
- # Encodes the given symbol.
9
+ # It's actually a combination of soundex
10
+ # and Levenshtein.
16
11
  #
17
- # Returns a symbol.
12
+ # It uses the soundex to get similar words
13
+ # and ranks them using the levenshtein.
18
14
  #
19
- def encoded sym
20
- code = Text::Soundex.soundex sym.to_s
21
- code.to_sym if code
15
+ class Soundex < Phonetic
16
+
17
+ # Encodes the given symbol.
18
+ #
19
+ # Returns a symbol.
20
+ #
21
+ def encoded sym
22
+ code = Text::Soundex.soundex sym.to_s
23
+ code.to_sym if code
24
+ end
25
+
22
26
  end
23
27
 
24
28
  end
@@ -1,9 +1,13 @@
1
- module Generators
2
- module Similarity
3
- # Base class for all similarity strategies.
4
- #
5
- class Strategy < Generators::Strategy
6
-
1
+ module Picky
2
+
3
+ module Generators
4
+ module Similarity
5
+ # Base class for all similarity strategies.
6
+ #
7
+ class Strategy < Generators::Strategy
8
+
9
+ end
7
10
  end
8
11
  end
12
+
9
13
  end
@@ -1,13 +1,17 @@
1
- module Generators
1
+ module Picky
2
2
 
3
- # Uses no similarity as default.
4
- #
5
- class SimilarityGenerator < Base
3
+ module Generators
6
4
 
7
- # Generate a similarity index based on the given inverted index.
5
+ # Uses no similarity as default.
8
6
  #
9
- def generate strategy = Similarity::None.new
10
- strategy.generate_from self.inverted
7
+ class SimilarityGenerator < Base
8
+
9
+ # Generate a similarity index based on the given inverted index.
10
+ #
11
+ def generate strategy = Similarity::None.new
12
+ strategy.generate_from self.inverted
13
+ end
14
+
11
15
  end
12
16
 
13
17
  end
@@ -1,14 +1,18 @@
1
- module Generators
2
-
3
- class Strategy
4
-
5
- # By default, all caches are saved in a
6
- # storage (like a file).
7
- #
8
- def saved?
9
- true
1
+ module Picky
2
+
3
+ module Generators
4
+
5
+ class Strategy
6
+
7
+ # By default, all caches are saved in a
8
+ # storage (like a file).
9
+ #
10
+ def saved?
11
+ true
12
+ end
13
+
10
14
  end
11
-
15
+
12
16
  end
13
17
 
14
18
  end
@@ -1,7 +1,11 @@
1
- module Generators
2
- module Weights
3
- # Default is Logarithmic.
4
- #
5
- Default = Logarithmic.new
1
+ module Picky
2
+
3
+ module Generators
4
+ module Weights
5
+ # Default is Logarithmic.
6
+ #
7
+ Default = Logarithmic.new
8
+ end
6
9
  end
10
+
7
11
  end
@@ -1,35 +1,39 @@
1
- module Generators
1
+ module Picky
2
2
 
3
- module Weights
3
+ module Generators
4
4
 
5
- # Uses a logarithmic weight.
6
- # If for a key k we have x ids, the weight is:
7
- # w(x): log(x)
8
- # Special case: If x < 1, then we use 0.
9
- #
10
- class Logarithmic < Strategy
5
+ module Weights
11
6
 
12
- # Generates a partial index from the given inverted index.
7
+ # Uses a logarithmic weight.
8
+ # If for a key k we have x ids, the weight is:
9
+ # w(x): log(x)
10
+ # Special case: If x < 1, then we use 0.
13
11
  #
14
- def generate_from inverted
15
- inverted.inject({}) do |hash, text_ids|
16
- text, ids = *text_ids
17
- weight = weight_for ids.size
18
- hash[text] ||= weight.round(2) if weight
19
- hash
12
+ class Logarithmic < Strategy
13
+
14
+ # Generates a partial index from the given inverted index.
15
+ #
16
+ def generate_from inverted
17
+ inverted.inject({}) do |hash, text_ids|
18
+ text, ids = *text_ids
19
+ weight = weight_for ids.size
20
+ hash[text] ||= weight.round(2) if weight
21
+ hash
22
+ end
23
+ end
24
+
25
+ # Sets the weight value.
26
+ #
27
+ # If the size is 0 or one, we would get -Infinity or 0.0.
28
+ # Thus we do not set a value if there is just one. The default, dynamically, is 0.
29
+ #
30
+ # BUT: We need the value, even if 0. To designate that there is a weight!
31
+ #
32
+ def weight_for amount
33
+ return 0 if amount < 1
34
+ Math.log amount
20
35
  end
21
- end
22
36
 
23
- # Sets the weight value.
24
- #
25
- # If the size is 0 or one, we would get -Infinity or 0.0.
26
- # Thus we do not set a value if there is just one. The default, dynamically, is 0.
27
- #
28
- # BUT: We need the value, even if 0. To designate that there is a weight!
29
- #
30
- def weight_for amount
31
- return 0 if amount < 1
32
- Math.log amount
33
37
  end
34
38
 
35
39
  end
@@ -1,9 +1,13 @@
1
- module Generators
2
- module Weights
3
- # Superclass for weighing strategies.
4
- #
5
- class Strategy < Generators::Strategy
6
-
1
+ module Picky
2
+
3
+ module Generators
4
+ module Weights
5
+ # Superclass for weighing strategies.
6
+ #
7
+ class Strategy < Generators::Strategy
8
+
9
+ end
7
10
  end
8
11
  end
12
+
9
13
  end
@@ -1,13 +1,17 @@
1
- module Generators
1
+ module Picky
2
2
 
3
- # Uses a logarithmic algorithm as default.
4
- #
5
- class WeightsGenerator < Base
3
+ module Generators
6
4
 
7
- # Generate a weights index based on the given inverted index.
5
+ # Uses a logarithmic algorithm as default.
8
6
  #
9
- def generate strategy = Weights::Logarithmic.new
10
- strategy.generate_from self.inverted
7
+ class WeightsGenerator < Base
8
+
9
+ # Generate a weights index based on the given inverted index.
10
+ #
11
+ def generate strategy = Weights::Logarithmic.new
12
+ strategy.generate_from self.inverted
13
+ end
14
+
11
15
  end
12
16
 
13
17
  end
@@ -1,19 +1,23 @@
1
- # Helper methods for measuring, benchmarking, logging.
2
- #
3
- module Helpers
4
- module Measuring
5
-
6
- # Returns a duration in seconds.
7
- #
8
- def timed *args, &block
9
- block_to_be_measured = lambda &block
10
-
11
- time_begin = Time.now.to_f
12
-
13
- block_to_be_measured.call *args
14
-
15
- Time.now.to_f - time_begin
1
+ module Picky
2
+
3
+ # Helper methods for measuring, benchmarking, logging.
4
+ #
5
+ module Helpers
6
+ module Measuring
7
+
8
+ # Returns a duration in seconds.
9
+ #
10
+ def timed *args, &block
11
+ block_to_be_measured = lambda &block
12
+
13
+ time_begin = Time.now.to_f
14
+
15
+ block_to_be_measured.call *args
16
+
17
+ Time.now.to_f - time_begin
18
+ end
19
+
16
20
  end
17
-
18
21
  end
22
+
19
23
  end
@@ -1,41 +1,43 @@
1
- # TODO Extract duplicate code from base bundle classes.
2
- #
3
- module Indexed # :nodoc:all
4
-
5
- # An indexed bundle is a number of memory/redis
6
- # indexes that compose the indexes for a single category:
7
- # * core (inverted) index
8
- # * weights index
9
- # * similarity index
10
- # * index configuration
11
- #
12
- # Indexed refers to them being indexed.
13
- # This class notably offers the methods:
14
- # * load
15
- # * clear
16
- #
17
- # To (re)load or clear the current indexes.
18
- #
19
- module Bundle
20
-
21
- class Base < ::Bundle
22
-
23
- # Loads all indexes.
24
- #
25
- def load
26
- load_inverted
27
- load_weights
28
- load_similarity
29
- load_configuration
30
- end
1
+ module Picky
2
+
3
+ module Indexed # :nodoc:all
4
+
5
+ # An indexed bundle is a number of memory/redis
6
+ # indexes that compose the indexes for a single category:
7
+ # * core (inverted) index
8
+ # * weights index
9
+ # * similarity index
10
+ # * index configuration
11
+ #
12
+ # Indexed refers to them being indexed.
13
+ # This class notably offers the methods:
14
+ # * load
15
+ # * clear
16
+ #
17
+ # To (re)load or clear the current indexes.
18
+ #
19
+ module Bundle
20
+
21
+ class Base < Picky::Bundle
22
+
23
+ # Loads all indexes.
24
+ #
25
+ def load
26
+ load_inverted
27
+ load_weights
28
+ load_similarity
29
+ load_configuration
30
+ end
31
+
32
+ # Clears all indexes.
33
+ #
34
+ def clear
35
+ clear_inverted
36
+ clear_weights
37
+ clear_similarity
38
+ clear_configuration
39
+ end
31
40
 
32
- # Clears all indexes.
33
- #
34
- def clear
35
- clear_inverted
36
- clear_weights
37
- clear_similarity
38
- clear_configuration
39
41
  end
40
42
 
41
43
  end