philologic-client 0.0.9 → 0.0.10

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.
@@ -1,5 +1,11 @@
1
1
  = Philologic::Client History
2
2
 
3
+ == 2012-01-18 v0.0.10
4
+
5
+ * Added +Philologic::TableRow+
6
+ * +Philologic::Client#frequency()+ improvements
7
+ * Added +Philologic::Client#colocation()+
8
+
3
9
  == 2012-01-12 v0.0.9
4
10
 
5
11
  * Added +Philologic::Document#html()+
@@ -15,21 +15,34 @@
15
15
  html = doc.html
16
16
  txt = doc.text
17
17
 
18
- # Simple search
18
+
19
+ # Simple (concordance) search
19
20
  client.search('sartre').each { |result| puts result }
20
21
 
21
22
  # Search by arbitrary key-value pairs
22
23
  client.search( :query => 'sartre', :foo => 1 ).each { |result| puts result }
23
24
 
25
+
26
+ # Simple collocation table search.
27
+ client.collocation('sartre').each { |result| puts result }
28
+
29
+ # Collocation table search by arbitrary key-value pairs
30
+ client.collocation( :query => 'sartre', :foo => 1 ).each { |result| puts result }
31
+
32
+ # Links for first result in collocation table search
33
+ client.collocation('sartre').first.links.each { |link| puts link }
34
+
35
+
24
36
  # Simple frequency table search.
25
37
  client.frequency('sartre').each { |result| puts result }
26
38
 
27
- # Frequency search by arbitrary key-value pairs
39
+ # Frequency table search by arbitrary key-value pairs
28
40
  client.frequency( :query => 'sartre', :foo => 1 ).each { |result| puts result }
29
41
 
30
42
  # Links for first result in frequency table search
31
43
  client.frequency('sartre').first.links.each { |link| puts link }
32
44
 
45
+
33
46
  # Get/Set encoding
34
47
  encoding = client.encoding
35
48
  client.encoding = 'utf-8' # Default
@@ -58,6 +71,6 @@ https://github.com/blairc/philologic-client/
58
71
  * Add collocation table searching
59
72
  * Add +children+ to Philologic::Document
60
73
  * Add +parent+ to Philologic::Document
61
- * Unify (as much as possible) Philologic::Document, Philologic::Key, Philologic::Link
74
+ * Unify (as much as possible) Philologic::Document, Philologic::Link, Philologic::TableRow
62
75
  * Cache results?
63
76
 
@@ -23,21 +23,34 @@ require 'open-uri'
23
23
  # html = doc.html
24
24
  # txt = doc.text
25
25
  #
26
- # # Simple search
26
+ #
27
+ # # Simple (concordance) search
27
28
  # client.search('sartre').each { |result| puts result }
28
29
  #
29
30
  # # Search by arbitrary key-value pairs
30
31
  # client.search( :query => 'sartre', :foo => 1 ).each { |result| puts result }
31
32
  #
33
+ #
34
+ # # Simple collocation table search.
35
+ # client.collocation('sartre').each { |result| puts result }
36
+ #
37
+ # # Collocation table search by arbitrary key-value pairs
38
+ # client.collocation( :query => 'sartre', :foo => 1 ).each { |result| puts result }
39
+ #
40
+ # # Links for first result in collocation table search
41
+ # client.collocation('sartre').first.links.each { |link| puts link }
42
+ #
43
+ #
32
44
  # # Simple frequency table search.
33
45
  # client.frequency('sartre').each { |result| puts result }
34
46
  #
35
- # # Frequency search by arbitrary key-value pairs
47
+ # # Frequency table search by arbitrary key-value pairs
36
48
  # client.frequency( :query => 'sartre', :foo => 1 ).each { |result| puts result }
37
49
  #
38
50
  # # Links for first result in frequency table search
39
51
  # client.frequency('sartre').first.links.each { |link| puts link }
40
52
  #
53
+ #
41
54
  # # Get/Set encoding
42
55
  # encoding = client.encoding
43
56
  # client.encoding = 'utf-8' # Default
@@ -66,7 +79,7 @@ require 'open-uri'
66
79
  # * Add collocation table searching
67
80
  # * Add +children+ to Philologic::Document
68
81
  # * Add +parent+ to Philologic::Document
69
- # * Unify (as much as possible) Philologic::Document, Philologic::Key, Philologic::Link
82
+ # * Unify (as much as possible) Philologic::Document, Philologic::Link, Philologic::TableRow
70
83
  # * Cache results?
71
84
  #
72
85
  module Philologic # :nodoc:
@@ -115,6 +128,21 @@ module Philologic # :nodoc:
115
128
  return doc.kind_of?(Array) ? doc : nil
116
129
  end
117
130
 
131
+ #
132
+ # Return +Array+ of Philologic::TableRow objects.
133
+ #
134
+ # *NOTE:* Currently only returns the first page of results by default.
135
+ #
136
+ # Params:
137
+ # +query+:: Search for this query +String+ or +Hash+ key-value pairs.
138
+ #
139
+ def collocation(query)
140
+ raise('no query specified') if ( query.nil? || !( [ Hash, String ].include?( query.class ) )) || query.empty?
141
+ defaults = { :report => 'frequency', :field => 'collocates' }
142
+ doc = search( query.kind_of?(String) ? defaults.merge(:query => query) : defaults.merge(query) )
143
+ return doc.kind_of?(Array) ? doc : nil
144
+ end
145
+
118
146
  #
119
147
  # Return Philologic::Document object or +nil+.
120
148
  #
@@ -127,7 +155,7 @@ module Philologic # :nodoc:
127
155
  end
128
156
 
129
157
  #
130
- # Return +Array+ of TODO objects.
158
+ # Return +Array+ of Philologic::TableRow objects.
131
159
  #
132
160
  # *NOTE:* Currently only returns the first page of results by default.
