philologic-client 0.0.9 → 0.0.10

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