mongoid-haystack 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +446 -0
- data/lib/app/models/mongoid/haystack/count.rb +1 -0
- data/lib/app/models/mongoid/haystack/index.rb +1 -0
- data/lib/app/models/mongoid/haystack/sequence.rb +1 -0
- data/lib/app/models/mongoid/haystack/token.rb +1 -0
- data/lib/mongoid-haystack.rb +79 -0
- data/lib/mongoid-haystack/count.rb +28 -0
- data/lib/mongoid-haystack/index.rb +165 -0
- data/lib/mongoid-haystack/search.rb +96 -0
- data/lib/mongoid-haystack/sequence.rb +55 -0
- data/lib/mongoid-haystack/stemming.rb +79 -0
- data/lib/mongoid-haystack/stemming/stopwords/english.txt +32 -0
- data/lib/mongoid-haystack/stemming/stopwords/extended_english.txt +216 -0
- data/lib/mongoid-haystack/stemming/stopwords/full_danish.txt +94 -0
- data/lib/mongoid-haystack/stemming/stopwords/full_dutch.txt +101 -0
- data/lib/mongoid-haystack/stemming/stopwords/full_english.txt +174 -0
- data/lib/mongoid-haystack/stemming/stopwords/full_finnish.txt +0 -0
- data/lib/mongoid-haystack/stemming/stopwords/full_french.txt +155 -0
- data/lib/mongoid-haystack/stemming/stopwords/full_german.txt +231 -0
- data/lib/mongoid-haystack/stemming/stopwords/full_italian.txt +279 -0
- data/lib/mongoid-haystack/stemming/stopwords/full_norwegian.txt +176 -0
- data/lib/mongoid-haystack/stemming/stopwords/full_portuguese.txt +203 -0
- data/lib/mongoid-haystack/stemming/stopwords/full_russian.txt +101 -0
- data/lib/mongoid-haystack/stemming/stopwords/full_russiankoi8_r.txt +101 -0
- data/lib/mongoid-haystack/stemming/stopwords/full_spanish.txt +313 -0
- data/lib/mongoid-haystack/token.rb +71 -0
- data/lib/mongoid-haystack/util.rb +67 -0
- data/mongoid-haystack.gemspec +73 -0
- data/test/helper.rb +28 -0
- data/test/mongoid-haystack_test.rb +119 -0
- data/test/testing.rb +196 -0
- metadata +123 -0
@@ -0,0 +1,101 @@
|
|
1
|
+
Á
|
2
|
+
ÂÅÚ
|
3
|
+
ÂÏÌÅÅ
|
4
|
+
ÂÙ
|
5
|
+
ÂÙÌ
|
6
|
+
ÂÙÌÁ
|
7
|
+
ÂÙÌÉ
|
8
|
+
ÂÙÌÏ
|
9
|
+
ÂÙÔØ
|
10
|
+
×
|
11
|
+
×ÁÍ
|
12
|
+
×ÁÓ
|
13
|
+
×ÅÓØ
|
14
|
+
×Ï
|
15
|
+
×ÏÔ
|
16
|
+
×ÓÅ
|
17
|
+
×ÓÅÇÏ
|
18
|
+
×ÓÅÈ
|
19
|
+
×Ù
|
20
|
+
ÇÄÅ
|
21
|
+
ÄÁ
|
22
|
+
ÄÁÖÅ
|
23
|
+
ÄÌÑ
|
24
|
+
ÄÏ
|
25
|
+
ÅÇÏ
|
26
|
+
ÅÅ
|
27
|
+
ÅÊ
|
28
|
+
ÅÀ
|
29
|
+
ÅÓÌÉ
|
30
|
+
ÅÓÔØ
|
31
|
+
ÅÝÅ
|
32
|
+
ÖÅ
|
33
|
+
ÚÁ
|
34
|
+
ÚÄÅÓØ
|
35
|
+
É
|
36
|
+
ÉÚ
|
37
|
+
ÉÌÉ
|
38
|
+
ÉÍ
|
39
|
+
ÉÈ
|
40
|
+
Ë
|
41
|
+
ËÁË
|
42
|
+
ËÏ
|
43
|
+
ËÏÇÄÁ
|
44
|
+
ËÔÏ
|
45
|
+
ÌÉ
|
46
|
+
ÌÉÂÏ
|
47
|
+
ÍÎÅ
|
48
|
+
ÍÏÖÅÔ
|
49
|
+
ÍÙ
|
50
|
+
ÎÁ
|
51
|
+
ÎÁÄÏ
|
52
|
+
ÎÁÛ
|
53
|
+
ÎÅ
|
54
|
+
ÎÅÇÏ
|
55
|
+
ÎÅÅ
|
56
|
+
ÎÅÔ
|
57
|
+
ÎÉ
|
58
|
+
ÎÉÈ
|
59
|
+
ÎÏ
|
60
|
+
ÎÕ
|
61
|
+
Ï
|
62
|
+
ÏÂ
|
63
|
+
ÏÄÎÁËÏ
|
64
|
+
ÏÎ
|
65
|
+
ÏÎÁ
|
66
|
+
ÏÎÉ
|
67
|
+
ÏÎÏ
|
68
|
+
ÏÔ
|
69
|
+
ÏÞÅÎØ
|
70
|
+
ÐÏ
|
71
|
+
ÐÏÄ
|
72
|
+
ÐÒÉ
|
73
|
+
Ó
|
74
|
+
ÓÏ
|
75
|
+
ÔÁË
|
76
|
+
ÔÁËÖÅ
|
77
|
+
ÔÁËÏÊ
|
78
|
+
ÔÁÍ
|
79
|
+
ÔÅ
|
80
|
+
ÔÅÍ
|
81
|
+
ÔÏ
|
82
|
+
ÔÏÇÏ
|
83
|
+
ÔÏÖÅ
|
84
|
+
ÔÏÊ
|
85
|
+
ÔÏÌØËÏ
|
86
|
+
ÔÏÍ
|
87
|
+
ÔÙ
|
88
|
+
Õ
|
89
|
+
ÕÖÅ
|
90
|
+
ÈÏÔÑ
|
91
|
+
ÞÅÇÏ
|
92
|
+
ÞÅÊ
|
93
|
+
ÞÅÍ
|
94
|
+
ÞÔÏ
|
95
|
+
ÞÔÏÂÙ
|
96
|
+
ÞØÅ
|
97
|
+
ÞØÑ
|
98
|
+
ÜÔÁ
|
99
|
+
ÜÔÉ
|
100
|
+
ÜÔÏ
|
101
|
+
Ñ
|
@@ -0,0 +1,313 @@
|
|
1
|
+
de
|
2
|
+
la
|
3
|
+
que
|
4
|
+
el
|
5
|
+
en
|
6
|
+
y
|
7
|
+
a
|
8
|
+
los
|
9
|
+
del
|
10
|
+
se
|
11
|
+
las
|
12
|
+
por
|
13
|
+
un
|
14
|
+
para
|
15
|
+
con
|
16
|
+
no
|
17
|
+
una
|
18
|
+
su
|
19
|
+
al
|
20
|
+
lo
|
21
|
+
como
|
22
|
+
más
|
23
|
+
pero
|
24
|
+
sus
|
25
|
+
le
|
26
|
+
ya
|
27
|
+
o
|
28
|
+
este
|
29
|
+
sí
|
30
|
+
porque
|
31
|
+
esta
|
32
|
+
entre
|
33
|
+
cuando
|
34
|
+
muy
|
35
|
+
sin
|
36
|
+
sobre
|
37
|
+
también
|
38
|
+
me
|
39
|
+
hasta
|
40
|
+
hay
|
41
|
+
donde
|
42
|
+
quien
|
43
|
+
desde
|
44
|
+
todo
|
45
|
+
nos
|
46
|
+
durante
|
47
|
+
todos
|
48
|
+
uno
|
49
|
+
les
|
50
|
+
ni
|
51
|
+
contra
|
52
|
+
otros
|
53
|
+
ese
|
54
|
+
eso
|
55
|
+
ante
|
56
|
+
ellos
|
57
|
+
e
|
58
|
+
esto
|
59
|
+
mí
|
60
|
+
antes
|
61
|
+
algunos
|
62
|
+
qué
|
63
|
+
unos
|
64
|
+
yo
|
65
|
+
otro
|
66
|
+
otras
|
67
|
+
otra
|
68
|
+
él
|
69
|
+
tanto
|
70
|
+
esa
|
71
|
+
estos
|
72
|
+
mucho
|
73
|
+
quienes
|
74
|
+
nada
|
75
|
+
muchos
|
76
|
+
cual
|
77
|
+
poco
|
78
|
+
ella
|
79
|
+
estar
|
80
|
+
estas
|
81
|
+
algunas
|
82
|
+
algo
|
83
|
+
nosotros
|
84
|
+
mi
|
85
|
+
mis
|
86
|
+
tú
|
87
|
+
te
|
88
|
+
ti
|
89
|
+
tu
|
90
|
+
tus
|
91
|
+
ellas
|
92
|
+
nosotras
|
93
|
+
vosostros
|
94
|
+
vosostras
|
95
|
+
os
|
96
|
+
mío
|
97
|
+
mía
|
98
|
+
míos
|
99
|
+
mías
|
100
|
+
tuyo
|
101
|
+
tuya
|
102
|
+
tuyos
|
103
|
+
tuyas
|
104
|
+
suyo
|
105
|
+
suya
|
106
|
+
suyos
|
107
|
+
suyas
|
108
|
+
nuestro
|
109
|
+
nuestra
|
110
|
+
nuestros
|
111
|
+
nuestras
|
112
|
+
vuestro
|
113
|
+
vuestra
|
114
|
+
vuestros
|
115
|
+
vuestras
|
116
|
+
esos
|
117
|
+
esas
|
118
|
+
estoy
|
119
|
+
estás
|
120
|
+
está
|
121
|
+
estamos
|
122
|
+
estáis
|
123
|
+
están
|
124
|
+
esté
|
125
|
+
estés
|
126
|
+
estemos
|
127
|
+
estéis
|
128
|
+
estén
|
129
|
+
estaré
|
130
|
+
estarás
|
131
|
+
estará
|
132
|
+
estaremos
|
133
|
+
estaréis
|
134
|
+
estarán
|
135
|
+
estaría
|
136
|
+
estarías
|
137
|
+
estaríamos
|
138
|
+
estaríais
|
139
|
+
estarían
|
140
|
+
estaba
|
141
|
+
estabas
|
142
|
+
estábamos
|
143
|
+
estabais
|
144
|
+
estaban
|
145
|
+
estuve
|
146
|
+
estuviste
|
147
|
+
estuvo
|
148
|
+
estuvimos
|
149
|
+
estuvisteis
|
150
|
+
estuvieron
|
151
|
+
estuviera
|
152
|
+
estuvieras
|
153
|
+
estuviéramos
|
154
|
+
estuvierais
|
155
|
+
estuvieran
|
156
|
+
estuviese
|
157
|
+
estuvieses
|
158
|
+
estuviésemos
|
159
|
+
estuvieseis
|
160
|
+
estuviesen
|
161
|
+
estando
|
162
|
+
estado
|
163
|
+
estada
|
164
|
+
estados
|
165
|
+
estadas
|
166
|
+
estad
|
167
|
+
he
|
168
|
+
has
|
169
|
+
ha
|
170
|
+
hemos
|
171
|
+
habéis
|
172
|
+
han
|
173
|
+
haya
|
174
|
+
hayas
|
175
|
+
hayamos
|
176
|
+
hayáis
|
177
|
+
hayan
|
178
|
+
habré
|
179
|
+
habrás
|
180
|
+
habrá
|
181
|
+
habremos
|
182
|
+
habréis
|
183
|
+
habrán
|
184
|
+
habría
|
185
|
+
habrías
|
186
|
+
habríamos
|
187
|
+
habríais
|
188
|
+
habrían
|
189
|
+
había
|
190
|
+
habías
|
191
|
+
habíamos
|
192
|
+
habíais
|
193
|
+
habían
|
194
|
+
hube
|
195
|
+
hubiste
|
196
|
+
hubo
|
197
|
+
hubimos
|
198
|
+
hubisteis
|
199
|
+
hubieron
|
200
|
+
hubiera
|
201
|
+
hubieras
|
202
|
+
hubiéramos
|
203
|
+
hubierais
|
204
|
+
hubieran
|
205
|
+
hubiese
|
206
|
+
hubieses
|
207
|
+
hubiésemos
|
208
|
+
hubieseis
|
209
|
+
hubiesen
|
210
|
+
habiendo
|
211
|
+
habido
|
212
|
+
habida
|
213
|
+
habidos
|
214
|
+
habidas
|
215
|
+
soy
|
216
|
+
eres
|
217
|
+
es
|
218
|
+
somos
|
219
|
+
sois
|
220
|
+
son
|
221
|
+
sea
|
222
|
+
seas
|
223
|
+
seamos
|
224
|
+
seáis
|
225
|
+
sean
|
226
|
+
seré
|
227
|
+
serás
|
228
|
+
será
|
229
|
+
seremos
|
230
|
+
seréis
|
231
|
+
serán
|
232
|
+
sería
|
233
|
+
serías
|
234
|
+
seríamos
|
235
|
+
seríais
|
236
|
+
serían
|
237
|
+
era
|
238
|
+
eras
|
239
|
+
éramos
|
240
|
+
erais
|
241
|
+
eran
|
242
|
+
fui
|
243
|
+
fuiste
|
244
|
+
fue
|
245
|
+
fuimos
|
246
|
+
fuisteis
|
247
|
+
fueron
|
248
|
+
fuera
|
249
|
+
fueras
|
250
|
+
fuéramos
|
251
|
+
fuerais
|
252
|
+
fueran
|
253
|
+
fuese
|
254
|
+
fueses
|
255
|
+
fuésemos
|
256
|
+
fueseis
|
257
|
+
fuesen
|
258
|
+
sintiendo
|
259
|
+
sentido
|
260
|
+
sentida
|
261
|
+
sentidos
|
262
|
+
sentidas
|
263
|
+
siente
|
264
|
+
sentid
|
265
|
+
tengo
|
266
|
+
tienes
|
267
|
+
tiene
|
268
|
+
tenemos
|
269
|
+
tenéis
|
270
|
+
tienen
|
271
|
+
tenga
|
272
|
+
tengas
|
273
|
+
tengamos
|
274
|
+
tengáis
|
275
|
+
tengan
|
276
|
+
tendré
|
277
|
+
tendrás
|
278
|
+
tendrá
|
279
|
+
tendremos
|
280
|
+
tendréis
|
281
|
+
tendrán
|
282
|
+
tendría
|
283
|
+
tendrías
|
284
|
+
tendríamos
|
285
|
+
tendríais
|
286
|
+
tendrían
|
287
|
+
tenía
|
288
|
+
tenías
|
289
|
+
teníamos
|
290
|
+
teníais
|
291
|
+
tenían
|
292
|
+
tuve
|
293
|
+
tuviste
|
294
|
+
tuvo
|
295
|
+
tuvimos
|
296
|
+
tuvisteis
|
297
|
+
tuvieron
|
298
|
+
tuviera
|
299
|
+
tuvieras
|
300
|
+
tuviéramos
|
301
|
+
tuvierais
|
302
|
+
tuvieran
|
303
|
+
tuviese
|
304
|
+
tuvieses
|
305
|
+
tuviésemos
|
306
|
+
tuvieseis
|
307
|
+
tuviesen
|
308
|
+
teniendo
|
309
|
+
tenido
|
310
|
+
tenida
|
311
|
+
tenidos
|
312
|
+
tenidas
|
313
|
+
tened
|
@@ -0,0 +1,71 @@
|
|
1
|
+
module Mongoid
|
2
|
+
module Haystack
|
3
|
+
class Token
|
4
|
+
include Mongoid::Document
|
5
|
+
|
6
|
+
class << Token
|
7
|
+
def values_for(*args, &block)
|
8
|
+
string = args.join(' ')
|
9
|
+
values = string.scan(/[^\s]+/)
|
10
|
+
Stemming.stem(*values)
|
11
|
+
end
|
12
|
+
|
13
|
+
def add(value)
|
14
|
+
token = nil
|
15
|
+
created = nil
|
16
|
+
|
17
|
+
Haystack.find_or_create(
|
18
|
+
proc do
|
19
|
+
token = where(:value => value).first
|
20
|
+
created = false if token
|
21
|
+
token
|
22
|
+
end,
|
23
|
+
|
24
|
+
proc do
|
25
|
+
token = create!(:value => value)
|
26
|
+
created = true if token
|
27
|
+
token
|
28
|
+
end
|
29
|
+
)
|
30
|
+
|
31
|
+
token.inc(:count, 1)
|
32
|
+
|
33
|
+
Count[:tokens].inc(1) #if created
|
34
|
+
|
35
|
+
token
|
36
|
+
end
|
37
|
+
|
38
|
+
def sequence
|
39
|
+
Sequence.for(Token.name.scan(/[^:]+/).join('.').downcase)
|
40
|
+
end
|
41
|
+
|
42
|
+
def next_hex_id
|
43
|
+
"0x#{ hex = sequence.next.to_s(16) }"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
field(:_id, :type => String, :default => proc{ Token.next_hex_id })
|
48
|
+
field(:value, :type => String)
|
49
|
+
field(:count, :type => Integer, :default => 0)
|
50
|
+
|
51
|
+
index({:value => 1}, {:unique => true})
|
52
|
+
index({:count => 1})
|
53
|
+
|
54
|
+
def frequency(n_tokens = Count[:tokens].value.to_f)
|
55
|
+
(count / n_tokens).round(2)
|
56
|
+
end
|
57
|
+
|
58
|
+
def frequency_bin(n_tokens = Count[:tokens].value.to_f)
|
59
|
+
(frequency(n_tokens) * 10).truncate
|
60
|
+
end
|
61
|
+
|
62
|
+
def rarity(n_tokens = Count[:tokens].value.to_f)
|
63
|
+
((n_tokens - count) / n_tokens).round(2)
|
64
|
+
end
|
65
|
+
|
66
|
+
def rarity_bin(n_tokens = Count[:tokens].value.to_f)
|
67
|
+
(rarity(n_tokens) * 10).truncate
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|