133
161
  #
@@ -196,10 +224,10 @@ module Philologic # :nodoc:
196
224
  return Philologic::Document.new( doc.css('div.philologic_object').first )
197
225
  elsif !doc.css('table.philologic_frequency').first.nil?
198
226
  results = []
199
- doc.css('table.philologic_frequency').css('td.philologic_frequency_key').each do |key|
200
- key.css('a').each do |a|
201
- results << Philologic::Key.new(self, a) # TODO Why not a select?
202
- end
227
+ # Results are keyed off of this field.
228
+ field = doc.css('table.philologic_frequency').first.attributes['title'].value
229
+ doc.css('table.philologic_frequency').css('tr.philologic_frequency_row').each do |row|
230
+ results << Philologic::TableRow.new(self, field, row)
203
231
  end
204
232
  return results
205
233
  # TODO else
@@ -260,12 +288,12 @@ module Philologic # :nodoc:
260
288
 
261
289
 
262
290
  #
263
- # Philologic key.
291
+ # Philologic link.
264
292
  #
265
- class Key
293
+ class Link
266
294
 
267
295
  #
268
- # Initialize Philologic::Key object.
296
+ # Initialize Philologic::Link object.
269
297
  #
270
298
  # Params:
271
299
  # +client+:: Philologic::Client object
@@ -274,84 +302,116 @@ module Philologic # :nodoc:
274
302
  def initialize(client, document)
275
303
  @client = client
276
304
  @doc = document
305
+ # TODO Prefer lazy initialization?
306
+ @properties = {}
307
+ @doc.css('span.philologic_property').each do |span|
308
+ @properties[ span.attributes['title'].value ] = span.children.text
309
+ end
277
310
  end
278
311
 
279
312
  #
280
313
  # Returns value of attribute +key+ or +nil+.
281
314
  #
282
315
  def [](key)
283
- @doc.attributes.key?(key) ? @doc.attributes[key].value : nil
284
- end
285
-
286
- #
287
- # Returns Philologic::Link objects referenced by this Philologic::Key object.
288
- #
289
- def links
290
- q = self['href'].sub( %r{^\./\?}, '' ).split('&')
291
- @client.search( Hash[ *q.collect { |v| v.split('=', 2) }.flatten ] )
316
+ @doc.attributes.key?(key) ? @doc.attributes[key].value : @properties[key]
292
317
  end
293
318
 
294
319
  #
295
- # Returns key text.
320
+ # Returns Philologic::Document referenced by this Philologic::Link object.
296
321
  #
297
- def text
298
- @text = @doc.text.lstrip.rstrip if @text.nil?
299
- @text
322
+ def document
323
+ @client.document( self['href'] )
300
324
  end
301
325
 
302
326
  #
303
327
  # Return String representation of object.
304
328
  #
305
329
  def to_s
306
- [ self['href'], self.text ].join(' | ')
330
+ [ self['href'], self['title'], self['author'] ].join(' | ')
307
331
  end
308
332
 
309
- end # class Philologic::Key
333
+ end # class Philologic::Link
310
334
 
311
335
 
312
336
  #
313
- # Philologic link.
337
+ # Philologic table row.
314
338
  #
315
- class Link
339
+ class TableRow
316
340
 
317
341
  #
318
- # Initialize Philologic::Link object.
342
+ # Get +count+
343
+ #
344
+ attr_reader :count
345
+
346
+ #
347
+ # Get +field+
348
+ #
349
+ attr_reader :field
350
+
351
+ #
352
+ # Get +href+
353
+ #
354
+ attr_reader :href
355
+
356
+ #
357
+ # Get +text+
358
+ #
359
+ attr_reader :text
360
+
361
+
362
+ #
363
+ # Initialize Philologic::TableRow object.
319
364
  #
320
365
  # Params:
321
366
  # +client+:: Philologic::Client object
367
+ # +field+:: Row is keyed off of this field
322
368
  # +document+:: Nokogiri document
323
369
  #
324
- def initialize(client, document)
325
- @client = client
326
- @doc = document
327
- # TODO Prefer lazy initialization?
328
- @properties = {}
329
- @doc.css('span.philologic_property').each do |span|
330
- @properties[ span.attributes['title'].value ] = span.children.text
370
+ def initialize(client, field, document)
371
+ @client = client
372
+ @field = field
373
+ @doc = document
374
+
375
+ @doc.css('td.philologic_frequency_key').each do |key|
376
+ key.css('a').each do |a|
377
+ @href = a.attributes['href'].value
378
+ @text = a.text.lstrip.rstrip
379
+ break
380
+ end
381
+ end
382
+ raise('invalid TableRow - no href') unless @href
383
+ raise('invalid TableRow - no text') unless @text
384
+
385
+ @doc.css('td.philologic_frequency_value').each do |value|
386
+ @count = value.text.to_i
387
+ break
331
388
  end
389
+ raise('invalid TableRow - no count') unless @count
390
+
332
391
  end
333
392
 
334
393
  #
335
394
  # Returns value of attribute +key+ or +nil+.
336
395
  #
337
396
  def [](key)
338
- @doc.attributes.key?(key) ? @doc.attributes[key].value : @properties[key]
397
+ @doc.attributes.key?(key) ? @doc.attributes[key].value : nil
339
398
  end
340
399
 
341
400
  #
342
- # Returns Philologic::Document referenced by this Philologic::Link object.
401
+ # Returns Philologic::Link objects referenced by this Philologic::TableRow object.
343
402
  #
344
- def document
345
- @client.document( self['href'] )
403
+ def links
404
+ q = @href.sub( %r{^\./\?}, '' ).split('&')
405
+ @client.search( Hash[ *q.collect { |v| v.split('=', 2) }.flatten ] )
346
406
  end
347
407
 
348
408
  #
349
409
  # Return String representation of object.
350
410
  #
351
411
  def to_s
352
- [ self['href'], self['title'], self['author'] ].join(' | ')
412
+ [ @field, @count, @text ].join(' | ')
353
413
  end
354
414
 
355
- end # class Philologic::Link
415
+ end # class Philologic::TableRow
356
416
 
357
417
  end # module Philologic
@@ -5,6 +5,6 @@ module Philologic
5
5
  #
6
6
  # Philologic::Client version
7
7
  #
8
- VERSION = '0.0.9'
8
+ VERSION = '0.0.10'
9
9
  end
10
10
  end
@@ -0,0 +1,145 @@
1
+ <html><head><title>TLFsorted: search for sartre</title></head><body><div class='philologic_concordance'><p class='description'>running query for sartre @ TLFsorted with arg 0. displaying 1 - 48 of 48 hits.</p><ol start='1'><li class='philologic_occurence'>
2
+ <a class='philologic_cite' href='./1839/3/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
3
+ ... qui se destinait à la psychiatrie. À la surprise générale, Jean-Paul <span class="hilite">Sartre</span> avait échoué à l'écrit. Le concours me parut difficile, mais je ne perdis pas co...</li>
4
+ <li class='philologic_occurence'>
5
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
6
+ ...ades. Je les connaissais presque tous. Seul me demeurait hermétique le clan formé par <span class="hilite">Sartre</span>, Nizan et Herbaud; ils ne frayaient avec personne; ils n'assistaient q...</li>
7
+ <li class='philologic_occurence'>
8
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
9
+ ...lf et derrière ses grosses lunettes d'écaille je lui trouvais un regard très intimidant. <span class="hilite">Sartre</span> n'avait pas une mauvaise tête, mais on disait qu'il était le plus terrible des trois e...</li>
10
+ <li class='philologic_occurence'>
11
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
12
+ ...me paraissait accessible: Herbaud. Il était marié lui aussi. En compagnie de <span class="hilite">Sartre</span> et de Nizan, il m'ignorait. Quand je le rencontrais seul, nous échangions ...</li>
13
+ <li class='philologic_occurence'>
14
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
15
+ ...existerais jamais. Un après-midi, je l'avais aperçu rue Soufflot, accompagné de <span class="hilite">Sartre</span> et de Nizan, et donnant le bras à une femme en gris: je m'étais sentie exclue...</li>
16
+ <li class='philologic_occurence'>
17
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
18
+ ...t il était monté à Paris pour préparer normale. Il avait connu en hypo-khâgne <span class="hilite">Sartre</span> et Nizan et il me parla beaucoup d'eux; il admirait Nizan, pour sa dis...</li>
19
+ <li class='philologic_occurence'>
20
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
21
+ ...; il admirait Nizan, pour sa distinction désinvolte, mais il était surtout lié avec <span class="hilite">Sartre</span> qu'il disait prodigieusement intéressant. Nos autres condisciples, il les méprisai...</li>
22
+ <li class='philologic_occurence'>
23
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
24
+ ...ditais ainsi sur mon destin, j'aperçus Herbaud qui longeait le bassin en compagnie de <span class="hilite">Sartre</span>: il me vit, et il m'ignora. Mystère et mensonge des journaux intimes: je ne mention...</li>
25
+ <li class='philologic_occurence'>
26
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
27
+ ... la Sorbonne. Vêtu d'un costume d'été beige clair, il était assis à côté de <span class="hilite">Sartre</span> sur le rebord d'une fenêtre. Il me tendit la main, dans un long geste affectueux, e...</li>
28
+ <li class='philologic_occurence'>
29
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
30
+ ...r en faisant allusion à notre rencontre, au Luxembourg; il aurait aimé me présenter <span class="hilite">Sartre</span>, "mais si je ne respecte pas les ruminations de Clairaut, dit-il, je ne me perm...</li>
31
+ <li class='philologic_occurence'>
32
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
33
+ ... Il me remit, de la part de <span class="hilite">Sartre</span>, un dessin que celui-ci m'avait dédié et qui représentait: Leibniz au bai...</li>
34
+ <li class='philologic_occurence'>
35
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
36
+ ...cosmologie eugénique", inventée à partir du potomak, et à laquelle il avait rallié <span class="hilite">Sartre</span> et Nizan; tous trois appartenaient à la plus haute caste, celle des eugènes, ...</li>
37
+ <li class='philologic_occurence'>
38
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
39
+ ...le est très bien d'ailleurs votre voix, mais elle est rauque. Elle nous divertit beaucoup, <span class="hilite">Sartre</span> et moi." Je découvris que j'avais une démarche, une voix: c'était nouveau. J...</li>
40
+ <li class='philologic_occurence'>
41
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
42
+ ...reuves; puis il comptait quitter Paris, et à son retour il préparerait son oral avec <span class="hilite">Sartre</span> et Nizan. Finies, nos rencontres à la nationale: comme j'allais les regret...</li>
43
+ <li class='philologic_occurence'>
44
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
45
+ ...Orne; à son retour, dans une dizaine de jours, il préparerait l'oral du concours avec <span class="hilite">Sartre</span> et Nizan qui m'invitaient cordialement à me joindre à eux. D'ici là, ...</li>
46
+ <li class='philologic_occurence'>
47
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
48
+ ...artre et Nizan qui m'invitaient cordialement à me joindre à eux. D'ici là, <span class="hilite">Sartre</span> voulait faire ma connaissance: il me proposait un rendez-vous pour un soir prochain. ...</li>
49
+ <li class='philologic_occurence'>
50
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
51
+ ... Mais Herbaud me demanda de ne pas y aller: <span class="hilite">Sartre</span> profiterait de son absence pour m'accaparer." Je ne veux pas qu'on touche à mes pl...</li>
52
+ <li class='philologic_occurence'>
53
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
54
+ ...nts " me dit Herbaud d'un ton complice. Nous décidâmes que ma soeur retrouverait <span class="hilite">Sartre</span> à l'heure et à l'endroit prévus; elle lui dirait que j'étais partie brusquement pour...</li>
55
+ <li class='philologic_occurence'>
56
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
57
+ ... je flânai, je me donnai du bon temps. Pendant la soirée que Poupette passa avec <span class="hilite">Sartre</span>, je récapitulai joyeusement l'année qui venait de s'écouler, et toute ma jeunesse; je...</li>
58
+ <li class='philologic_occurence'>
59
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
60
+ ...ent en ce monde. Quand ma soeur rentra, elle me félicita d'être restée à la maison. <span class="hilite">Sartre</span> avait courtoisement encaissé notre mensonge; il l'avait emmenée au cinéma et s'était...</li>
61
+ <li class='philologic_occurence'>
62
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
63
+ ...tait montré très aimable; mais la conversation avait chômé." Tout ce qu'il raconte de <span class="hilite">Sartre</span>, Herbaud l'invente lui-même " me dit ma soeur qui connaissait un peu Herba...</li>
64
+ <li class='philologic_occurence'>
65
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
66
+ ...travailler Leibniz. J'étais un peu effarouchée quand j'entrai dans la chambre de <span class="hilite">Sartre</span>; il y avait un grand désordre de livres et de papiers, des mégots dans tous les coins,...</li>
67
+ <li class='philologic_occurence'>
68
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
69
+ ...and désordre de livres et de papiers, des mégots dans tous les coins, une énorme fumée. <span class="hilite">Sartre</span> m'accueillit mondainement; il fumait la pipe. Silencieux, une cigarette collée au c...</li>
70
+ <li class='philologic_occurence'>
71
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
72
+ ...elai. Leibniz nous ennuyait et il fut décidé que nous le connaissions assez. <span class="hilite">Sartre</span> se chargea de nous expliquer le contrat social, sur lequel il avait des lumière...</li>
73
+ <li class='philologic_occurence'>
74
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
75
+ ...ement Herbaud tandis que Nizan contemplait ses ongles d'un air absorbé; mais <span class="hilite">Sartre</span> avait toujours le dessus. Impossible de lui en vouloir: il se mettait en quatre pour...</li>
76
+ <li class='philologic_occurence'>
77
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
78
+ ... turnes de l'école normale, je grimpai rituellement sur les toits. Pendant ces promenades, <span class="hilite">Sartre</span> et Herbaud chantaient à pleine ...</li>
79
+ <li class='philologic_occurence'>
80
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
81
+ ... titre d'un chapitre de Descartes: "de Dieu. Derechef qu'il existe." <span class="hilite">Sartre</span> avait une belle voix et un vaste répertoire: old man river et tous les airs de ...</li>
82
+ <li class='philologic_occurence'>
83
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
84
+ ... De Beauvoir." "Bien, bien", fit Nizan d'un ton sardonique, et <span class="hilite">Sartre</span> dit: "soit " avec bonhomie. Herbaud était morose, ce jour-là, parce qu'il...</li>
85
+ <li class='philologic_occurence'>
86
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
87
+ ...de Michel-Ange. Puis il me parla des différences qui le distinguaient de <span class="hilite">Sartre</span> et de Nizan. Il se donnait sans arrière-pensée aux joies de ce monde: les...</li>
88
+ <li class='philologic_occurence'>
89
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
90
+ ...nature, les voyages, les intrigues et les plaisirs." Eux, ils veulent toujours comprendre; <span class="hilite">Sartre</span> surtout " me dit-il. Il ajouta sur un ton de frayeur admirative: "Sartre, s...</li>
91
+ <li class='philologic_occurence'>
92
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
93
+ ...mprendre; Sartre surtout " me dit-il. Il ajouta sur un ton de frayeur admirative: "<span class="hilite">Sartre</span>, sauf peut-être quand il dort, il pense tout le temps! " Il accepta que Sartre...</li>
94
+ <li class='philologic_occurence'>
95
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
96
+ ...: "Sartre, sauf peut-être quand il dort, il pense tout le temps! " Il accepta que <span class="hilite">Sartre</span> passât avec nous la soirée du 14 juillet. Après un dîner dans un restaurant alsa...</li>
97
+ <li class='philologic_occurence'>
98
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
99
+ ...urant alsacien, nous regardâmes le feu d'artifice, assis sur une pelouse de la cité. Puis <span class="hilite">Sartre</span>, dont la munificence était légendaire, nous embarqua dans un taxi, et, au falstaff, ru...</li>
100
+ <li class='philologic_occurence'>
101
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
102
+ ...ontaient un tas d'histoires. J'étais aux anges. Ma soeur s'était trompée: je trouvai <span class="hilite">Sartre</span> encore plus amusant qu'Herbaud; néanmoins, nous convînmes tous trois que celu...</li>
103
+ <li class='philologic_occurence'>
104
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
105
+ ...Je vous aime vraiment beaucoup, Castor " me disait-il. Comme je devais dîner avec <span class="hilite">Sartre</span> chez les Nizan, et qu'il n'était pas libre, il me demanda avec une tendre auto...</li>
106
+ <li class='philologic_occurence'>
107
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
108
+ ...endemain, je me dirigeai vers la Sorbonne le coeur battant; à la porte, je rencontrai <span class="hilite">Sartre</span>: j'étais admissible ainsi que Nizan et lui. Herbaud avait échou..</li>
109
+ <li class='philologic_occurence'>
110
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
111
+ ...e l'aie revu: "tu diras au Castor tout le bonheur que je lui souhaite " écrivit-il à <span class="hilite">Sartre</span> dans un pneu où il l'avisait de son départ. Il réapparut une semaine plus tard, e...</li>
112
+ <li class='philologic_occurence'>
113
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
114
+ ...ions tous deux que j'avais menti. "À partir de maintenant, je vous prends en main " me dit <span class="hilite">Sartre</span> quand il m'eut annoncé mon admissibilité. Il avait le goût des amitiés féminine...</li>
115
+ <li class='philologic_occurence'>
116
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
117
+ ... plus souvent nous nous promenions tous les deux seuls. Sur les quais de la Seine, <span class="hilite">Sartre</span> m'achetait des pardaillan et des fantomas qu'il préférait de loin à l...</li>
118
+ <li class='philologic_occurence'>
119
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
120
+ ...nd ils prétendaient m'expliquer, les autres gens m'annexaient à leur monde, ils m'irritaient; <span class="hilite">Sartre</span> au contraire essayait de me situer dans mon propre système, il me comprenait à la lumi...</li>
121
+ <li class='philologic_occurence'>
122
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
123
+ ...ments, les vies dangereuses, les hommes perdus, les excès d'alcool, de drogue, de passion. <span class="hilite">Sartre</span> soutenait que, quand on a quelque chose à dire, tout gaspillage est criminel. L'oeu...</li>
124
+ <li class='philologic_occurence'>
125
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
126
+ ... par les nouvelles littéraires. " Nous avons reçu de J-P <span class="hilite">Sartre</span> des pages remarquables", écrivit Roland Alix en présentant sa répon...</li>
127
+ <li class='philologic_occurence'>
128
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
129
+ ...ent qui se supposerait libre." Comparant sa génération à celle qui l'avait précédée, <span class="hilite">Sartre</span> concluait: "nous sommes plus malheureux, mais plus sympathiques." Cette dernière p...</li>
130
+ <li class='philologic_occurence'>
131
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
132
+ ...x, mais plus sympathiques." Cette dernière phrase m'avait fait rire; mais en causant avec <span class="hilite">Sartre</span> j'entrevis la richesse de ce qu'il appelait sa " théorie de la contingence", où se tro...</li>
133
+ <li class='philologic_occurence'>
134
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
135
+ ...e très insolite; impossible de s'inspirer d'aucune mode, d'aucun modèle: autant la pensée de <span class="hilite">Sartre</span> m'avait frappée par sa maturité, autant je fus déconcertée par la gaucherie des essa...</li>
136
+ <li class='philologic_occurence'>
137
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
138
+ ...Nodier m'en avaient imposé: mais de loin, vaguement, sans que je me confronte à eux. <span class="hilite">Sartre</span>, tous les jours, toute la journée je me mesurais à lui et dans nos discussions, je ne ...</li>
139
+ <li class='philologic_occurence'>
140
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
141
+ ... la première: une parmi d'autres, et soudain incertaine de ses véritables capacités. Car <span class="hilite">Sartre</span> n'était pas le seul qui m'obligeât à la modestie: Nizan, Aron, ...</li>
142
+ <li class='philologic_occurence'>
143
+ <a class='philologic_cite' href='./1839/4/0/0'><span class='philologic_property' title='author'>Beauvoir S. de</span>, <span class='philologic_property' title='title'>Memoires Jeune Fille Rangee</span> <span class='philologic_property' title='date'>(1958)</span></a>
144
+ ...marqués par une sorte de grâce funeste; impossible de communiquer avec eux sans réserve. <span class="hilite">Sartre</span> répondait exactement au voeu de mes quinze ans: il était le double en qui je retrouvai...</li>
145
+ </ol><div class='more'><a href='./?query=sartre&title=&author=Beauvoir+S.+de&q_start=1&q_end=48'>1-48</a> </div></div></body></html>
@@ -0,0 +1,67 @@
1
+ <html><head><title>TLFsorted: frequency table for "sartre"</title></head>
2
+ <body>
3
+ <p class='description'>running query for sartre @ TLFsorted: 151 total hits. aggregating.</p>
4
+ <table class='philologic_frequency tablesorter' title='author'>
5
+ <thead><tr class='philologic_frequency_header_row'><th>Author</th><th>Frequency</th></tr></thead>
6
+ <tbody> <tr class='philologic_frequency_row'>
7
+ <td class='philologic_frequency_key'><a href='./?query=sartre&author=Beauvoir+S.+de&title='>Beauvoir S. de</a></td>
8
+ <td class='philologic_frequency_value'>48</td>
9
+ </tr>
10
+ <tr class='philologic_frequency_row'>
11
+ <td class='philologic_frequency_key'><a href='./?query=sartre&author=Sartre+J.-P.&title='>Sartre J.-P.</a></td>
12
+ <td class='philologic_frequency_value'>42</td>
13
+ </tr>
14
+ <tr class='philologic_frequency_row'>
15
+ <td class='philologic_frequency_key'><a href='./?query=sartre&author=Gide+A.&title='>Gide A.</a></td>
16
+ <td class='philologic_frequency_value'>12</td>
17
+ </tr>
18
+ <tr class='philologic_frequency_row'>
19
+ <td class='philologic_frequency_key'><a href='./?query=sartre&author=Ricoeur+P.&title='>Ricoeur P.</a></td>
20
+ <td class='philologic_frequency_value'>10</td>
21
+ </tr>
22
+ <tr class='philologic_frequency_row'>
23
+ <td class='philologic_frequency_key'><a href='./?query=sartre&author=Lacroix+J.&title='>Lacroix J.</a></td>
24
+ <td class='philologic_frequency_value'>10</td>
25
+ </tr>
26
+ <tr class='philologic_frequency_row'>
27
+ <td class='philologic_frequency_key'><a href='./?query=sartre&author=Vuillemin+J.&title='>Vuillemin J.</a></td>
28
+ <td class='philologic_frequency_value'>7</td>
29
+ </tr>
30
+ <tr class='philologic_frequency_row'>
31
+ <td class='philologic_frequency_key'><a href='./?query=sartre&author=Peiresc+N.+de&title='>Peiresc N. de</a></td>
32
+ <td class='philologic_frequency_value'>4</td>
33
+ </tr>
34
+ <tr class='philologic_frequency_row'>
35
+ <td class='philologic_frequency_key'><a href='./?query=sartre&author=Nizan+P.&title='>Nizan P.</a></td>
36
+ <td class='philologic_frequency_value'>3</td>
37
+ </tr>
38
+ <tr class='philologic_frequency_row'>
39
+ <td class='philologic_frequency_key'><a href='./?query=sartre&author=Mounier+E.&title='>Mounier E.</a></td>
40
+ <td class='philologic_frequency_value'>3</td>
41
+ </tr>
42
+ <tr class='philologic_frequency_row'>
43
+ <td class='philologic_frequency_key'><a href='./?query=sartre&author=Bachelard+G.&title='>Bachelard G.</a></td>
44
+ <td class='philologic_frequency_value'>3</td>
45
+ </tr>
46
+ <tr class='philologic_frequency_row'>
47
+ <td class='philologic_frequency_key'><a href='./?query=sartre&author=Green+J.&title='>Green J.</a></td>
48
+ <td class='philologic_frequency_value'>3</td>
49
+ </tr>
50
+ <tr class='philologic_frequency_row'>
51
+ <td class='philologic_frequency_key'><a href='./?query=sartre&author=Merleau-Ponty+M.&title='>Merleau-Ponty M.</a></td>
52
+ <td class='philologic_frequency_value'>2</td>
53
+ </tr>
54
+ <tr class='philologic_frequency_row'>
55
+ <td class='philologic_frequency_key'><a href='./?query=sartre&author=Benda+J.&title='>Benda J.</a></td>
56
+ <td class='philologic_frequency_value'>2</td>
57
+ </tr>
58
+ <tr class='philologic_frequency_row'>
59
+ <td class='philologic_frequency_key'><a href='./?query=sartre&author=Mauriac+F.&title='>Mauriac F.</a></td>
60
+ <td class='philologic_frequency_value'>1</td>
61
+ </tr>
62
+ <tr class='philologic_frequency_row'>
63
+ <td class='philologic_frequency_key'><a href='./?query=sartre&author=Schaeffer+P.&title='>Schaeffer P.</a></td>
64
+ <td class='philologic_frequency_value'>1</td>
65
+ </tr>
66
+ </tbody></table>
67
+ </body></html>
@@ -64,4 +64,4 @@
64
64
  <td class='philologic_frequency_value'>1</td>
65
65
  </tr>
66
66
  </tbody></table>
67
- </body></html>
67
+ </body></html>
@@ -18,6 +18,12 @@ class TestPhilologicClient < Test::Unit::TestCase
18
18
 
19
19
  @endpoint = @data_dir
20
20
 
21
+ @coll_path = 'collocation_sartre.html'
22
+ @coll_file = File.join( @data_dir, @coll_path )
23
+
24
+ @coll_links_path = 'collocation_links.html'
25
+ @coll_links_file = File.join( @data_dir, @coll_links_path )
26
+
21
27
  @freq_path = 'frequency_sartre.html'
22
28
  @freq_file = File.join( @data_dir, @freq_path )
23
29
 
@@ -308,23 +314,30 @@ class TestPhilologicClient < Test::Unit::TestCase
308
314
  assert_kind_of Array, results
309
315
  assert_equal 15, results.size
310
316
  results.each do |result|
311
- assert_kind_of Philologic::Key, result
312
- assert_nil result['class']
313
- assert_not_nil result['href']
314
- assert_nil result['some random attribute']
315
- assert_nil result['author']
316
- assert_nil result['filename']
317
- assert_nil result['title']
318
- assert_not_nil result.text
317
+ assert_kind_of Philologic::TableRow, result
318
+ assert_equal 'philologic_frequency_row', result['class']
319
+ assert_nil result['href']
320
+ assert_nil result['some random attribute']
321
+ assert_nil result['author']
322
+ assert_nil result['filename']
323
+ assert_nil result['title']
324
+ assert_not_nil result.count
325
+ assert_not_nil result.field
326
+ assert_not_nil result.href
327
+ assert_not_nil result.text
319
328
  end
320
329
 
321
- assert_equal './?query=sartre&author=Beauvoir+S.+de&title=', results.first['href']
322
- assert_equal 'Beauvoir S. de', results.first.text
323
- assert_equal './?query=sartre&author=Beauvoir+S.+de&title= | Beauvoir S. de', results.first.to_s
324
-
325
- assert_equal './?query=sartre&author=Schaeffer+P.&title=', results.last['href']
326
- assert_equal 'Schaeffer P.', results.last.text
327
- assert_equal './?query=sartre&author=Schaeffer+P.&title= | Schaeffer P.', results.last.to_s
330
+ assert_equal 'author', results.first.field
331
+ assert_equal 48, results.first.count
332
+ assert_equal './?query=sartre&author=Beauvoir+S.+de&title=', results.first.href
333
+ assert_equal 'Beauvoir S. de', results.first.text
334
+ assert_equal 'author | 48 | Beauvoir S. de', results.first.to_s
335
+
336
+ assert_equal 'author', results.last.field
337
+ assert_equal 1, results.last.count
338
+ assert_equal './?query=sartre&author=Schaeffer+P.&title=', results.last.href
339
+ assert_equal 'Schaeffer P.', results.last.text
340
+ assert_equal 'author | 1 | Schaeffer P.', results.last.to_s
328
341
  end
329
342
  end
330
343
 
@@ -339,27 +352,35 @@ class TestPhilologicClient < Test::Unit::TestCase
339
352
  assert_kind_of Array, results
340
353
  assert_equal 15, results.size
341
354
  results.each do |result|
342
- assert_kind_of Philologic::Key, result
343
- assert_nil result['class']
344
- assert_not_nil result['href']
345
- assert_nil result['some random attribute']
346
- assert_nil result['author']
347
- assert_nil result['filename']
348
- assert_nil result['title']
349
- assert_not_nil result.text
355
+ assert_kind_of Philologic::TableRow, result
356
+ assert_equal 'philologic_frequency_row', result['class']
357
+ assert_nil result['href']
358
+ assert_nil result['some random attribute']
359
+ assert_nil result['author']
360
+ assert_nil result['filename']
361
+ assert_nil result['title']
362
+ assert_not_nil result.count
363
+ assert_not_nil result.field
364
+ assert_not_nil result.href
365
+ assert_not_nil result.text
350
366
  end
351
367
 
352
- assert_equal './?query=sartre&author=Beauvoir+S.+de&title=', results.first['href']
353
- assert_equal 'Beauvoir S. de', results.first.text
354
- assert_equal './?query=sartre&author=Beauvoir+S.+de&title= | Beauvoir S. de', results.first.to_s
368
+ assert_equal 'author', results.first.field
369
+ assert_equal 48, results.first.count
370
+ assert_equal './?query=sartre&author=Beauvoir+S.+de&title=', results.first.href
371
+ assert_equal 'Beauvoir S. de', results.first.text
372
+ assert_equal 'author | 48 | Beauvoir S. de', results.first.to_s
373
+
374
+ assert_equal 'author', results.last.field
375
+ assert_equal 1, results.last.count
376
+ assert_equal './?query=sartre&author=Schaeffer+P.&title=', results.last.href
377
+ assert_equal 'Schaeffer P.', results.last.text
378
+ assert_equal 'author | 1 | Schaeffer P.', results.last.to_s
355
379
 
356
- assert_equal './?query=sartre&author=Schaeffer+P.&title=', results.last['href']
357
- assert_equal 'Schaeffer P.', results.last.text
358
- assert_equal './?query=sartre&author=Schaeffer+P.&title= | Schaeffer P.', results.last.to_s
359
380
  end
360
381
  end
361
382
 
362
- def test_philologic_key_links
383
+ def test_philologic_frequency_tablerow_links
363
384
  Philologic::Client.new(@endpoint) do |client|
364
385
  freq_doc = client.send( :_parse, Nokogiri::HTML( open(@freq_file) ) )
365
386
  freq_links_doc = client.send( :_parse, Nokogiri::HTML( open(@freq_links_file) ) )
@@ -403,5 +424,134 @@ class TestPhilologicClient < Test::Unit::TestCase
403
424
  end
404
425
  end
405
426
 
427
+ def test_collocation_search_with_invalid_queries
428
+ Philologic::Client.new(@endpoint) do |client|
429
+ [ nil, [], {}, '', [ '' ], [ nil ], Object.new ].each do |q|
430
+ assert_raise(RuntimeError, 'invalid query') { client.collocation(q) }
431
+ end
432
+ end
433
+ end
434
+
435
+ def test_collocation_search
436
+ Philologic::Client.new(@endpoint) do |client|
437
+ doc = client.send( :_parse, Nokogiri::HTML( open(@coll_file) ) )
438
+ client.stubs(:_get).with('?field=collocates&query=sartre&report=frequency').returns(doc)
439
+
440
+ results = client.collocation('sartre')
441
+
442
+ assert_not_nil results
443
+ assert_kind_of Array, results
444
+ assert_equal 15, results.size
445
+ results.each do |result|
446
+ assert_kind_of Philologic::TableRow, result
447
+ assert_equal 'philologic_frequency_row', result['class']
448
+ assert_nil result['href']
449
+ assert_nil result['some random attribute']
450
+ assert_nil result['author']
451
+ assert_nil result['filename']
452
+ assert_nil result['title']
453
+ assert_not_nil result.count
454
+ assert_not_nil result.field
455
+ assert_not_nil result.href
456
+ assert_not_nil result.text
457
+ end
458
+
459
+ assert_equal 'author', results.first.field
460
+ assert_equal 48, results.first.count
461
+ assert_equal './?query=sartre&author=Beauvoir+S.+de&title=', results.first.href
462
+ assert_equal 'Beauvoir S. de', results.first.text
463
+ assert_equal 'author | 48 | Beauvoir S. de', results.first.to_s
464
+
465
+ assert_equal 'author', results.last.field
466
+ assert_equal 1, results.last.count
467
+ assert_equal './?query=sartre&author=Schaeffer+P.&title=', results.last.href
468
+ assert_equal 'Schaeffer P.', results.last.text
469
+ assert_equal 'author | 1 | Schaeffer P.', results.last.to_s
470
+ end
471
+ end
472
+
473
+ def test_collocation_search_with_key_value_pairs
474
+ Philologic::Client.new(@endpoint) do |client|
475
+ doc = client.send( :_parse, Nokogiri::HTML( open(@coll_file) ) )
476
+ client.stubs(:_get).with('?field=collocates&query=sartre&report=frequency').returns(doc)
477
+
478
+ results = client.collocation( :query => 'sartre' )
479
+
480
+ assert_not_nil results
481
+ assert_kind_of Array, results
482
+ assert_equal 15, results.size
483
+ results.each do |result|
484
+ assert_kind_of Philologic::TableRow, result
485
+ assert_equal 'philologic_frequency_row', result['class']
486
+ assert_nil result['href']
487
+ assert_nil result['some random attribute']
488
+ assert_nil result['author']
489
+ assert_nil result['filename']
490
+ assert_nil result['title']
491
+ assert_not_nil result.count
492
+ assert_not_nil result.field
493
+ assert_not_nil result.href
494
+ assert_not_nil result.text
495
+ end
496
+
497
+ assert_equal 'author', results.first.field
498
+ assert_equal 48, results.first.count
499
+ assert_equal './?query=sartre&author=Beauvoir+S.+de&title=', results.first.href
500
+ assert_equal 'Beauvoir S. de', results.first.text
501
+ assert_equal 'author | 48 | Beauvoir S. de', results.first.to_s
502
+
503
+ assert_equal 'author', results.last.field
504
+ assert_equal 1, results.last.count
505
+ assert_equal './?query=sartre&author=Schaeffer+P.&title=', results.last.href
506
+ assert_equal 'Schaeffer P.', results.last.text
507
+ assert_equal 'author | 1 | Schaeffer P.', results.last.to_s
508
+
509
+ end
510
+ end
511
+
512
+ def test_philologic_collocation_tablerow_links
513
+ Philologic::Client.new(@endpoint) do |client|
514
+ coll_doc = client.send( :_parse, Nokogiri::HTML( open(@coll_file) ) )
515
+ coll_links_doc = client.send( :_parse, Nokogiri::HTML( open(@coll_links_file) ) )
516
+ client.stubs(:_get).with('?field=collocates&query=sartre&report=frequency').returns(coll_doc)
517
+ client.stubs(:_get).with('?author=Beauvoir+S.+de&query=sartre&title=').returns(coll_links_doc)
518
+
519
+ results = client.collocation( :query => 'sartre' )
520
+ assert_not_nil results
521
+
522
+ links = results.first.links
523
+
524
+ assert_not_nil links
525
+ assert_kind_of Array, links
526
+ assert_equal 48, links.size
527
+
528
+ links.each do |link|
529
+ assert_kind_of Philologic::Link, link
530
+ assert_equal 'philologic_cite', link['class']
531
+ assert_not_nil link['href']
532
+ assert_nil link['some random attribute']
533
+ assert_not_nil link['author']
534
+ assert_nil link['filename']
535
+ assert_not_nil link['title']
536
+ assert_raise(NoMethodError) { link.text }
537
+ end
538
+
539
+ assert_equal './1839/3/0/0', links.first['href']
540
+ assert_equal 'Beauvoir S. de', links.first['author']
541
+ assert_equal 'Memoires Jeune Fille Rangee', links.first['title']
542
+ assert_nil links.first['filename']
543
+ assert_raise(NoMethodError) { links.first.text }
544
+ assert_equal './1839/3/0/0 | Memoires Jeune Fille Rangee | Beauvoir S. de', links.first.to_s
545
+
546
+ assert_equal './1839/4/0/0', links.last['href']
547
+ assert_equal 'Beauvoir S. de', links.last['author']
548
+ assert_equal 'Memoires Jeune Fille Rangee', links.last['title']
549
+ assert_nil links.last['filename']
550
+ assert_raise(NoMethodError) { links.last.text }
551
+ assert_equal './1839/4/0/0 | Memoires Jeune Fille Rangee | Beauvoir S. de', links.last.to_s
552
+
553
+ end
554
+ end
555
+
406
556
  end
407
557
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: philologic-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-12 00:00:00.000000000Z
12
+ date: 2012-01-18 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &70245904566480 !ruby/object:Gem::Requirement
16
+ requirement: &70093876599220 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70245904566480
24
+ version_requirements: *70093876599220
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rdoc
27
- requirement: &70245904566040 !ruby/object:Gem::Requirement
27
+ requirement: &70093876864820 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70245904566040
35
+ version_requirements: *70093876864820
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: mocha
38
- requirement: &70245904565620 !ruby/object:Gem::Requirement
38
+ requirement: &70093879163480 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70245904565620
46
+ version_requirements: *70093879163480
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rdoc-readme
49
- requirement: &70245904565120 !ruby/object:Gem::Requirement
49
+ requirement: &70093879782440 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 0.1.2
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70245904565120
57
+ version_requirements: *70093879782440
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: simplecov
60
- requirement: &70245904564700 !ruby/object:Gem::Requirement
60
+ requirement: &70093879916440 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70245904564700
68
+ version_requirements: *70093879916440
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: nokogiri
71
- requirement: &70245904564240 !ruby/object:Gem::Requirement
71
+ requirement: &70093880007360 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,7 +76,7 @@ dependencies:
76
76
  version: '0'
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *70245904564240
79
+ version_requirements: *70093880007360
80
80
  description: Ruby client for interacting with the Philologic API.
81
81
  email:
82
82
  - blair.christensen@gmail.com
@@ -93,6 +93,8 @@ files:
93
93
  - lib/philologic-client.rb
94
94
  - lib/philologic-client/version.rb
95
95
  - philologic-client.gemspec
96
+ - test/data/collocation_links.html
97
+ - test/data/collocation_sartre.html
96
98
  - test/data/doc_file.html
97
99
  - test/data/frequency_links.html
98
100
  - test/data/frequency_sartre.html
@@ -113,7 +115,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
113
115
  version: '0'
114
116
  segments:
115
117
  - 0
116
- hash: -899217601091423703
118
+ hash: -1051070454611838584
117
119
  required_rubygems_version: !ruby/object:Gem::Requirement
118
120
  none: false
119
121
  requirements:
@@ -122,7 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
122
124
  version: '0'
123
125
  segments:
124
126
  - 0
125
- hash: -899217601091423703
127
+ hash: -1051070454611838584
126
128
  requirements: []
127
129
  rubyforge_project: philologic-client
128
130
  rubygems_version: 1.8.7
@@ -130,6 +132,8 @@ signing_key:
130
132
  specification_version: 3
131
133
  summary: Ruby client for interacting with the Philologic API.
132
134
  test_files:
135
+ - test/data/collocation_links.html
136
+ - test/data/collocation_sartre.html
133
137
  - test/data/doc_file.html
134
138
  - test/data/frequency_links.html
135
139
  - test/data/frequency_sartre.html