biodiversity19 1.0.22 → 1.1.0

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.
data/CHANGELOG CHANGED
@@ -1,3 +1,6 @@
1
+ 1.1.0 -- added multiuninomials, fixes in identification annotations (aff.,
2
+ cf., sp. etc), bug fixes, more robust salvage mode
3
+
1
4
  1.0.17 -- fixed a bug which prevented all diacritics be converted correctly
2
5
 
3
6
  1.0.16 -- dirty mode now converts ë to e
data/Gemfile CHANGED
@@ -8,8 +8,6 @@ group :development do
8
8
  end
9
9
 
10
10
  group :test do
11
- if RUBY_VERSION =~ /^1\.9/
12
- gem "ruby-debug19", :require => "ruby-debug"
13
- end
11
+ gem "debugger"
14
12
  gem "rspec"
15
13
  end
data/Gemfile.lock CHANGED
@@ -1,8 +1,14 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- archive-tar-minitar (0.5.2)
5
4
  columnize (0.3.6)
5
+ debugger (1.2.1)
6
+ columnize (>= 0.3.1)
7
+ debugger-linecache (~> 1.1.1)
8
+ debugger-ruby_core_source (~> 1.1.4)
9
+ debugger-linecache (1.1.2)
10
+ debugger-ruby_core_source (>= 1.1.1)
11
+ debugger-ruby_core_source (1.1.4)
6
12
  diff-lcs (1.1.3)
7
13
  git (1.2.5)
8
14
  jeweler (1.8.4)
@@ -11,8 +17,6 @@ GEM
11
17
  rake
12
18
  rdoc
13
19
  json (1.7.5)
14
- linecache19 (0.5.12)
15
- ruby_core_source (>= 0.1.4)
16
20
  parallel (0.5.18)
17
21
  polyglot (0.3.3)
18
22
  rake (0.9.2.2)
@@ -26,16 +30,6 @@ GEM
26
30
  rspec-expectations (2.11.2)
27
31
  diff-lcs (~> 1.1.3)
28
32
  rspec-mocks (2.11.2)
29
- ruby-debug-base19 (0.11.25)
30
- columnize (>= 0.3.1)
31
- linecache19 (>= 0.5.11)
32
- ruby_core_source (>= 0.1.4)
33
- ruby-debug19 (0.11.6)
34
- columnize (>= 0.3.1)
35
- linecache19 (>= 0.5.11)
36
- ruby-debug-base19 (>= 0.11.19)
37
- ruby_core_source (0.1.5)
38
- archive-tar-minitar (>= 0.5.2)
39
33
  treetop (1.4.10)
40
34
  polyglot
41
35
  polyglot (>= 0.3.1)
@@ -44,8 +38,8 @@ PLATFORMS
44
38
  ruby
45
39
 
46
40
  DEPENDENCIES
41
+ debugger
47
42
  jeweler
48
43
  parallel
49
44
  rspec
50
- ruby-debug19
51
45
  treetop
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.22
1
+ 1.1.0
@@ -12,17 +12,12 @@ module PreProcessor
12
12
  TAXON_CONCEPTS2 = /\s+(\(?s\.\s?s\.|\(?s\.\s?l\.|\(?s\.\s?str\.|\(?s\.\s?lat\.|sec\.|sec|near)\b.*$/
13
13
  TAXON_CONCEPTS3 = /(,\s*|\s+)(pro parte|p\.\s?p\.)\s*$/i
14
14
  NOMEN_CONCEPTS = /(,\s*|\s+)(\(?nomen|\(?nom\.|\(?comb\.).*$/i
15
- COMPARATORS = /\s+(aff\.|aff)\b.*$/i
16
- CF_COMPARATOR = /\s+(cf\.|cf)\s+/i
17
15
  LAST_WORD_JUNK = /(,\s*|\s+)(spp\.|spp|var\.|var|von|van|sensu|new|non|nec|cf\.|cf|sp\.|sp|ssp\.|ssp|subsp|subgen|hybrid|hort\.|hort)\s*$/i
18
16
 
19
17
  def self.clean(a_string)
20
- [NOTES, TAXON_CONCEPTS1, TAXON_CONCEPTS2, TAXON_CONCEPTS3, NOMEN_CONCEPTS, COMPARATORS, LAST_WORD_JUNK].each do |i|
18
+ [NOTES, TAXON_CONCEPTS1, TAXON_CONCEPTS2, TAXON_CONCEPTS3, NOMEN_CONCEPTS, LAST_WORD_JUNK].each do |i|
21
19
  a_string = a_string.gsub(i, '')
22
20
  end
23
- [CF_COMPARATOR].each do |i|
24
- a_string = a_string.gsub(i, ' ')
25
- end
26
21
  a_string = a_string.tr('ſ','s') #old 's'
27
22
  a_string
28
23
  end
@@ -100,7 +95,17 @@ class ScientificNameParser
100
95
  elsif unknown_placement?(a_string)
101
96
  @parsed = { :verbatim => a_string }
102
97
  else
103
- @parsed = @clean.parse(a_string) || @dirty.parse(a_string) || @canonical.parse(a_string) || { :verbatim => a_string }
98
+ begin
99
+ @parsed = @clean.parse(a_string) || @dirty.parse(a_string)
100
+ unless @parsed
101
+ index = @dirty.index || @clean.index
102
+ salvage_match = a_string[0..index].match(/(.*[^,|\s]+)[,|\s]?\b.+$/)
103
+ salvage_string = salvage_match ? salvage_match[1] : a_string
104
+ @parsed = @dirty.parse(salvage_string) || @canonical.parse(a_string) || { :verbatim => a_string }
105
+ end
106
+ rescue
107
+ @parsed = {:scientificName => {:parsed => false, :verbatim => name, :error => 'Parser error'}}
108
+ end
104
109
  end
105
110
 
106
111
  def @parsed.verbatim=(a_string)
@@ -110,6 +110,8 @@ grammar ScientificNameCanonical
110
110
  end
111
111
 
112
112
  rule garbage
113
+ space "$$g@rbg3$$"
114
+ /
113
115
  space (["',.]) space [^щ]*
114
116
  /
115
117
  space_hard [^ш]+
@@ -178,6 +178,8 @@ grammar ScientificNameClean
178
178
  end
179
179
 
180
180
  rule scientific_name_1
181
+ multiuninomial_name
182
+ /
181
183
  multinomial_name
182
184
  /
183
185
  uninomial_name
@@ -209,10 +211,34 @@ grammar ScientificNameClean
209
211
  #/
210
212
  #latin_word
211
213
  end
212
-
214
+
215
+ rule unparsed
216
+ .+ space {
217
+
218
+ def value
219
+ ''
220
+ end
221
+
222
+ def hybrid
223
+ false
224
+ end
225
+
226
+ def canonical
227
+ ''
228
+ end
229
+
230
+ def pos
231
+ {interval.begin => ['unparsed', interval.end]}
232
+ end
233
+
234
+ def details
235
+ {:unparsed => text_value}
236
+ end
237
+ }
238
+ end
213
239
 
214
240
  rule multinomial_name
215
- a:genus space b:infragenus space species_prefix? space c:species space_hard d:infraspecies_mult {
241
+ a:genus space b:infragenus space aid:annotation_identification? space c:species space_hard d:infraspecies_mult {
216
242
  def value
217
243
  a.value + " " + b.value + " " + c.value + " " + d.value
218
244
  end
@@ -234,17 +260,29 @@ grammar ScientificNameClean
234
260
  end
235
261
  }
236
262
  /
237
- a:genus space b:infragenus space species_prefix? space c:species {
263
+ a:genus space b:infragenus space aid:annotation_identification? space c:species {
238
264
  def value
239
- a.value + " " + b.value + " " + c.value
265
+ if defined? aid.apply
266
+ a.value + " " + b.value + aid.apply(c)
267
+ else
268
+ a.value + " " + b.value + " " + c.value
269
+ end
240
270
  end
241
271
 
242
272
  def canonical
243
- a.canonical + " " + c.canonical
273
+ if defined? aid.apply
274
+ a.canonical + aid.canonical(c)
275
+ else
276
+ a.canonical + " " + c.canonical
277
+ end
244
278
  end
245
279
 
246
280
  def pos
247
- a.pos.merge(b.pos).merge(c.pos)
281
+ if defined? aid.apply
282
+ a.pos.merge(b.pos).merge(aid.pos(c))
283
+ else
284
+ a.pos.merge(b.pos).merge(c.pos)
285
+ end
248
286
  end
249
287
 
250
288
  def hybrid
@@ -252,11 +290,15 @@ grammar ScientificNameClean
252
290
  end
253
291
 
254
292
  def details
255
- a.details.merge(b.details).merge(c.details)
293
+ if defined? aid.apply
294
+ a.details.merge(b.details).merge(aid.apply(c))
295
+ else
296
+ a.details.merge(b.details).merge(c.details)
297
+ end
256
298
  end
257
299
  }
258
300
  /
259
- a:genus space species_prefix? space b:species space_hard c:infraspecies_mult {
301
+ a:genus space aid:annotation_identification? space b:species space_hard c:infraspecies_mult {
260
302
  def value
261
303
  a.value + " " + b.value + " " + c.value
262
304
  end
@@ -278,17 +320,29 @@ grammar ScientificNameClean
278
320
  end
279
321
  }
280
322
  /
281
- a:genus space species_prefix? space b:species {
323
+ a:genus space aid:annotation_identification? space b:species {
282
324
  def value
283
- a.value + " " + b.value
325
+ if defined? aid.apply
326
+ a.value + aid.apply(b)
327
+ else
328
+ a.value + " " + b.value
329
+ end
284
330
  end
285
331
 
286
332
  def canonical
287
- a.canonical + " " + b.canonical
333
+ if defined? aid.apply
334
+ a.canonical + aid.canonical(b)
335
+ else
336
+ a.canonical + " " + b.canonical
337
+ end
288
338
  end
289
339
 
290
340
  def pos
291
- a.pos.merge(b.pos)
341
+ if defined? aid.apply
342
+ a.pos.merge(aid.pos(b))
343
+ else
344
+ a.pos.merge(b.pos)
345
+ end
292
346
  end
293
347
 
294
348
  def hybrid
@@ -296,7 +350,58 @@ grammar ScientificNameClean
296
350
  end
297
351
 
298
352
  def details
299
- a.details.merge(b.details)
353
+ if defined? aid.apply
354
+ a.details.merge(aid.details(b))
355
+ else
356
+ a.details.merge(b.details)
357
+ end
358
+ end
359
+ }
360
+ /
361
+ a:genus space aid:annotation_identification space b:unparsed {
362
+ def value
363
+ a.value + aid.apply(b)
364
+ end
365
+
366
+ def canonical
367
+ a.canonical + aid.canonical(b)
368
+ end
369
+
370
+ def pos
371
+ a.pos.merge(aid.pos(b))
372
+ end
373
+
374
+ def hybrid
375
+ false
376
+ end
377
+
378
+ def details
379
+ a.details.merge(aid.details(b))
380
+ end
381
+ }
382
+ end
383
+
384
+ rule multiuninomial_name
385
+ a:uninomial_name space b:rank_uninomial space c:uninomial_name {
386
+
387
+ def value
388
+ a.value + " " + b.value + " " + c.value
389
+ end
390
+
391
+ def canonical
392
+ a.canonical
393
+ end
394
+
395
+ def hybrid
396
+ false
397
+ end
398
+
399
+ def pos
400
+ a.pos.merge(b.pos(c))
401
+ end
402
+
403
+ def details
404
+ a.details.merge(b.details(c))
300
405
  end
301
406
  }
302
407
  end
@@ -324,7 +429,11 @@ grammar ScientificNameClean
324
429
  /
325
430
  infraspecies {
326
431
  def details
327
- {:infraspecies => [super[:infraspecies]]}
432
+ if super[:annotation_identification]
433
+ {:infraspecies => [{:annotation_identification => super[:annotation_identification], :ignored => super[:ignored]}]}
434
+ else
435
+ {:infraspecies => [super[:infraspecies]]}
436
+ end
328
437
  end
329
438
  }
330
439
  end
@@ -352,7 +461,7 @@ grammar ScientificNameClean
352
461
  end
353
462
 
354
463
  rule infraspecies_string
355
- sel:rank space_hard a:species_word {
464
+ sel:rank space a:species_word {
356
465
  def value
357
466
  sel.apply(a)
358
467
  end
@@ -369,6 +478,30 @@ grammar ScientificNameClean
369
478
  end
370
479
  }
371
480
  /
481
+ aid:annotation_identification space a:species_word ![\.] {
482
+ def value
483
+ aid.apply(a)
484
+ end
485
+
486
+ def canonical
487
+ aid.canonical(a)
488
+ end
489
+
490
+ def pos
491
+ def a.pos
492
+ {interval.begin => ['infraspecies', a.interval.end]}
493
+ end
494
+ aid.pos(a)
495
+ end
496
+
497
+ def details
498
+ def a.details
499
+ {:infraspecies => {:string => value, :rank => 'n/a'}}
500
+ end
501
+ aid.details(a)
502
+ end
503
+ }
504
+ /
372
505
  a:species_word ![\.] {
373
506
  def value
374
507
  a.value
@@ -403,14 +536,14 @@ grammar ScientificNameClean
403
536
  end
404
537
 
405
538
  rule rank
406
- ("morph."/"f.sp."/"B"/"ssp."/"ssp"/"mut."/"nat"/"nothosubsp."/"convar."/"pseudovar."/"sect."/"ser."/"var."/"subvar."/ "[var.]" /"var"/"subsp."/"subsp"/"subf."/"race"/"forma"/"form."/"form"/"fo."/"f."/"α"/"ββ"/"β"/"γ"/"δ"/"ε"/"φ"/"θ"/"μ"/"a."/"b."/"c."/"d."/"e."/"g."/"k."/"****"/"**"/"*")
539
+ ("morph."/"f.sp."/"B "/"ssp."/"ssp "/"mut."/"nat "/"nothosubsp."/"convar."/"pseudovar."/"sect."/"ser."/"var."/"subvar."/ "[var.]" /"var "/"subsp."/"subsp "/"subf."/"race "/"forma "/"fma."/"fma "/"form."/"form "/"fo."/"f."/"α"/"ββ"/"β"/"γ"/"δ"/"ε"/"φ"/"θ"/"μ"/"a."/"b."/"c."/"d."/"e."/"g."/"k."/"****"/"**"/"*")
407
540
  {
408
541
  def value
409
542
  text_value.strip
410
543
  end
411
544
 
412
545
  def apply(a)
413
- " " + text_value + " " + a.value
546
+ " " + text_value.strip + " " + a.value
414
547
  end
415
548
 
416
549
  def canonical(a)
@@ -418,11 +551,28 @@ grammar ScientificNameClean
418
551
  end
419
552
 
420
553
  def pos(a)
421
- {interval.begin => ['infraspecific_type', interval.end], a.interval.begin => ['infraspecies', a.interval.end]}
554
+ interval_end = text_value[-1] == ' ' ? interval.end - 1 : interval.end
555
+ {interval.begin => ['infraspecific_type', interval_end], a.interval.begin => ['infraspecies', a.interval.end]}
422
556
  end
423
557
 
424
558
  def details(a = nil)
425
- {:infraspecies => {:string => (a.value rescue nil), :rank => text_value}}
559
+ {:infraspecies => {:string => (a.value rescue nil), :rank => text_value.strip}}
560
+ end
561
+ }
562
+ end
563
+
564
+ rule rank_uninomial
565
+ ("sect."/"sect "/"subsect."/"subsect "/"trib."/"trib "/"subtrib."/"subtrib "/"fam."/"fam "/"subfam."/"subfam "/"supertrib."/"supertrib ") {
566
+ def value
567
+ text_value.strip
568
+ end
569
+
570
+ def pos(uni)
571
+ {interval.begin => ['rank_uninomial', interval.end], uni.interval.begin => ['uninomial', uni.interval.end]}
572
+ end
573
+
574
+ def details(uni)
575
+ {:rank_uninomials => value, :uninomial2 => uni.details[:uninomial]}
426
576
  end
427
577
  }
428
578
  end
@@ -454,28 +604,6 @@ grammar ScientificNameClean
454
604
  end
455
605
 
456
606
  rule species_string
457
- # a:species_word &(space_hard author_prefix_word space_hard) {
458
- # def value
459
- # a.value
460
- # end
461
- #
462
- # def canonical
463
- # a.value
464
- # end
465
- #
466
- # def hybrid
467
- # a.hybrid rescue false
468
- # end
469
- #
470
- # def pos
471
- # {a.interval.begin => ['species', a.interval.end]}
472
- # end
473
- #
474
- # def details
475
- # {:species => {:string => a.value}}
476
- # end
477
- # }
478
- # /
479
607
  species_word {
480
608
  def canonical
481
609
  value
@@ -847,7 +975,7 @@ grammar ScientificNameClean
847
975
 
848
976
 
849
977
  rule unknown_auth
850
- ("auct."/"auct"/"hort."/"hort"/"anon."/"anon"/"ht."/"ht") {
978
+ ("auct."/"auct"/"hort."/"hort"/"anon."/"anon"/"ht."/"ht") !latin_word {
851
979
  def value
852
980
  text_value
853
981
  end
@@ -1130,10 +1258,55 @@ grammar ScientificNameClean
1130
1258
  }
1131
1259
  end
1132
1260
 
1133
- rule species_prefix
1134
- ("aff."/"corrig."/"?") &space_hard
1261
+ rule annotation_identification
1262
+ ("sp.aff."/"sp. aff."/"sp."/"sp "/"spp."/"spp "/"aff."/"aff "/"?") {
1263
+
1264
+ def value
1265
+ text_value.strip
1266
+ end
1267
+
1268
+ def apply(sp)
1269
+ ''
1270
+ end
1271
+
1272
+ def canonical(sp)
1273
+ ''
1274
+ end
1275
+
1276
+ def pos(sp)
1277
+ interval_end = text_value[-1] == ' ' ? interval.end - 1 : interval.end
1278
+ {interval.begin => ['annotation_identification', interval.end]}
1279
+ end
1280
+
1281
+ def details(sp)
1282
+ {:annotation_identification => value, :ignored => sp.details}
1283
+ end
1284
+ }
1285
+ /
1286
+ ("cf."/"cf ") {
1287
+ def value
1288
+ text_value.strip
1289
+ end
1290
+
1291
+ def apply(sp)
1292
+ ' ' + value + ' ' + sp.value
1293
+ end
1294
+
1295
+ def canonical(sp)
1296
+ ' ' + sp.canonical
1297
+ end
1298
+
1299
+ def pos(sp)
1300
+ interval_end = text_value[-1] == ' ' ? interval.end - 1 : interval.end
1301
+ {interval.begin => ['annotation_identification', interval.end]}.merge(sp.pos)
1302
+ end
1303
+
1304
+ def details(sp)
1305
+ {:annotation_identification => value, :species => sp.details}
1306
+ end
1307
+ }
1135
1308
  end
1136
-
1309
+
1137
1310
  rule species_word
1138
1311
  a:[0-9]+ "-"? b:latin_word {
1139
1312
  def value
@@ -1241,7 +1414,7 @@ grammar ScientificNameClean
1241
1414
  end
1242
1415
 
1243
1416
  rule year_number
1244
- [12] [7890] [0-9] [0-9]? [\?]? {
1417
+ [12] [7890] [0-9] ([0-9] [\?]?/"?") {
1245
1418
  def value
1246
1419
  text_value
1247
1420
  end
@@ -92,42 +92,42 @@ grammar ScientificNameDirty
92
92
  super
93
93
  end
94
94
 
95
- rule infraspecies_string
96
- sel:rank space_hard a:species_word {
97
- def value
98
- sel.apply(a)
99
- end
100
- def canonical
101
- sel.canonical(a)
102
- end
103
-
104
- def pos
105
- sel.pos(a)
106
- end
107
-
108
- def details
109
- sel.details(a)
110
- end
111
- }
112
- /
113
- a:species_word ![\.] {
114
- def value
115
- a.value
116
- end
117
-
118
- def canonical
119
- value
120
- end
121
-
122
- def pos
123
- {interval.begin => ['infraspecies', interval.end]}
124
- end
125
-
126
- def details
127
- {:infraspecies => {:string => value, :rank => 'n/a'}}
128
- end
129
- }
130
- end
95
+ # rule infraspecies_string
96
+ # sel:rank space_hard a:species_word {
97
+ # def value
98
+ # sel.apply(a)
99
+ # end
100
+ # def canonical
101
+ # sel.canonical(a)
102
+ # end
103
+ #
104
+ # def pos
105
+ # sel.pos(a)
106
+ # end
107
+ #
108
+ # def details
109
+ # sel.details(a)
110
+ # end
111
+ # }
112
+ # /
113
+ # a:species_word ![\\.] {
114
+ # def value
115
+ # a.value
116
+ # end
117
+ #
118
+ # def canonical
119
+ # value
120
+ # end
121
+ #
122
+ # def pos
123
+ # {interval.begin => ['infraspecies', interval.end]}
124
+ # end
125
+ #
126
+ # def details
127
+ # {:infraspecies => {:string => value, :rank => 'n/a'}}
128
+ # end
129
+ # }
130
+ # end
131
131
 
132
132
  rule species
133
133
  a:species_string space b:year {
@@ -28,6 +28,12 @@ describe ScientificNameClean do
28
28
  details(sn).should == [{:uninomial=>{:string=>"Pseudocercospora", :authorship=>"Spegazzini, 1910", :basionymAuthorTeam=>{:authorTeam=>"Spegazzini", :author=>["Spegazzini"], :year=>"1910"}}}]
29
29
  pos(sn).should == {0=>["uninomial", 16], 17=>["author_word", 27], 29=>["year", 33]}
30
30
  end
31
+
32
+ it "should parse uninomials with uninomial ranks" do
33
+ sn = "Epacridaceae trib. Archerieae Crayn & Quinn"
34
+ parse(sn).should_not be_nil
35
+ details(sn).should == [{:uninomial=>{:string=>"Epacridaceae"}, :rank_uninomials=>"trib.", :uninomial2=>{:string=>"Archerieae", :authorship=>"Crayn & Quinn", :basionymAuthorTeam=>{:authorTeam=>"Crayn & Quinn", :author=>["Crayn", "Quinn"]}}}]
36
+ end
31
37
 
32
38
  it 'should parse names with a valid 2 letter genus' do
33
39
  ["Ca Dyar 1914",
@@ -204,6 +210,23 @@ describe ScientificNameClean do
204
210
  parse("Zophosis persis (Chatanay) 1914").should_not be_nil
205
211
  #parse("Zophosis persis Chatanay (1914)").should_not be_nil
206
212
  end
213
+
214
+ it "should be able to parse name with identificaation annotation -- aff cf sp spp" do
215
+ sn = 'Diplocephalus aff. procerus Thaler, 1972'
216
+ details(sn).should == [{:genus=>{:string=>"Diplocephalus"}, :annotation_identification=>"aff.", :ignored=>{:species=>{:string=>"procerus", :authorship=>"Thaler, 1972", :basionymAuthorTeam=>{:authorTeam=>"Thaler", :author=>["Thaler"], :year=>"1972"}}}}]
217
+ sn = 'Diplocephalus aff procerus Thaler, 1972'
218
+ details(sn).should == [{:genus=>{:string=>"Diplocephalus"}, :annotation_identification=>"aff", :ignored=>{:species=>{:string=>"procerus", :authorship=>"Thaler, 1972", :basionymAuthorTeam=>{:authorTeam=>"Thaler", :author=>["Thaler"], :year=>"1972"}}}}]
219
+ sn = 'Diplocephalus affprocerus Thaler, 1972'
220
+ details(sn).should == [{:genus=>{:string=>"Diplocephalus"}, :species=>{:string=>"affprocerus", :authorship=>"Thaler, 1972", :basionymAuthorTeam=>{:authorTeam=>"Thaler", :author=>["Thaler"], :year=>"1972"}}}]
221
+ sn = 'Diplocephalus cf. procerus Thaler, 1972'
222
+ details(sn).should == [{:genus=>{:string=>"Diplocephalus"}, :annotation_identification=>"cf.", :species=>{:species=>{:string=>"procerus", :authorship=>"Thaler, 1972", :basionymAuthorTeam=>{:authorTeam=>"Thaler", :author=>["Thaler"], :year=>"1972"}}}}]
223
+ sn = 'Diplocephalus cf procerus Thaler, 1972'
224
+ details(sn).should == [{:genus=>{:string=>"Diplocephalus"}, :annotation_identification=>"cf", :species=>{:species=>{:string=>"procerus", :authorship=>"Thaler, 1972", :basionymAuthorTeam=>{:authorTeam=>"Thaler", :author=>["Thaler"], :year=>"1972"}}}}]
225
+ sn = 'Sphingomonas sp. 37'
226
+ details(sn).should == [{:genus=>{:string=>"Sphingomonas"}, :annotation_identification=>"sp.", :ignored=>{:unparsed=>"37"}}]
227
+ sn = "Thryothorus leucotis spp. bogotensis"
228
+ details(sn).should == [{:genus=>{:string=>"Thryothorus"}, :species=>{:string=>"leucotis"}, :infraspecies=>[{:annotation_identification=>"spp.", :ignored=>{:infraspecies=>{:string=>"bogotensis", :rank=>"n/a"}}}]}]
229
+ end
207
230
 
208
231
  it 'should parse scientific name' do
209
232
  sn = "Pseudocercospora dendrobii(H.C. Burnett)U. Braun & Crous 2003"
@@ -291,6 +314,12 @@ describe ScientificNameClean do
291
314
  parse(sn).should_not be_nil
292
315
  pos(sn).should == {0=>["genus", 4], 5=>["species", 10], 11=>["unknown_author", 14]}
293
316
  end
317
+
318
+ it 'should parse normal names with hort or anon in them' do
319
+ sn = "Mus musculus hortulanus"
320
+ pr = parse(sn).should_not be_nil
321
+ pos(sn).should == {0=>["genus", 3], 4=>["species", 12], 13=>["infraspecies", 23]}
322
+ end
294
323
 
295
324
  it 'should parse real world examples' do
296
325
  sn = "Stagonospora polyspora M.T. Lucas & Sousa da Câmara 1934"
@@ -539,8 +568,6 @@ describe ScientificNameClean do
539
568
  parse('Dipoena yoshidai Ono, in Ono et al., 1991').should_not be_nil
540
569
  sn = 'Latrodectus mactans bishopi Kaston, 1938'
541
570
  details(sn).should == [{:genus=>{:string=>"Latrodectus"}, :species=>{:string=>"mactans"}, :infraspecies=>[{:string=>"bishopi", :rank=>"n/a", :authorship=>"Kaston, 1938", :basionymAuthorTeam=>{:authorTeam=>"Kaston", :author=>["Kaston"], :year=>"1938"}}]}]
542
- sn = 'Diplocephalus aff. procerus Thaler, 1972'
543
- details(sn).should == [{:genus=>{:string=>"Diplocephalus"}, :species=>{:string=>"procerus", :authorship=>"Thaler, 1972", :basionymAuthorTeam=>{:authorTeam=>"Thaler", :author=>["Thaler"], :year=>"1972"}}}]
544
571
  sn = 'Thiobacillus x Parker and Prisk 1953' #have to figure out black lists for this one
545
572
  sn = 'Bacille de Plaut, Kritchevsky and Séguin 1921'
546
573
  details(sn).should == [{:uninomial=>{:string=>"Bacille", :authorship=>"de Plaut, Kritchevsky and Séguin 1921", :basionymAuthorTeam=>{:authorTeam=>"de Plaut, Kritchevsky and Séguin", :author=>["de Plaut", "Kritchevsky", "Séguin"], :year=>"1921"}}}]
@@ -76,8 +76,6 @@ describe ScientificNameDirty do
76
76
  details(sn).should == [{:genus=>{:string=>"Campylobacter"}, :species=>{:string=>"pyloridis", :authorship=>"Marshall et al.1985.", :basionymAuthorTeam=>{:authorTeam=>"Marshall et al.", :author=>["Marshall et al."], :year=>"1985"}}}]
77
77
  sn = 'Staphylococcus hyicus chromogenes Devriese et al. 1978 (Approved Lists 1980).'
78
78
  details(sn).should == [{:genus=>{:string=>"Staphylococcus"}, :species=>{:string=>"hyicus"}, :infraspecies=>[{:string=>"chromogenes", :rank=>"n/a", :authorship=>"Devriese et al. 1978", :basionymAuthorTeam=>{:authorTeam=>"Devriese et al.", :author=>["Devriese et al."], :year=>"1978"}}]}]
79
- sn = 'Kitasatospora corrig. griseola Takahashi et al. 1985.'
80
- details(sn).should == [{:genus=>{:string=>"Kitasatospora"}, :species=>{:string=>"griseola", :authorship=>"Takahashi et al. 1985.", :basionymAuthorTeam=>{:authorTeam=>"Takahashi et al.", :author=>["Takahashi et al."], :year=>"1985"}}}]
81
79
  sn = 'Beijerinckia derxii venezuelae corrig. Thompson and Skerman, 1981'
82
80
  details(sn).should == [{:genus=>{:string=>"Beijerinckia"}, :species=>{:string=>"derxii"}, :infraspecies=>[{:string=>"venezuelae", :rank=>"n/a", :authorship=>"Thompson and Skerman, 1981", :basionymAuthorTeam=>{:authorTeam=>"Thompson and Skerman", :author=>["Thompson", "Skerman"], :year=>"1981"}}]}]
83
81
  details('Streptomyces parvisporogenes ignotus 1960').should == [{:genus=>{:string=>"Streptomyces"}, :species=>{:string=>"parvisporogenes"}, :infraspecies=>[{:string=>"ignotus", :rank=>"n/a", :year=>"1960"}]}]
@@ -39,6 +39,13 @@ Qu Durkoop|{"scientificName":{"parsed":true, "parser_version":"test_version", "p
39
39
  As Slipinski 1982|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":1,"verbatim":"As Slipinski 1982","normalized":"As Slipinski 1982","canonical":"As","hybrid":false,"details":[{"uninomial":{"string":"As","authorship":"Slipinski 1982","basionymAuthorTeam":{"authorTeam":"Slipinski","author":["Slipinski"],"year":"1982"}}}],"positions":{"0":["uninomial",2],"3":["author_word",12],"13":["year",17]}}}
40
40
  Ba Solem 1983|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":1,"verbatim":"Ba Solem 1983","normalized":"Ba Solem 1983","canonical":"Ba","hybrid":false,"details":[{"uninomial":{"string":"Ba","authorship":"Solem 1983","basionymAuthorTeam":{"authorTeam":"Solem","author":["Solem"],"year":"1983"}}}],"positions":{"0":["uninomial",2],"3":["author_word",8],"9":["year",13]}}}
41
41
 
42
+ #multi-uninomials
43
+ Poaceae subtrib. Scolochloinae Soreng|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Poaceae subtrib. Scolochloinae Soreng", "normalized":"Poaceae subtrib. Scolochloinae Soreng", "canonical":"Poaceae", "hybrid":false, "details":[{"uninomial":{"string":"Poaceae"}, "rank_uninomials":"subtrib.", "uninomial2":{"string":"Scolochloinae", "authorship":"Soreng", "basionymAuthorTeam":{"authorTeam":"Soreng", "author":["Soreng"]}}}], "parser_run":1, "positions":{"0":["uninomial", 7], "8":["rank_uninomial", 16], "17":["uninomial", 37]}}}
44
+ Zygophyllaceae subfam. Tribuloideae D.M.Porter|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Zygophyllaceae subfam. Tribuloideae D.M.Porter", "normalized":"Zygophyllaceae subfam. Tribuloideae D.M.Porter", "canonical":"Zygophyllaceae", "hybrid":false, "details":[{"uninomial":{"string":"Zygophyllaceae"}, "rank_uninomials":"subfam.", "uninomial2":{"string":"Tribuloideae", "authorship":"D.M.Porter", "basionymAuthorTeam":{"authorTeam":"D.M.Porter", "author":["D.M.Porter"]}}}], "parser_run":1, "positions":{"0":["uninomial", 14], "15":["rank_uninomial", 22], "23":["uninomial", 46]}}}
45
+ Cordia (Adans.) Kuntze sect. Salimori|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Cordia (Adans.) Kuntze sect. Salimori", "normalized":"Cordia (Adans.) Kuntze sect. Salimori", "canonical":"Cordia", "hybrid":false, "details":[{"uninomial":{"string":"Cordia", "authorship":"(Adans.) Kuntze", "combinationAuthorTeam":{"authorTeam":"Kuntze", "author":["Kuntze"]}, "basionymAuthorTeam":{"authorTeam":"Adans.", "author":["Adans."]}}, "rank_uninomials":"sect.", "uninomial2":{"string":"Salimori"}}], "parser_run":1, "positions":{"0":["uninomial", 6], "8":["author_word", 14], "16":["author_word", 22], "23":["rank_uninomial", 28], "29":["uninomial", 37]}}}
46
+ Poaceae supertrib. Arundinarodae L.Liu|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Poaceae supertrib. Arundinarodae L.Liu", "normalized":"Poaceae supertrib. Arundinarodae L.Liu", "canonical":"Poaceae", "hybrid":false, "details":[{"uninomial":{"string":"Poaceae"}, "rank_uninomials":"supertrib.", "uninomial2":{"string":"Arundinarodae", "authorship":"L.Liu", "basionymAuthorTeam":{"authorTeam":"L.Liu", "author":["L.Liu"]}}}], "parser_run":1, "positions":{"0":["uninomial", 7], "8":["rank_uninomial", 18], "19":["uninomial", 38]}}}
47
+ Alchemilla subsect. Sericeae A.Plocek|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Alchemilla subsect. Sericeae A.Plocek", "normalized":"Alchemilla subsect. Sericeae A.Plocek", "canonical":"Alchemilla", "hybrid":false, "details":[{"uninomial":{"string":"Alchemilla"}, "rank_uninomials":"subsect.", "uninomial2":{"string":"Sericeae", "authorship":"A.Plocek", "basionymAuthorTeam":{"authorTeam":"A.Plocek", "author":["A.Plocek"]}}}], "parser_run":1, "positions":{"0":["uninomial", 10], "11":["rank_uninomial", 19], "20":["uninomial", 37]}}}
48
+
42
49
  #canonical binomial
43
50
  Pseudocercospora dendrobii|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":1,"verbatim":"Pseudocercospora dendrobii","normalized":"Pseudocercospora dendrobii","canonical":"Pseudocercospora dendrobii","hybrid":false,"details":[{"genus":{"string":"Pseudocercospora"},"species":{"string":"dendrobii"}}],"positions":{"0":["genus",16],"21":["species",30]}}}
44
51
  Cucurbita pepo|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Cucurbita pepo", "normalized":"Cucurbita pepo", "canonical":"Cucurbita pepo", "hybrid":false, "details":[{"genus":{"string":"Cucurbita"}, "species":{"string":"pepo"}}], "parser_run":1, "positions":{"0":["genus", 9], "10":["species", 14]}}}
@@ -52,9 +59,9 @@ Platypus bicaudatulus Schedl, 1935h|{"scientificName":{"parsed":true, "parser_ve
52
59
  #TODO Donatia novae-zelandiae Hook.f.
53
60
 
54
61
  #binomial with several authours
55
- Pseudocercospora dendrobii U. Braun & Crous|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":1,"verbatim":"Pseudocercospora dendrobii U. Braun & Crous","normalized":"Pseudocercospora dendrobii U. Braun et Crous","canonical":"Pseudocercospora dendrobii","hybrid":false,"details":[{"genus":{"string":"Pseudocercospora"},"species":{"string":"dendrobii","authorship":"U. Braun & Crous","basionymAuthorTeam":{"authorTeam":"U. Braun & Crous","author":["U. Braun","Crous"]}}}],"positions":{"0":["genus",16],"17":["species",26],"27":["author_word",29],"30":["author_word",35],"38":["author_word",43]}}}
56
- Pseudocercospora dendrobii U. Braun et Crous|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":1,"verbatim":"Pseudocercospora dendrobii U. Braun et Crous","normalized":"Pseudocercospora dendrobii U. Braun et Crous","canonical":"Pseudocercospora dendrobii","hybrid":false,"details":[{"genus":{"string":"Pseudocercospora"},"species":{"string":"dendrobii","authorship":"U. Braun et Crous","basionymAuthorTeam":{"authorTeam":"U. Braun et Crous","author":["U. Braun","Crous"]}}}],"positions":{"0":["genus",16],"17":["species",26],"27":["author_word",29],"30":["author_word",35],"39":["author_word",44]}}}
57
- Pseudocercospora dendrobii U. Braun and Crous|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":1,"verbatim":"Pseudocercospora dendrobii U. Braun and Crous","normalized":"Pseudocercospora dendrobii U. Braun et Crous","canonical":"Pseudocercospora dendrobii","hybrid":false,"details":[{"genus":{"string":"Pseudocercospora"},"species":{"string":"dendrobii","authorship":"U. Braun and Crous","basionymAuthorTeam":{"authorTeam":"U. Braun and Crous","author":["U. Braun","Crous"]}}}],"positions":{"0":["genus",16],"17":["species",26],"27":["author_word",29],"30":["author_word",35],"40":["author_word",45]}}}
62
+ Pseudocercospora dendrobii Goh & W.H. Hsieh 1990|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Pseudocercospora dendrobii Goh & W.H. Hsieh 1990", "normalized":"Pseudocercospora dendrobii Goh et W.H. Hsieh 1990", "canonical":"Pseudocercospora dendrobii", "hybrid":false, "details":[{"genus":{"string":"Pseudocercospora"}, "species":{"string":"dendrobii", "authorship":"Goh & W.H. Hsieh 1990", "basionymAuthorTeam":{"authorTeam":"Goh & W.H. Hsieh", "author":["Goh", "W.H. Hsieh"], "year":"1990"}}}], "parser_run":1, "positions":{"0":["genus", 16], "17":["species", 26], "27":["author_word", 30], "33":["author_word", 37], "38":["author_word", 43], "44":["year", 48]}}}
63
+ Pseudocercospora dendrobii Goh and W.H. Hsieh 1990|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Pseudocercospora dendrobii Goh and W.H. Hsieh 1990", "normalized":"Pseudocercospora dendrobii Goh et W.H. Hsieh 1990", "canonical":"Pseudocercospora dendrobii", "hybrid":false, "details":[{"genus":{"string":"Pseudocercospora"}, "species":{"string":"dendrobii", "authorship":"Goh and W.H. Hsieh 1990", "basionymAuthorTeam":{"authorTeam":"Goh and W.H. Hsieh", "author":["Goh", "W.H. Hsieh"], "year":"1990"}}}], "parser_run":1, "positions":{"0":["genus", 16], "17":["species", 26], "27":["author_word", 30], "35":["author_word", 39], "40":["author_word", 45], "46":["year", 50]}}}
64
+ Pseudocercospora dendrobii Goh et W.H. Hsieh 1990|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Pseudocercospora dendrobii Goh et W.H. Hsieh 1990", "normalized":"Pseudocercospora dendrobii Goh et W.H. Hsieh 1990", "canonical":"Pseudocercospora dendrobii", "hybrid":false, "details":[{"genus":{"string":"Pseudocercospora"}, "species":{"string":"dendrobii", "authorship":"Goh et W.H. Hsieh 1990", "basionymAuthorTeam":{"authorTeam":"Goh et W.H. Hsieh", "author":["Goh", "W.H. Hsieh"], "year":"1990"}}}], "parser_run":1, "positions":{"0":["genus", 16], "17":["species", 26], "27":["author_word", 30], "34":["author_word", 38], "39":["author_word", 44], "45":["year", 49]}}}
58
65
  Schottera nicaeënsis (J.V. Lamouroux ex Duby) Guiry & Hollenberg|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Schottera nicaeënsis (J.V. Lamouroux ex Duby) Guiry & Hollenberg", "normalized":"Schottera nicaeensis (J.V. Lamouroux ex Duby) Guiry et Hollenberg", "canonical":"Schottera nicaeensis", "hybrid":false, "details":[{"genus":{"string":"Schottera"}, "species":{"string":"nicaeensis", "authorship":"(J.V. Lamouroux ex Duby) Guiry & Hollenberg", "combinationAuthorTeam":{"authorTeam":"Guiry & Hollenberg", "author":["Guiry", "Hollenberg"]}, "basionymAuthorTeam":{"authorTeam":"J.V. Lamouroux", "author":["J.V. Lamouroux"], "exAuthorTeam":{"authorTeam":"Duby", "author":["Duby"]}}}}], "parser_run":1, "positions":{"0":["genus", 9], "10":["species", 20], "22":["author_word", 26], "27":["author_word", 36], "40":["author_word", 44], "46":["author_word", 51], "54":["author_word", 64]}}}
59
66
  Hirsutëlla mâle|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Hirsutëlla mâle", "normalized":"Hirsutella male", "canonical":"Hirsutella male", "hybrid":false, "details":[{"genus":{"string":"Hirsutella"}, "species":{"string":"male"}}], "parser_run":2, "positions":{"0":["genus", 10], "11":["species", 15]}}}
60
67
  Triticum repens vulgäre|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Triticum repens vulgäre", "normalized":"Triticum repens vulgare", "canonical":"Triticum repens vulgare", "hybrid":false, "details":[{"genus":{"string":"Triticum"}, "species":{"string":"repens"}, "infraspecies":[{"string":"vulgare", "rank":"n/a"}]}], "parser_run":2, "positions":{"0":["genus", 8], "9":["species", 15], "16":["infraspecies", 23]}}}
@@ -65,6 +72,7 @@ Aëtosaurus ferratus|{"scientificName":{"parsed":true, "parser_version":"test_ve
65
72
  Pseudocercospora dendrobii U. Braun & Crous 2003|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":1,"verbatim":"Pseudocercospora dendrobii U. Braun & Crous 2003","normalized":"Pseudocercospora dendrobii U. Braun et Crous 2003","canonical":"Pseudocercospora dendrobii","hybrid":false,"details":[{"genus":{"string":"Pseudocercospora"},"species":{"string":"dendrobii","authorship":"U. Braun & Crous 2003","basionymAuthorTeam":{"authorTeam":"U. Braun & Crous","author":["U. Braun","Crous"],"year":"2003"}}}],"positions":{"0":["genus",16],"17":["species",26],"27":["author_word",29],"30":["author_word",35],"38":["author_word",43],"44":["year",48]}}}
66
73
 
67
74
  #iczn: species name with infragenus
75
+ Hegeter (Hegeter) tenuipunctatus Brullé, 1838|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Hegeter (Hegeter) tenuipunctatus Brullé, 1838", "normalized":"Hegeter (Hegeter) tenuipunctatus Brullé 1838", "canonical":"Hegeter tenuipunctatus", "hybrid":false, "details":[{"genus":{"string":"Hegeter"}, "infragenus":{"string":"Hegeter"}, "species":{"string":"tenuipunctatus", "authorship":"Brullé, 1838", "basionymAuthorTeam":{"authorTeam":"Brullé", "author":["Brullé"], "year":"1838"}}}], "parser_run":1, "positions":{"0":["genus", 7], "9":["infragenus", 16], "18":["species", 32], "33":["author_word", 39], "41":["year", 45]}}}
68
76
  Hegeter (Hegeter) intercedens Lindberg H 1950|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":1,"verbatim":"Hegeter (Hegeter) intercedens Lindberg H 1950","normalized":"Hegeter (Hegeter) intercedens Lindberg H 1950","canonical":"Hegeter intercedens","hybrid":false,"details":[{"genus":{"string":"Hegeter"},"infragenus":{"string":"Hegeter"},"species":{"string":"intercedens","authorship":"Lindberg H 1950","basionymAuthorTeam":{"authorTeam":"Lindberg H","author":["Lindberg H"],"year":"1950"}}}],"positions":{"0":["genus",7],"9":["infragenus",16],"18":["species",29],"30":["author_word",38],"39":["author_word",40],"41":["year",45]}}}
69
77
  Brachytrypus (B.) grandidieri|{"scientificName":{"parsed":true, "verbatim":"Brachytrypus (B.) grandidieri", "normalized":"Brachytrypus (B.) grandidieri", "canonical":"Brachytrypus grandidieri", "hybrid":false, "details":[{"genus":{"string":"Brachytrypus"}, "infragenus":{"string":"B."}, "species":{"string":"grandidieri"}}], "parser_version":"test_version", "parser_run":1, "positions":{"0":["genus", 12], "14":["infragenus", 16], "18":["species", 29]}}}
70
78
  Cyprideis (Cyprideis) thessalonike amasyaensis|{"scientificName":{"parsed":true, "verbatim":"Cyprideis (Cyprideis) thessalonike amasyaensis", "normalized":"Cyprideis (Cyprideis) thessalonike amasyaensis", "canonical":"Cyprideis thessalonike amasyaensis", "hybrid":false, "details":[{"genus":{"string":"Cyprideis"}, "infragenus":{"string":"Cyprideis"}, "species":{"string":"thessalonike"}, "infraspecies":[{"string":"amasyaensis", "rank":"n/a"}]}], "parser_version":"test_version", "parser_run":1, "positions":{"0":["genus", 9], "11":["infragenus", 20], "22":["species", 34], "35":["infraspecies", 46]}}}
@@ -78,7 +86,10 @@ Sténométope laevissimus Bibron 1855|{"scientificName":{"parsed":true, "parser_
78
86
  Choriozopella trägårdhi Lawrence, 1947|{"scientificName":{"parsed":true, "verbatim":"Choriozopella trägårdhi Lawrence, 1947", "normalized":"Choriozopella tragardhi Lawrence 1947", "canonical":"Choriozopella tragardhi", "hybrid":false, "details":[{"genus":{"string":"Choriozopella"}, "species":{"string":"tragardhi", "authorship":"Lawrence, 1947", "basionymAuthorTeam":{"authorTeam":"Lawrence", "author":["Lawrence"], "year":"1947"}}}], "parser_version":"test_version", "parser_run":2, "positions":{"0":["genus", 13], "14":["species", 23], "24":["author_word", 32], "34":["year", 38]}}}
79
87
  Isoëtes asplundii H. P. Fuchs|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Isoëtes asplundii H. P. Fuchs", "normalized":"Isoetes asplundii H. P. Fuchs", "canonical":"Isoetes asplundii", "hybrid":false, "details":[{"genus":{"string":"Isoetes"}, "species":{"string":"asplundii", "authorship":"H. P. Fuchs", "basionymAuthorTeam":{"authorTeam":"H. P. Fuchs", "author":["H. P. Fuchs"]}}}], "parser_run":1, "positions":{"0":["genus", 7], "8":["species", 17], "18":["author_word", 20], "21":["author_word", 23], "24":["author_word", 29]}}}
80
88
  Cerambyx thomæ GMELIN J. F., 1790|{"scientificName":{"parsed":true, "verbatim":"Cerambyx thomæ GMELIN J. F., 1790", "normalized":"Cerambyx thomae GMELIN J. F. 1790", "canonical":"Cerambyx thomae", "hybrid":false, "details":[{"genus":{"string":"Cerambyx"}, "species":{"string":"thomae", "authorship":"GMELIN J. F., 1790", "basionymAuthorTeam":{"authorTeam":"GMELIN J. F.", "author":["GMELIN J. F."], "year":"1790"}}}], "parser_version":"test_version", "parser_run":1, "positions":{"0":["genus", 8], "9":["species", 14], "15":["author_word", 21], "22":["author_word", 24], "25":["author_word", 27], "29":["year", 33]}}}
89
+ #Campethera cailliautii fülleborni|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Endoxyla sp. GM-, 2003", "normalized":"Endoxyla", "canonical":"Endoxyla", "hybrid":false, "details":[{"genus":{"string":"Endoxyla"}, "annotation_identification":"sp.", "ignored":{"unparsed":"GM-, 2003"}}], "parser_run":1, "positions":{"0":["genus", 8], "9":["annotation_identification", 12]}}}
90
+
81
91
  #digraph unicode characters
92
+ Æschopalæa grisella Pascoe, 1864|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Æschopalæa grisella Pascoe, 1864", "normalized":"Aeschopalaea grisella Pascoe 1864", "canonical":"Aeschopalaea grisella", "hybrid":false, "details":[{"genus":{"string":"Aeschopalaea"}, "species":{"string":"grisella", "authorship":"Pascoe, 1864", "basionymAuthorTeam":{"authorTeam":"Pascoe", "author":["Pascoe"], "year":"1864"}}}], "parser_run":1, "positions":{"0":["genus", 10], "11":["species", 19], "20":["author_word", 26], "28":["year", 32]}}}
82
93
  Læptura laetifica Dow, 1913|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":1,"verbatim":"L\u00e6ptura laetifica Dow, 1913","normalized":"Laeptura laetifica Dow 1913","canonical":"Laeptura laetifica","hybrid":false,"details":[{"genus":{"string":"Laeptura"},"species":{"string":"laetifica","authorship":"Dow, 1913","basionymAuthorTeam":{"authorTeam":"Dow","author":["Dow"],"year":"1913"}}}],"positions":{"0":["genus",7],"8":["species",17],"18":["author_word",21],"23":["year",27]}}}
83
94
  Leptura lætifica Dow, 1913|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":1,"verbatim":"Leptura l\u00e6tifica Dow, 1913","normalized":"Leptura laetifica Dow 1913","canonical":"Leptura laetifica","hybrid":false,"details":[{"genus":{"string":"Leptura"},"species":{"string":"laetifica","authorship":"Dow, 1913","basionymAuthorTeam":{"authorTeam":"Dow","author":["Dow"],"year":"1913"}}}],"positions":{"0":["genus",7],"8":["species",16],"17":["author_word",20],"22":["year",26]}}}
84
95
  Leptura leætifica Dow, 1913|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":1,"verbatim":"Leptura le\u00e6tifica Dow, 1913","normalized":"Leptura leaetifica Dow 1913","canonical":"Leptura leaetifica","hybrid":false,"details":[{"genus":{"string":"Leptura"},"species":{"string":"leaetifica","authorship":"Dow, 1913","basionymAuthorTeam":{"authorTeam":"Dow","author":["Dow"],"year":"1913"}}}],"positions":{"0":["genus",7],"8":["species",17],"18":["author_word",21],"23":["year",27]}}}
@@ -88,25 +99,33 @@ Leœptura laetifica Dow, 1913|{"scientificName":{"parsed":true, "parser_version"
88
99
  Œdicnemus capensis|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":1,"verbatim":"\u0152dicnemus capensis","normalized":"Oedicnemus capensis","canonical":"Oedicnemus capensis","hybrid":false,"details":[{"genus":{"string":"Oedicnemus"},"species":{"string":"capensis"}}],"positions":{"0":["genus",9],"10":["species",18]}}}
89
100
  Œnanthe œnanthe|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":1,"verbatim":"\u0152nanthe \u0153nanthe","normalized":"Oenanthe oenanthe","canonical":"Oenanthe oenanthe","hybrid":false,"details":[{"genus":{"string":"Oenanthe"},"species":{"string":"oenanthe"}}],"positions":{"0":["genus",7],"8":["species",15]}}}
90
101
  Hördeum vulgare cœrulescens|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Hördeum vulgare cœrulescens", "normalized":"Hordeum vulgare coerulescens", "canonical":"Hordeum vulgare coerulescens", "hybrid":false, "details":[{"genus":{"string":"Hordeum"}, "species":{"string":"vulgare"}, "infraspecies":[{"string":"coerulescens", "rank":"n/a"}]}], "parser_run":2, "positions":{"0":["genus", 7], "8":["species", 15], "16":["infraspecies", 27]}}}
102
+ Hordeum vulgare cœrulescens Metzger|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Hordeum vulgare cœrulescens Metzger", "normalized":"Hordeum vulgare coerulescens Metzger", "canonical":"Hordeum vulgare coerulescens", "hybrid":false, "details":[{"genus":{"string":"Hordeum"}, "species":{"string":"vulgare"}, "infraspecies":[{"string":"coerulescens", "rank":"n/a", "authorship":"Metzger", "basionymAuthorTeam":{"authorTeam":"Metzger", "author":["Metzger"]}}]}], "parser_run":1, "positions":{"0":["genus", 7], "8":["species", 15], "16":["infraspecies", 27], "28":["author_word", 35]}}}
91
103
  Hordeum vulgare f. cœrulescens|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Hordeum vulgare f. cœrulescens", "normalized":"Hordeum vulgare f. coerulescens", "canonical":"Hordeum vulgare coerulescens", "hybrid":false, "details":[{"genus":{"string":"Hordeum"}, "species":{"string":"vulgare"}, "infraspecies":[{"string":"coerulescens", "rank":"f."}]}], "parser_run":1, "positions":{"0":["genus", 7], "8":["species", 15], "16":["infraspecific_type", 18], "19":["infraspecies", 30]}}}
92
104
 
93
105
  # old style s (ſ)
94
106
  Musca domeſtica Linnaeus 1758 sec. Pemberton 1947|{"scientificName":{"parsed":true, "verbatim":"Musca domeſtica Linnaeus 1758 sec. Pemberton 1947", "normalized":"Musca domestica Linnaeus 1758", "canonical":"Musca domestica", "hybrid":false, "details":[{"genus":{"string":"Musca"}, "species":{"string":"domestica", "authorship":"Linnaeus 1758", "basionymAuthorTeam":{"authorTeam":"Linnaeus", "author":["Linnaeus"], "year":"1758"}}}], "parser_version":"test_version", "parser_run":1, "positions":{"0":["genus", 5], "6":["species", 15], "16":["author_word", 24], "25":["year", 29]}}}
107
+ Amphisbæna fuliginoſa Linnaeus 1758|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Amphisbæna fuliginoſa Linnaeus 1758", "normalized":"Amphisbaena fuliginosa Linnaeus 1758", "canonical":"Amphisbaena fuliginosa", "hybrid":false, "details":[{"genus":{"string":"Amphisbaena"}, "species":{"string":"fuliginosa", "authorship":"Linnaeus 1758", "basionymAuthorTeam":{"authorTeam":"Linnaeus", "author":["Linnaeus"], "year":"1758"}}}], "parser_run":1, "positions":{"0":["genus", 10], "11":["species", 21], "22":["author_word", 30], "31":["year", 35]}}}
95
108
 
96
- #basionym in parenthesis
109
+ #basionym author in parenthesis
97
110
  Zophosis persis (Chatanay, 1914)|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":1,"verbatim":"Zophosis persis (Chatanay, 1914)","normalized":"Zophosis persis (Chatanay 1914)","canonical":"Zophosis persis","hybrid":false,"details":[{"genus":{"string":"Zophosis"},"species":{"string":"persis","authorship":"(Chatanay, 1914)","basionymAuthorTeam":{"authorTeam":"Chatanay","author":["Chatanay"],"year":"1914"}}}],"positions":{"0":["genus",8],"9":["species",15],"17":["author_word",25],"27":["year",31]}}}
98
111
  Zophosis persis (Chatanay 1914)|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":1,"verbatim":"Zophosis persis (Chatanay 1914)","normalized":"Zophosis persis (Chatanay 1914)","canonical":"Zophosis persis","hybrid":false,"details":[{"genus":{"string":"Zophosis"},"species":{"string":"persis","authorship":"(Chatanay 1914)","basionymAuthorTeam":{"authorTeam":"Chatanay","author":["Chatanay"],"year":"1914"}}}],"positions":{"0":["genus",8],"9":["species",15],"17":["author_word",25],"26":["year",30]}}}
99
112
  Zophosis persis (Chatanay), 1914|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":1,"verbatim":"Zophosis persis (Chatanay), 1914","normalized":"Zophosis persis (Chatanay 1914)","canonical":"Zophosis persis","hybrid":false,"details":[{"genus":{"string":"Zophosis"},"species":{"string":"persis","authorship":"(Chatanay), 1914","basionymAuthorTeam":{"author_team":"(Chatanay), 1914","author":["Chatanay"],"year":"1914"}}}],"positions":{"0":["genus",8],"9":["species",15],"17":["author_word",25],"28":["year",32]}}}
113
+ Zophosis quadrilineata (Oliv. )|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Zophosis quadrilineata (Oliv. )", "normalized":"Zophosis quadrilineata (Oliv.)", "canonical":"Zophosis quadrilineata", "hybrid":false, "details":[{"genus":{"string":"Zophosis"}, "species":{"string":"quadrilineata", "authorship":"(Oliv. )", "basionymAuthorTeam":{"authorTeam":"Oliv.", "author":["Oliv."]}}}], "parser_run":1, "positions":{"0":["genus", 8], "9":["species", 22], "24":["author_word", 29]}}}
114
+ Zophosis quadrilineata (Olivier 1795)|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Zophosis quadrilineata (Olivier 1795)", "normalized":"Zophosis quadrilineata (Olivier 1795)", "canonical":"Zophosis quadrilineata", "hybrid":false, "details":[{"genus":{"string":"Zophosis"}, "species":{"string":"quadrilineata", "authorship":"(Olivier 1795)", "basionymAuthorTeam":{"authorTeam":"Olivier", "author":["Olivier"], "year":"1795"}}}], "parser_run":1, "positions":{"0":["genus", 8], "9":["species", 22], "24":["author_word", 31], "32":["year", 36]}}}
100
115
 
101
116
  #binomial with basionym and combination authors
102
117
  Pseudocercospora dendrobii(H.C. Burnett)U. Braun & Crous 2003|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":1,"verbatim":"Pseudocercospora dendrobii(H.C. Burnett)U. Braun & Crous 2003","normalized":"Pseudocercospora dendrobii (H.C. Burnett) U. Braun et Crous 2003","canonical":"Pseudocercospora dendrobii","hybrid":false,"details":[{"genus":{"string":"Pseudocercospora"},"species":{"string":"dendrobii","authorship":"(H.C. Burnett)U. Braun & Crous 2003","combinationAuthorTeam":{"authorTeam":"U. Braun & Crous","author":["U. Braun","Crous"],"year":"2003"},"basionymAuthorTeam":{"authorTeam":"H.C. Burnett","author":["H.C. Burnett"]}}}],"positions":{"0":["genus",16],"17":["species",26],"27":["author_word",31],"36":["author_word",43],"44":["author_word",46],"47":["author_word",52],"55":["author_word",60],"65":["year",69]}}}
103
118
  Pseudocercospora dendrobii(H.C. Burnett, 1873)U. Braun & Crous 2003|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":1,"verbatim":"Pseudocercospora dendrobii(H.C. Burnett, 1873)U. Braun & Crous 2003","normalized":"Pseudocercospora dendrobii (H.C. Burnett 1873) U. Braun et Crous 2003","canonical":"Pseudocercospora dendrobii","hybrid":false,"details":[{"genus":{"string":"Pseudocercospora"},"species":{"string":"dendrobii","authorship":"(H.C. Burnett, 1873)U. Braun & Crous 2003","combinationAuthorTeam":{"authorTeam":"U. Braun & Crous","author":["U. Braun","Crous"],"year":"2003"},"basionymAuthorTeam":{"authorTeam":"H.C. Burnett","author":["H.C. Burnett"],"year":"1873"}}}],"positions":{"0":["genus",16],"17":["species",26],"27":["author_word",31],"36":["author_word",43],"45":["year",49],"50":["author_word",52],"53":["author_word",58],"61":["author_word",66],"71":["year",75]}}}
104
119
  Pseudocercospora dendrobii(H.C. Burnett 1873)U. Braun & Crous , 2003|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":1,"verbatim":"Pseudocercospora dendrobii(H.C. Burnett 1873)U. Braun & Crous , 2003","normalized":"Pseudocercospora dendrobii (H.C. Burnett 1873) U. Braun et Crous 2003","canonical":"Pseudocercospora dendrobii","hybrid":false,"details":[{"genus":{"string":"Pseudocercospora"},"species":{"string":"dendrobii","authorship":"(H.C. Burnett 1873)U. Braun & Crous , 2003","combinationAuthorTeam":{"authorTeam":"U. Braun & Crous","author":["U. Braun","Crous"],"year":"2003"},"basionymAuthorTeam":{"authorTeam":"H.C. Burnett","author":["H.C. Burnett"],"year":"1873"}}}],"positions":{"0":["genus",16],"17":["species",26],"27":["author_word",31],"36":["author_word",43],"44":["year",48],"49":["author_word",51],"52":["author_word",57],"60":["author_word",65],"71":["year",75]}}}
120
+ Sedella pumila (Benth.) Britton & Rose|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Sedella pumila (Benth.) Britton & Rose", "normalized":"Sedella pumila (Benth.) Britton et Rose", "canonical":"Sedella pumila", "hybrid":false, "details":[{"genus":{"string":"Sedella"}, "species":{"string":"pumila", "authorship":"(Benth.) Britton & Rose", "combinationAuthorTeam":{"authorTeam":"Britton & Rose", "author":["Britton", "Rose"]}, "basionymAuthorTeam":{"authorTeam":"Benth.", "author":["Benth."]}}}], "parser_run":1, "positions":{"0":["genus", 7], "8":["species", 14], "16":["author_word", 22], "24":["author_word", 31], "34":["author_word", 38]}}}
105
121
 
106
122
  #infraspecies without rank
123
+ Hydnellum scrobiculatum zonatum (Batsch) K. A. Harrison 1961|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Hydnellum scrobiculatum zonatum (Batsch) K. A. Harrison 1961", "normalized":"Hydnellum scrobiculatum zonatum (Batsch) K. A. Harrison 1961", "canonical":"Hydnellum scrobiculatum zonatum", "hybrid":false, "details":[{"genus":{"string":"Hydnellum"}, "species":{"string":"scrobiculatum"}, "infraspecies":[{"string":"zonatum", "rank":"n/a", "authorship":"(Batsch) K. A. Harrison 1961", "combinationAuthorTeam":{"authorTeam":"K. A. Harrison", "author":["K. A. Harrison"], "year":"1961"}, "basionymAuthorTeam":{"authorTeam":"Batsch", "author":["Batsch"]}}]}], "parser_run":1, "positions":{"0":["genus", 9], "10":["species", 23], "24":["infraspecies", 31], "33":["author_word", 39], "41":["author_word", 43], "44":["author_word", 46], "47":["author_word", 55], "56":["year", 60]}}}
107
124
  Hydnellum scrobiculatum zonatum (Banker) D. Hall & D.E. Stuntz 1972|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":1,"verbatim":"Hydnellum scrobiculatum zonatum (Banker) D. Hall & D.E. Stuntz 1972","normalized":"Hydnellum scrobiculatum zonatum (Banker) D. Hall et D.E. Stuntz 1972","canonical":"Hydnellum scrobiculatum zonatum","hybrid":false,"details":[{"genus":{"string":"Hydnellum"},"species":{"string":"scrobiculatum"},"infraspecies":[{"string":"zonatum","rank":"n\/a","authorship":"(Banker) D. Hall & D.E. Stuntz 1972","combinationAuthorTeam":{"authorTeam":"D. Hall & D.E. Stuntz","author":["D. Hall","D.E. Stuntz"],"year":"1972"},"basionymAuthorTeam":{"authorTeam":"Banker","author":["Banker"]}}]}],"positions":{"0":["genus",9],"10":["species",23],"24":["infraspecies",31],"33":["author_word",39],"41":["author_word",43],"44":["author_word",48],"51":["author_word",55],"56":["author_word",62],"63":["year",67]}}}
108
125
  Hydnellum (Hydnellum) scrobiculatum zonatum (Banker) D. Hall & D.E. Stuntz 1972|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":1,"verbatim":"Hydnellum (Hydnellum) scrobiculatum zonatum (Banker) D. Hall & D.E. Stuntz 1972","normalized":"Hydnellum (Hydnellum) scrobiculatum zonatum (Banker) D. Hall et D.E. Stuntz 1972","canonical":"Hydnellum scrobiculatum zonatum","hybrid":false,"details":[{"genus":{"string":"Hydnellum"},"infragenus":{"string":"Hydnellum"},"species":{"string":"scrobiculatum"},"infraspecies":[{"string":"zonatum","rank":"n\/a","authorship":"(Banker) D. Hall & D.E. Stuntz 1972","combinationAuthorTeam":{"authorTeam":"D. Hall & D.E. Stuntz","author":["D. Hall","D.E. Stuntz"],"year":"1972"},"basionymAuthorTeam":{"authorTeam":"Banker","author":["Banker"]}}]}],"positions":{"0":["genus",9],"11":["infragenus",20],"22":["species",35],"36":["infraspecies",43],"45":["author_word",51],"53":["author_word",55],"56":["author_word",60],"63":["author_word",67],"68":["author_word",74],"75":["year",79]}}}
109
126
  Hydnellum scrobiculatum zonatum|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":1,"verbatim":"Hydnellum scrobiculatum zonatum","normalized":"Hydnellum scrobiculatum zonatum","canonical":"Hydnellum scrobiculatum zonatum","hybrid":false,"details":[{"genus":{"string":"Hydnellum"},"species":{"string":"scrobiculatum"},"infraspecies":[{"string":"zonatum","rank":"n\/a"}]}],"positions":{"0":["genus",9],"10":["species",23],"24":["infraspecies",31]}}}
127
+ Mus musculus hortulanus|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Mus musculus hortulanus", "normalized":"Mus musculus hortulanus", "canonical":"Mus musculus hortulanus", "hybrid":false, "details":[{"genus":{"string":"Mus"}, "species":{"string":"musculus"}, "infraspecies":[{"string":"hortulanus", "rank":"n/a"}]}], "parser_run":1, "positions":{"0":["genus", 3], "4":["species", 12], "13":["infraspecies", 23]}}}
128
+ Ortygospiza atricollis mülleri|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Ortygospiza atricollis mülleri", "normalized":"Ortygospiza atricollis mulleri", "canonical":"Ortygospiza atricollis mulleri", "hybrid":false, "details":[{"genus":{"string":"Ortygospiza"}, "species":{"string":"atricollis"}, "infraspecies":[{"string":"mulleri", "rank":"n/a"}]}], "parser_run":2, "positions":{"0":["genus", 11], "12":["species", 22], "23":["infraspecies", 30]}}}
110
129
 
111
130
  #infraspecies with rank
112
131
  Aus bus Linn. var. bus|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Aus bus Linn. var. bus", "normalized":"Aus bus Linn. var. bus", "canonical":"Aus bus bus", "hybrid":false, "details":[{"genus":{"string":"Aus"}, "species":{"string":"bus", "authorship":"Linn.", "basionymAuthorTeam":{"authorTeam":"Linn.", "author":["Linn."]}}, "infraspecies":[{"string":"bus", "rank":"var."}]}], "parser_run":1, "positions":{"0":["genus", 3], "4":["species", 7], "8":["author_word", 13], "14":["infraspecific_type", 18], "19":["infraspecies", 22]}}}
@@ -125,18 +144,21 @@ Polypodium pectinatum L.f. typica Rosenst.|{"scientificName":{"parsed":true, "pa
125
144
  Polypodium pectinatum L. f. thisisjunk Rosent.|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Polypodium pectinatum L. f. thisisjunk Rosent.", "normalized":"Polypodium pectinatum L. f. thisisjunk Rosent.", "canonical":"Polypodium pectinatum thisisjunk", "hybrid":false, "details":[{"genus":{"string":"Polypodium"}, "species":{"string":"pectinatum", "authorship":"L.", "basionymAuthorTeam":{"authorTeam":"L.", "author":["L."]}}, "infraspecies":[{"string":"thisisjunk", "rank":"f.", "authorship":"Rosent.", "basionymAuthorTeam":{"authorTeam":"Rosent.", "author":["Rosent."]}}]}], "parser_run":1, "positions":{"0":["genus", 10], "11":["species", 21], "22":["author_word", 24], "25":["infraspecific_type", 27], "28":["infraspecies", 38], "39":["author_word", 46]}}}
126
145
  Polypodium lineare C.Chr. f. caudatoattenuatum Takeda|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Polypodium lineare C.Chr. f. caudatoattenuatum Takeda", "normalized":"Polypodium lineare C.Chr. f. caudatoattenuatum Takeda", "canonical":"Polypodium lineare caudatoattenuatum", "hybrid":false, "details":[{"genus":{"string":"Polypodium"}, "species":{"string":"lineare", "authorship":"C.Chr.", "basionymAuthorTeam":{"authorTeam":"C.Chr.", "author":["C.Chr."]}}, "infraspecies":[{"string":"caudatoattenuatum", "rank":"f.", "authorship":"Takeda", "basionymAuthorTeam":{"authorTeam":"Takeda", "author":["Takeda"]}}]}], "parser_run":1, "positions":{"0":["genus", 10], "11":["species", 18], "19":["author_word", 25], "26":["infraspecific_type", 28], "29":["infraspecies", 46], "47":["author_word", 53]}}}
127
146
  Rhododendron weyrichii Maxim. f. albiflorum T.Yamaz.|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Rhododendron weyrichii Maxim. f. albiflorum T.Yamaz.", "normalized":"Rhododendron weyrichii Maxim. f. albiflorum T.Yamaz.", "canonical":"Rhododendron weyrichii albiflorum", "hybrid":false, "details":[{"genus":{"string":"Rhododendron"}, "species":{"string":"weyrichii", "authorship":"Maxim.", "basionymAuthorTeam":{"authorTeam":"Maxim.", "author":["Maxim."]}}, "infraspecies":[{"string":"albiflorum", "rank":"f.", "authorship":"T.Yamaz.", "basionymAuthorTeam":{"authorTeam":"T.Yamaz.", "author":["T.Yamaz."]}}]}], "parser_run":1, "positions":{"0":["genus", 12], "13":["species", 22], "23":["author_word", 29], "30":["infraspecific_type", 32], "33":["infraspecies", 43], "44":["author_word", 52]}}}
147
+ Armeria maaritima (Mill.) Willd. fma. originaria Bern.|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Armeria maaritima (Mill.) Willd. fma. originaria Bern.", "normalized":"Armeria maaritima (Mill.) Willd. fma. originaria Bern.", "canonical":"Armeria maaritima originaria", "hybrid":false, "details":[{"genus":{"string":"Armeria"}, "species":{"string":"maaritima", "authorship":"(Mill.) Willd.", "combinationAuthorTeam":{"authorTeam":"Willd.", "author":["Willd."]}, "basionymAuthorTeam":{"authorTeam":"Mill.", "author":["Mill."]}}, "infraspecies":[{"string":"originaria", "rank":"fma.", "authorship":"Bern.", "basionymAuthorTeam":{"authorTeam":"Bern.", "author":["Bern."]}}]}], "parser_run":1, "positions":{"0":["genus", 7], "8":["species", 17], "19":["author_word", 24], "26":["author_word", 32], "33":["infraspecific_type", 37], "38":["infraspecies", 48], "49":["author_word", 54]}}}
148
+ Cotoneaster (Pyracantha) rogersiana var.aurantiaca|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Cotoneaster (Pyracantha) rogersiana var.aurantiaca", "normalized":"Cotoneaster (Pyracantha) rogersiana var. aurantiaca", "canonical":"Cotoneaster rogersiana aurantiaca", "hybrid":false, "details":[{"genus":{"string":"Cotoneaster"}, "infragenus":{"string":"Pyracantha"}, "species":{"string":"rogersiana"}, "infraspecies":[{"string":"aurantiaca", "rank":"var."}]}], "parser_run":1, "positions":{"0":["genus", 11], "13":["infragenus", 23], "25":["species", 35], "36":["infraspecific_type", 40], "40":["infraspecies", 50]}}}
149
+ #TODO: Homalanthus nutans (Mull.Arg.) Benth. & Hook. f. ex Drake|{}
128
150
 
129
151
  #infraspecies_multiple
130
152
  Hydnellum scrobiculatum var. zonatum f. parvum (Banker) D. Hall & D.E. Stuntz 1972|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Hydnellum scrobiculatum var. zonatum f. parvum (Banker) D. Hall & D.E. Stuntz 1972", "normalized":"Hydnellum scrobiculatum var. zonatum f. parvum (Banker) D. Hall et D.E. Stuntz 1972", "canonical":"Hydnellum scrobiculatum zonatum parvum", "hybrid":false, "details":[{"genus":{"string":"Hydnellum"}, "species":{"string":"scrobiculatum"}, "infraspecies":[{"string":"zonatum", "rank":"var."}, {"string":"parvum", "rank":"f.", "authorship":"(Banker) D. Hall & D.E. Stuntz 1972", "combinationAuthorTeam":{"authorTeam":"D. Hall & D.E. Stuntz", "author":["D. Hall", "D.E. Stuntz"], "year":"1972"}, "basionymAuthorTeam":{"authorTeam":"Banker", "author":["Banker"]}}]}], "parser_run":1, "positions":{"0":["genus", 9], "10":["species", 23], "24":["infraspecific_type", 28], "29":["infraspecies", 36], "37":["infraspecific_type", 39], "40":["infraspecies", 46], "48":["author_word", 54], "56":["author_word", 58], "59":["author_word", 63], "66":["author_word", 70], "71":["author_word", 77], "78":["year", 82]}}}
131
153
  Senecio fuchsii C.C.Gmel. subsp. fuchsii var. expansus (Boiss. & Heldr.) Hayek|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Senecio fuchsii C.C.Gmel. subsp. fuchsii var. expansus (Boiss. & Heldr.) Hayek", "normalized":"Senecio fuchsii C.C.Gmel. subsp. fuchsii var. expansus (Boiss. et Heldr.) Hayek", "canonical":"Senecio fuchsii fuchsii expansus", "hybrid":false, "details":[{"genus":{"string":"Senecio"}, "species":{"string":"fuchsii", "authorship":"C.C.Gmel.", "basionymAuthorTeam":{"authorTeam":"C.C.Gmel.", "author":["C.C.Gmel."]}}, "infraspecies":[{"string":"fuchsii", "rank":"subsp."}, {"string":"expansus", "rank":"var.", "authorship":"(Boiss. & Heldr.) Hayek", "combinationAuthorTeam":{"authorTeam":"Hayek", "author":["Hayek"]}, "basionymAuthorTeam":{"authorTeam":"Boiss. & Heldr.", "author":["Boiss.", "Heldr."]}}]}], "parser_run":1, "positions":{"0":["genus", 7], "8":["species", 15], "16":["author_word", 25], "26":["infraspecific_type", 32], "33":["infraspecies", 40], "41":["infraspecific_type", 45], "46":["infraspecies", 54], "56":["author_word", 62], "65":["author_word", 71], "73":["author_word", 78]}}}
132
154
  Senecio fuchsii C.C.Gmel. subsp. fuchsii var. fuchsii|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Senecio fuchsii C.C.Gmel. subsp. fuchsii var. fuchsii", "normalized":"Senecio fuchsii C.C.Gmel. subsp. fuchsii var. fuchsii", "canonical":"Senecio fuchsii fuchsii fuchsii", "hybrid":false, "details":[{"genus":{"string":"Senecio"}, "species":{"string":"fuchsii", "authorship":"C.C.Gmel.", "basionymAuthorTeam":{"authorTeam":"C.C.Gmel.", "author":["C.C.Gmel."]}}, "infraspecies":[{"string":"fuchsii", "rank":"subsp."}, {"string":"fuchsii", "rank":"var."}]}], "parser_run":1, "positions":{"0":["genus", 7], "8":["species", 15], "16":["author_word", 25], "26":["infraspecific_type", 32], "33":["infraspecies", 40], "41":["infraspecific_type", 45], "46":["infraspecies", 53]}}}
133
-
155
+ Euastrum divergens var. rhodesiense f. coronulum A.M. Scott & Prescott|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Euastrum divergens var. rhodesiense f. coronulum A.M. Scott & Prescott", "normalized":"Euastrum divergens var. rhodesiense f. coronulum A.M. Scott et Prescott", "canonical":"Euastrum divergens rhodesiense coronulum", "hybrid":false, "details":[{"genus":{"string":"Euastrum"}, "species":{"string":"divergens"}, "infraspecies":[{"string":"rhodesiense", "rank":"var."}, {"string":"coronulum", "rank":"f.", "authorship":"A.M. Scott & Prescott", "basionymAuthorTeam":{"authorTeam":"A.M. Scott & Prescott", "author":["A.M. Scott", "Prescott"]}}]}], "parser_run":1, "positions":{"0":["genus", 8], "9":["species", 18], "19":["infraspecific_type", 23], "24":["infraspecies", 35], "36":["infraspecific_type", 38], "39":["infraspecies", 48], "49":["author_word", 53], "54":["author_word", 59], "62":["author_word", 70]}}}
134
156
 
135
157
  #species and infraspecies without epithets, comparisons
136
- Alviniconcha aff alba|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Alviniconcha aff alba", "normalized":"Alviniconcha", "canonical":"Alviniconcha", "hybrid":false, "details":[{"uninomial":{"string":"Alviniconcha"}}], "parser_run":1, "positions":{"0":["uninomial", 12]}}}
137
- Alviniconcha aff. alba|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Alviniconcha aff. alba", "normalized":"Alviniconcha", "canonical":"Alviniconcha", "hybrid":false, "details":[{"uninomial":{"string":"Alviniconcha"}}], "parser_run":1, "positions":{"0":["uninomial", 12]}}}
138
- Alviniconcha cf. alba|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Alviniconcha cf. alba", "normalized":"Alviniconcha alba", "canonical":"Alviniconcha alba", "hybrid":false, "details":[{"genus":{"string":"Alviniconcha"}, "species":{"string":"alba"}}], "parser_run":1, "positions":{"0":["genus", 12], "13":["species", 17]}}}
139
- Alviniconcha cf alba|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Alviniconcha cf alba", "normalized":"Alviniconcha alba", "canonical":"Alviniconcha alba", "hybrid":false, "details":[{"genus":{"string":"Alviniconcha"}, "species":{"string":"alba"}}], "parser_run":1, "positions":{"0":["genus", 12], "13":["species", 17]}}}
158
+ Acarinina aff. pentacamerata|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Acarinina aff. pentacamerata", "normalized":"Acarinina", "canonical":"Acarinina", "hybrid":false, "details":[{"genus":{"string":"Acarinina"}, "annotation_identification":"aff.", "ignored":{"species":{"string":"pentacamerata"}}}], "parser_run":1, "positions":{"0":["genus", 9], "10":["annotation_identification", 14]}}}
159
+ Acarinina aff pentacamerata|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Acarinina aff pentacamerata", "normalized":"Acarinina", "canonical":"Acarinina", "hybrid":false, "details":[{"genus":{"string":"Acarinina"}, "annotation_identification":"aff", "ignored":{"species":{"string":"pentacamerata"}}}], "parser_run":1, "positions":{"0":["genus", 9], "10":["annotation_identification", 14]}}}
160
+ Abturia cf. alabamensis (Morton )|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Abturia cf. alabamensis (Morton )", "normalized":"Abturia cf. alabamensis (Morton)", "canonical":"Abturia alabamensis", "hybrid":false, "details":[{"genus":{"string":"Abturia"}, "annotation_identification":"cf.", "species":{"species":{"string":"alabamensis", "authorship":"(Morton )", "basionymAuthorTeam":{"authorTeam":"Morton", "author":["Morton"]}}}}], "parser_run":1, "positions":{"0":["genus", 7], "8":["annotation_identification", 11], "12":["species", 23], "25":["author_word", 31]}}}
161
+ Abturia cf alabamensis (Morton )|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Abturia cf alabamensis (Morton )", "normalized":"Abturia cf alabamensis (Morton)", "canonical":"Abturia alabamensis", "hybrid":false, "details":[{"genus":{"string":"Abturia"}, "annotation_identification":"cf", "species":{"species":{"string":"alabamensis", "authorship":"(Morton )", "basionymAuthorTeam":{"authorTeam":"Morton", "author":["Morton"]}}}}], "parser_run":1, "positions":{"0":["genus", 7], "8":["annotation_identification", 11], "11":["species", 22], "24":["author_word", 30]}}}
140
162
  Alyxia reinwardti var|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Alyxia reinwardti var", "normalized":"Alyxia reinwardti", "canonical":"Alyxia reinwardti", "hybrid":false, "details":[{"genus":{"string":"Alyxia"}, "species":{"string":"reinwardti"}}], "parser_run":1, "positions":{"0":["genus", 6], "7":["species", 17]}}}
141
163
  Alyxia reinwardti var.|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Alyxia reinwardti var.", "normalized":"Alyxia reinwardti", "canonical":"Alyxia reinwardti", "hybrid":false, "details":[{"genus":{"string":"Alyxia"}, "species":{"string":"reinwardti"}}], "parser_run":1, "positions":{"0":["genus", 6], "7":["species", 17]}}}
142
164
  Alyxia reinwardti ssp|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Alyxia reinwardti ssp", "normalized":"Alyxia reinwardti", "canonical":"Alyxia reinwardti", "hybrid":false, "details":[{"genus":{"string":"Alyxia"}, "species":{"string":"reinwardti"}}], "parser_run":1, "positions":{"0":["genus", 6], "7":["species", 17]}}}
@@ -147,7 +169,11 @@ Xenodon sp|{"scientificName":{"parsed":true, "parser_version":"test_version", "v
147
169
  Xenodon sp.|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Xenodon sp.", "normalized":"Xenodon", "canonical":"Xenodon", "hybrid":false, "details":[{"uninomial":{"string":"Xenodon"}}], "parser_run":1, "positions":{"0":["uninomial", 7]}}}
148
170
  Formicidae cf.|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Formicidae cf.", "normalized":"Formicidae", "canonical":"Formicidae", "hybrid":false, "details":[{"uninomial":{"string":"Formicidae"}}], "parser_run":1, "positions":{"0":["uninomial", 10]}}}
149
171
  Formicidae cf|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Formicidae cf", "normalized":"Formicidae", "canonical":"Formicidae", "hybrid":false, "details":[{"uninomial":{"string":"Formicidae"}}], "parser_run":1, "positions":{"0":["uninomial", 10]}}}
150
-
172
+ Acastoides spp.|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Acastoides spp.", "normalized":"Acastoides", "canonical":"Acastoides", "hybrid":false, "details":[{"uninomial":{"string":"Acastoides"}}], "parser_run":1, "positions":{"0":["uninomial", 10]}}}
173
+ Sphingomonas sp. 37|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Sphingomonas sp. 37", "normalized":"Sphingomonas", "canonical":"Sphingomonas", "hybrid":false, "details":[{"genus":{"string":"Sphingomonas"}, "annotation_identification":"sp.", "ignored":{"unparsed":"37"}}], "parser_run":1, "positions":{"0":["genus", 12], "13":["annotation_identification", 16]}}}
174
+ Thryothorus leucotis spp. bogotensis|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Thryothorus leucotis spp. bogotensis", "normalized":"Thryothorus leucotis", "canonical":"Thryothorus leucotis", "hybrid":false, "details":[{"genus":{"string":"Thryothorus"}, "species":{"string":"leucotis"}, "infraspecies":[{"annotation_identification":"spp.", "ignored":{"infraspecies":{"string":"bogotensis", "rank":"n/a"}}}]}], "parser_run":1, "positions":{"0":["genus", 11], "12":["species", 20], "21":["annotation_identification", 25]}}}
175
+ Endoxyla sp. GM-, 2003|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Endoxyla sp. GM-, 2003", "normalized":"Endoxyla", "canonical":"Endoxyla", "hybrid":false, "details":[{"genus":{"string":"Endoxyla"}, "annotation_identification":"sp.", "ignored":{"unparsed":"GM-, 2003"}}], "parser_run":1, "positions":{"0":["genus", 8], "9":["annotation_identification", 12]}}}
176
+ Liopropoma sp.2 Not applicable|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Liopropoma sp.2 Not applicable", "normalized":"Liopropoma", "canonical":"Liopropoma", "hybrid":false, "details":[{"genus":{"string":"Liopropoma"}, "annotation_identification":"sp.", "ignored":{"unparsed":"2 Not applicable"}}], "parser_run":1, "positions":{"0":["genus", 10], "11":["annotation_identification", 14]}}}
151
177
 
152
178
  #unknown authorship
153
179
  Tragacantha leporina (?) Kuntze|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":1,"verbatim":"Tragacantha leporina (?) Kuntze","normalized":"Tragacantha leporina (?) Kuntze","canonical":"Tragacantha leporina","hybrid":false,"details":[{"genus":{"string":"Tragacantha"},"species":{"string":"leporina","authorship":"(?) Kuntze","combinationAuthorTeam":{"authorTeam":"Kuntze","author":["Kuntze"]},"basionymAuthorTeam":{"authorTeam":"(?)","author":["?"]}}}],"positions":{"0":["genus",11],"12":["species",20],"22":["unknown_author",23],"25":["author_word",31]}}}
@@ -219,6 +245,7 @@ Arthopyrenia hyalospora x|{"scientificName":{"parsed":true, "parser_version":"te
219
245
  Arthopyrenia hyalospora × ?|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":1,"verbatim":"Arthopyrenia hyalospora \u00d7 ?","normalized":"Arthopyrenia hyalospora \u00d7 ?","canonical":"Arthopyrenia hyalospora","hybrid":true,"details":[{"genus":{"string":"Arthopyrenia"},"species":{"string":"hyalospora"}},"?"],"positions":{"0":["genus",12],"13":["species",23]}}}
220
246
  Agrostis L. × Polypogon Desf.|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":1,"verbatim":"Agrostis L. \u00d7 Polypogon Desf.","normalized":"Agrostis L. \u00d7 Polypogon Desf.","canonical":"Agrostis × Polypogon","hybrid":true,"details":[{"uninomial":{"string":"Agrostis","authorship":"L.","basionymAuthorTeam":{"authorTeam":"L.","author":["L."]}}},{"uninomial":{"string":"Polypogon","authorship":"Desf.","basionymAuthorTeam":{"authorTeam":"Desf.","author":["Desf."]}}}],"positions":{"0":["uninomial",8],"9":["author_word",11],"14":["uninomial",23],"24":["author_word",29]}}}
221
247
  Agrostis stolonifera L. × Polypogon monspeliensis (L.) Desf.|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":1,"verbatim":"Agrostis stolonifera L. \u00d7 Polypogon monspeliensis (L.) Desf.","normalized":"Agrostis stolonifera L. \u00d7 Polypogon monspeliensis (L.) Desf.","canonical":"Agrostis stolonifera × Polypogon monspeliensis","hybrid":true,"details":[{"genus":{"string":"Agrostis"},"species":{"string":"stolonifera","authorship":"L.","basionymAuthorTeam":{"authorTeam":"L.","author":["L."]}}},{"genus":{"string":"Polypogon"},"species":{"string":"monspeliensis","authorship":"(L.) Desf.","combinationAuthorTeam":{"authorTeam":"Desf.","author":["Desf."]},"basionymAuthorTeam":{"authorTeam":"L.","author":["L."]}}}],"positions":{"0":["genus",8],"9":["species",20],"21":["author_word",23],"26":["genus",35],"36":["species",49],"51":["author_word",53],"55":["author_word",60]}}}
248
+ Coeloglossum viride (L.) Hartman x Dactylorhiza majalis (Rchb. f.) P.F. Hunt & Summerhayes ssp. praetermissa (Druce) D.M. Moore & Soó|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Coeloglossum viride (L.) Hartman x Dactylorhiza majalis (Rchb. f.) P.F. Hunt & Summerhayes ssp. praetermissa (Druce) D.M. Moore & Soó", "normalized":"Coeloglossum viride (L.) Hartman × Dactylorhiza majalis (Rchb. f.) P.F. Hunt et Summerhayes ssp. praetermissa (Druce) D.M. Moore et Soó", "canonical":"Coeloglossum viride × Dactylorhiza majalis praetermissa", "hybrid":true, "details":[{"genus":{"string":"Coeloglossum"}, "species":{"string":"viride", "authorship":"(L.) Hartman", "combinationAuthorTeam":{"authorTeam":"Hartman", "author":["Hartman"]}, "basionymAuthorTeam":{"authorTeam":"L.", "author":["L."]}}}, {"genus":{"string":"Dactylorhiza"}, "species":{"string":"majalis", "authorship":"(Rchb. f.) P.F. Hunt & Summerhayes", "combinationAuthorTeam":{"authorTeam":"P.F. Hunt & Summerhayes", "author":["P.F. Hunt", "Summerhayes"]}, "basionymAuthorTeam":{"authorTeam":"Rchb. f.", "author":["Rchb. f."]}}, "infraspecies":[{"string":"praetermissa", "rank":"ssp.", "authorship":"(Druce) D.M. Moore & Soó", "combinationAuthorTeam":{"authorTeam":"D.M. Moore & Soó", "author":["D.M. Moore", "Soó"]}, "basionymAuthorTeam":{"authorTeam":"Druce", "author":["Druce"]}}]}], "parser_run":1, "positions":{"0":["genus", 12], "13":["species", 19], "21":["author_word", 23], "25":["author_word", 32], "35":["genus", 47], "48":["species", 55], "57":["author_word", 62], "63":["author_word", 65], "67":["author_word", 71], "72":["author_word", 76], "79":["author_word", 90], "91":["infraspecific_type", 95], "96":["infraspecies", 108], "110":["author_word", 115], "117":["author_word", 121], "122":["author_word", 127], "130":["author_word", 133]}}}
222
249
  #TODO Asplenium rhizophyllum X A. ruta-muraria E.L. Braun 1939|''
223
250
  #TODO Asplenium rhizophyllum DC. x ruta-muraria E.L. Braun 1939|''
224
251
  #TODO Asplenium rhizophyllum x ruta-muraria|''
@@ -229,8 +256,7 @@ Agrostis stolonifera L. × Polypogon monspeliensis (L.) Desf.|{"scientificName":
229
256
  Polypodium x vulgare nothosubsp. mantoniae (Rothm.) Schidlay|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Polypodium x vulgare nothosubsp. mantoniae (Rothm.) Schidlay", "normalized":"Polypodium × vulgare nothosubsp. mantoniae (Rothm.) Schidlay", "canonical":"Polypodium vulgare mantoniae", "hybrid":true, "details":[{"genus":{"string":"Polypodium"}, "species":{"string":"vulgare"}, "infraspecies":[{"string":"mantoniae", "rank":"nothosubsp.", "authorship":"(Rothm.) Schidlay", "combinationAuthorTeam":{"authorTeam":"Schidlay", "author":["Schidlay"]}, "basionymAuthorTeam":{"authorTeam":"Rothm.", "author":["Rothm."]}}]}], "parser_run":1, "positions":{"0":["genus", 10], "14":["species", 21], "22":["infraspecific_type", 33], "34":["infraspecies", 43], "45":["author_word", 51], "53":["author_word", 61]}}}
230
257
 
231
258
  #empty spaces
232
- Asplenium Xinexpectatum ( E.L. Braun 1940 ) Morton(1956) |{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":1,"verbatim":" Asplenium Xinexpectatum ( E.L. Braun 1940 ) Morton(1956) ","normalized":"Asplenium \u00d7 inexpectatum (E.L. Braun 1940) Morton 1956","canonical":"Asplenium inexpectatum","hybrid":true,"details":[{"genus":{"string":"Asplenium"},"species":{"string":"inexpectatum","authorship":"( E.L. Braun 1940 ) Morton(1956)","combinationAuthorTeam":{"authorTeam":"Morton","author":["Morton"],"year":"1956"},"basionymAuthorTeam":{"authorTeam":"E.L. Braun","author":["E.L. Braun"],"year":"1940"}}}],"positions":{"3":["genus",12],"22":["species",34],"37":["author_word",41],"47":["author_word",52],"55":["year",59],"66":["author_word",72],"73":["year",77]}}}
233
-
259
+ Asplenium Xinexpectatum(E. L. Braun ex Friesner )Morton |{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":" Asplenium Xinexpectatum(E. L. Braun ex Friesner )Morton ", "normalized":"Asplenium × inexpectatum (E. L. Braun ex Friesner) Morton", "canonical":"Asplenium inexpectatum", "hybrid":true, "details":[{"genus":{"string":"Asplenium"}, "species":{"string":"inexpectatum", "authorship":"(E. L. Braun ex Friesner )Morton", "combinationAuthorTeam":{"authorTeam":"Morton", "author":["Morton"]}, "basionymAuthorTeam":{"authorTeam":"E. L. Braun", "author":["E. L. Braun"], "exAuthorTeam":{"authorTeam":"Friesner", "author":["Friesner"]}}}}], "parser_run":1, "positions":{"4":["genus", 13], "21":["species", 33], "34":["author_word", 36], "37":["author_word", 39], "40":["author_word", 45], "49":["author_word", 57], "64":["author_word", 70]}}}
234
260
 
235
261
  ####
236
262
  #
@@ -238,7 +264,7 @@ Polypodium x vulgare nothosubsp. mantoniae (Rothm.) Schidlay|{"scientificName":
238
264
  #
239
265
  ####
240
266
 
241
- #removing english notes
267
+ #removing annotations
242
268
  Acarospora cratericola cratericola Shenk 1974 group|{"scientificName":{"parsed":true, "verbatim":"Acarospora cratericola cratericola Shenk 1974 group", "normalized":"Acarospora cratericola cratericola Shenk 1974", "canonical":"Acarospora cratericola cratericola", "hybrid":false, "details":[{"genus":{"string":"Acarospora"}, "species":{"string":"cratericola"}, "infraspecies":[{"string":"cratericola", "rank":"n/a", "authorship":"Shenk 1974", "basionymAuthorTeam":{"authorTeam":"Shenk", "author":["Shenk"], "year":"1974"}}]}], "parser_version":"test_version", "parser_run":1, "positions":{"0":["genus", 10], "11":["species", 22], "23":["infraspecies", 34], "35":["author_word", 40], "41":["year", 45]}}}
243
269
  Acarospora cratericola cratericola Shenk 1974 species group|{"scientificName":{"parsed":true, "verbatim":"Acarospora cratericola cratericola Shenk 1974 species group", "normalized":"Acarospora cratericola cratericola Shenk 1974", "canonical":"Acarospora cratericola cratericola", "hybrid":false, "details":[{"genus":{"string":"Acarospora"}, "species":{"string":"cratericola"}, "infraspecies":[{"string":"cratericola", "rank":"n/a", "authorship":"Shenk 1974", "basionymAuthorTeam":{"authorTeam":"Shenk", "author":["Shenk"], "year":"1974"}}]}], "parser_version":"test_version", "parser_run":1, "positions":{"0":["genus", 10], "11":["species", 22], "23":["infraspecies", 34], "35":["author_word", 40], "41":["year", 45]}}}
244
270
  Acarospora cratericola cratericola Shenk 1974 species complex|{"scientificName":{"parsed":true, "verbatim":"Acarospora cratericola cratericola Shenk 1974 species complex", "normalized":"Acarospora cratericola cratericola Shenk 1974", "canonical":"Acarospora cratericola cratericola", "hybrid":false, "details":[{"genus":{"string":"Acarospora"}, "species":{"string":"cratericola"}, "infraspecies":[{"string":"cratericola", "rank":"n/a", "authorship":"Shenk 1974", "basionymAuthorTeam":{"authorTeam":"Shenk", "author":["Shenk"], "year":"1974"}}]}], "parser_version":"test_version", "parser_run":1, "positions":{"0":["genus", 10], "11":["species", 22], "23":["infraspecies", 34], "35":["author_word", 40], "41":["year", 45]}}}
@@ -268,7 +294,8 @@ Abarema clypearia (Jack) Kosterm., p.p.|{"scientificName":{"parsed":true, "verba
268
294
  Abarema clypearia (Jack) Kosterm., p. p.|{"scientificName":{"parsed":true, "verbatim":"Abarema clypearia (Jack) Kosterm., p. p.", "normalized":"Abarema clypearia (Jack) Kosterm.", "canonical":"Abarema clypearia", "hybrid":false, "details":[{"genus":{"string":"Abarema"}, "species":{"string":"clypearia", "authorship":"(Jack) Kosterm.", "combinationAuthorTeam":{"authorTeam":"Kosterm.", "author":["Kosterm."]}, "basionymAuthorTeam":{"authorTeam":"Jack", "author":["Jack"]}}}], "parser_version":"test_version", "parser_run":1, "positions":{"0":["genus", 7], "8":["species", 17], "19":["author_word", 23], "25":["author_word", 33]}}}
269
295
  Indigofera phyllogramme var. aphylla R.Vig., p.p.B|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Indigofera phyllogramme var. aphylla R.Vig., p.p.B", "normalized":"Indigofera phyllogramme var. aphylla R.Vig.", "canonical":"Indigofera phyllogramme aphylla", "hybrid":false, "details":[{"genus":{"string":"Indigofera"}, "species":{"string":"phyllogramme"}, "infraspecies":[{"string":"aphylla", "rank":"var.", "authorship":"R.Vig.", "basionymAuthorTeam":{"authorTeam":"R.Vig.", "author":["R.Vig."]}}]}], "parser_run":2, "positions":{"0":["genus", 10], "11":["species", 23], "24":["infraspecific_type", 28], "29":["infraspecies", 36], "37":["author_word", 43]}}}
270
296
 
271
- #removing nomenclatural concepts
297
+ #removing nomenclatural annotations
298
+ Amphiprora pseudoduplex (Osada & Kobayasi, 1990) comb. nov.|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Amphiprora pseudoduplex (Osada & Kobayasi, 1990) comb. nov.", "normalized":"Amphiprora pseudoduplex (Osada et Kobayasi 1990)", "canonical":"Amphiprora pseudoduplex", "hybrid":false, "details":[{"genus":{"string":"Amphiprora"}, "species":{"string":"pseudoduplex", "authorship":"(Osada & Kobayasi, 1990)", "basionymAuthorTeam":{"authorTeam":"Osada & Kobayasi", "author":["Osada", "Kobayasi"], "year":"1990"}}}], "parser_run":1, "positions":{"0":["genus", 10], "11":["species", 23], "25":["author_word", 30], "33":["author_word", 41], "43":["year", 47]}}}
272
299
  Arthopyrenia hyalospora (Nyl.) R.C. Harris comb. nov.|{"scientificName":{"parsed":true, "verbatim":"Arthopyrenia hyalospora (Nyl.) R.C. Harris comb. nov.", "normalized":"Arthopyrenia hyalospora (Nyl.) R.C. Harris", "canonical":"Arthopyrenia hyalospora", "hybrid":false, "details":[{"genus":{"string":"Arthopyrenia"}, "species":{"string":"hyalospora", "authorship":"(Nyl.) R.C. Harris", "combinationAuthorTeam":{"authorTeam":"R.C. Harris", "author":["R.C. Harris"]}, "basionymAuthorTeam":{"authorTeam":"Nyl.", "author":["Nyl."]}}}], "parser_version":"test_version", "parser_run":1, "positions":{"0":["genus", 12], "13":["species", 23], "25":["author_word", 29], "31":["author_word", 35], "36":["author_word", 42]}}}
273
300
  Acanthophis lancasteri WELLS & WELLINGTON (nomen nudum)|{"scientificName":{"parsed":true, "verbatim":"Acanthophis lancasteri WELLS & WELLINGTON (nomen nudum)", "normalized":"Acanthophis lancasteri WELLS et WELLINGTON", "canonical":"Acanthophis lancasteri", "hybrid":false, "details":[{"genus":{"string":"Acanthophis"}, "species":{"string":"lancasteri", "authorship":"WELLS & WELLINGTON", "basionymAuthorTeam":{"authorTeam":"WELLS & WELLINGTON", "author":["WELLS", "WELLINGTON"]}}}], "parser_version":"test_version", "parser_run":1, "positions":{"0":["genus", 11], "12":["species", 22], "23":["author_word", 28], "31":["author_word", 41]}}}
274
301
  Acontias lineatus WAGLER 1830: 196 (nomen nudum)|{"scientificName":{"parsed":true, "verbatim":"Acontias lineatus WAGLER 1830: 196 (nomen nudum)", "normalized":"Acontias lineatus WAGLER 1830", "canonical":"Acontias lineatus", "hybrid":false, "details":[{"genus":{"string":"Acontias"}, "species":{"string":"lineatus", "authorship":"WAGLER 1830: 196", "basionymAuthorTeam":{"authorTeam":"WAGLER", "author":["WAGLER"], "year":"1830"}}}], "parser_version":"test_version", "parser_run":2, "positions":{"0":["genus", 8], "9":["species", 17], "18":["author_word", 24], "25":["year", 29]}}}
@@ -308,8 +335,10 @@ Eichornia crassipes ( (Martius) ) Solms-Laub.|{"scientificName":{"parsed":true,
308
335
 
309
336
  #year without authorship
310
337
  Acarospora cratericola 1929|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":2,"verbatim":"Acarospora cratericola 1929","normalized":"Acarospora cratericola 1929","canonical":"Acarospora cratericola","hybrid":false,"details":[{"genus":{"string":"Acarospora"},"species":{"string":"cratericola","year":"1929"}}],"positions":{"0":["genus",10],"11":["species",22],"23":["year",27]}}}
338
+ Goggia gemmula 1996|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Goggia gemmula 1996", "normalized":"Goggia gemmula 1996", "canonical":"Goggia gemmula", "hybrid":false, "details":[{"genus":{"string":"Goggia"}, "species":{"string":"gemmula", "year":"1996"}}], "parser_run":2, "positions":{"0":["genus", 6], "7":["species", 14], "15":["year", 19]}}}
311
339
 
312
340
  #authorship with filius (son of)
341
+ Oxytropis minjanensis Rech. f.|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Oxytropis minjanensis Rech. f.", "normalized":"Oxytropis minjanensis Rech. f.", "canonical":"Oxytropis minjanensis", "hybrid":false, "details":[{"genus":{"string":"Oxytropis"}, "species":{"string":"minjanensis", "authorship":"Rech. f.", "basionymAuthorTeam":{"authorTeam":"Rech. f.", "author":["Rech. f."]}}}], "parser_run":1, "positions":{"0":["genus", 9], "10":["species", 21], "22":["author_word", 27], "28":["author_word", 30]}}}
313
342
  Platypus bicaudatulus Schedl f. 1935|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Platypus bicaudatulus Schedl f. 1935", "normalized":"Platypus bicaudatulus Schedl f. 1935", "canonical":"Platypus bicaudatulus", "hybrid":false, "details":[{"genus":{"string":"Platypus"}, "species":{"string":"bicaudatulus", "authorship":"Schedl f. 1935", "basionymAuthorTeam":{"authorTeam":"Schedl f.", "author":["Schedl f."], "year":"1935"}}}], "parser_run":1, "positions":{"0":["genus", 8], "9":["species", 21], "22":["author_word", 28], "29":["author_word", 31], "32":["year", 36]}}}
314
343
  Platypus bicaudatulus Schedl filius 1935|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Platypus bicaudatulus Schedl filius 1935", "normalized":"Platypus bicaudatulus Schedl filius 1935", "canonical":"Platypus bicaudatulus", "hybrid":false, "details":[{"genus":{"string":"Platypus"}, "species":{"string":"bicaudatulus", "authorship":"Schedl filius 1935", "basionymAuthorTeam":{"authorTeam":"Schedl filius", "author":["Schedl filius"], "year":"1935"}}}], "parser_run":1, "positions":{"0":["genus", 8], "9":["species", 21], "22":["author_word", 28], "29":["author_word", 35], "36":["year", 40]}}}
315
344
  Fimbristylis ovata (Burm. f.) J. Kern|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Fimbristylis ovata (Burm. f.) J. Kern", "normalized":"Fimbristylis ovata (Burm. f.) J. Kern", "canonical":"Fimbristylis ovata", "hybrid":false, "details":[{"genus":{"string":"Fimbristylis"}, "species":{"string":"ovata", "authorship":"(Burm. f.) J. Kern", "combinationAuthorTeam":{"authorTeam":"J. Kern", "author":["J. Kern"]}, "basionymAuthorTeam":{"authorTeam":"Burm. f.", "author":["Burm. f."]}}}], "parser_run":1, "positions":{"0":["genus", 12], "13":["species", 18], "20":["author_word", 25], "26":["author_word", 28], "30":["author_word", 32], "33":["author_word", 37]}}}
@@ -327,6 +356,7 @@ Polypodium pectinatum L. f.|{"scientificName":{"parsed":true, "parser_version":"
327
356
  Polypodium pectinatum (L. f.) typica Rosent|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Polypodium pectinatum (L. f.) typica Rosent", "normalized":"Polypodium pectinatum (L. f.) typica Rosent", "canonical":"Polypodium pectinatum typica", "hybrid":false, "details":[{"genus":{"string":"Polypodium"}, "species":{"string":"pectinatum", "authorship":"(L. f.)", "basionymAuthorTeam":{"authorTeam":"L. f.", "author":["L. f."]}}, "infraspecies":[{"string":"typica", "rank":"n/a", "authorship":"Rosent", "basionymAuthorTeam":{"authorTeam":"Rosent", "author":["Rosent"]}}]}], "parser_run":1, "positions":{"0":["genus", 10], "11":["species", 21], "23":["author_word", 25], "26":["author_word", 28], "30":["infraspecies", 36], "37":["author_word", 43]}}}
328
357
 
329
358
  #year range
359
+ Eurodryas orientalis Herrich-Schäffer 1845-1847|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Eurodryas orientalis Herrich-Schäffer 1845-1847", "normalized":"Eurodryas orientalis Herrich-Schäffer 1845-1847", "canonical":"Eurodryas orientalis", "hybrid":false, "details":[{"genus":{"string":"Eurodryas"}, "species":{"string":"orientalis", "authorship":"Herrich-Schäffer 1845-1847", "basionymAuthorTeam":{"authorTeam":"Herrich-Schäffer", "author":["Herrich-Schäffer"], "year":"1845-1847"}}}], "parser_run":2, "positions":{"0":["genus", 9], "10":["species", 20], "21":["author_word", 37], "38":["year", 47]}}}
330
360
  Tridentella tangeroae Bruce, 1987-92|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":2,"verbatim":"Tridentella tangeroae Bruce, 1987-92","normalized":"Tridentella tangeroae Bruce 1987-92","canonical":"Tridentella tangeroae","hybrid":false,"details":[{"genus":{"string":"Tridentella"},"species":{"string":"tangeroae","authorship":"Bruce, 1987-92","basionymAuthorTeam":{"authorTeam":"Bruce","author":["Bruce"],"year":"1987-92"}}}],"positions":{"0":["genus",11],"12":["species",21],"22":["author_word",27],"29":["year",36]}}}
331
361
 
332
362
  #year in square brackets
@@ -344,8 +374,10 @@ Morea (Morea) Burt 2342343242 23424322342 23424234|{"scientificName":{"parsed":t
344
374
  Nautilus asterizans von|{"scientificName":{"parsed":true, "verbatim":"Nautilus asterizans von", "normalized":"Nautilus asterizans", "canonical":"Nautilus asterizans", "hybrid":false, "details":[{"genus":{"string":"Nautilus"}, "species":{"string":"asterizans"}}], "parser_version":"test_version", "parser_run":1, "positions":{"0":["genus", 8], "9":["species", 19]}}}
345
375
 
346
376
  #salvage canonical
347
- Morea ssjjlajajaj324$33 234243242|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":3,"verbatim":"Morea ssjjlajajaj324$33 234243242","normalized":"Morea","canonical":"Morea","hybrid":false,"details":[{"uninomial":{"string":"Morea"}}],"positions":{"0":["uninomial",5]}}}
377
+ Morea ssjjlajajaj324$33 234243242|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Morea ssjjlajajaj324$33 234243242", "normalized":"Morea", "canonical":"Morea", "hybrid":false, "details":[{"uninomial":{"string":"Morea"}}], "parser_run":2, "positions":{"0":["uninomial", 5]}}}
348
378
  Morea (Morea) burtius 2342343242 23424322342 23424234|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":2,"verbatim":"Morea (Morea) burtius 2342343242 23424322342 23424234","normalized":"Morea (Morea) burtius","canonical":"Morea burtius","hybrid":false,"details":[{"genus":{"string":"Morea"},"infragenus":{"string":"Morea"},"species":{"string":"burtius"}}],"positions":{"0":["genus",5],"7":["infragenus",12],"14":["species",21]}}}
349
379
  Verpericola megasoma ""Dall" Pils.|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":2,"verbatim":"Verpericola megasoma \"\"Dall\" Pils.","normalized":"Verpericola megasoma","canonical":"Verpericola megasoma","hybrid":false,"details":[{"genus":{"string":"Verpericola"},"species":{"string":"megasoma"}}],"positions":{"0":["genus",11],"12":["species",20]}}}
380
+ Verpericola megasoma "Dall" Pils.|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Verpericola megasoma \"Dall\" Pils.", "normalized":"Verpericola megasoma", "canonical":"Verpericola megasoma", "hybrid":false, "details":[{"genus":{"string":"Verpericola"}, "species":{"string":"megasoma"}}], "parser_run":2, "positions":{"0":["genus", 11], "12":["species", 20]}}}
350
381
  Moraea spathulata ( (L. f. Klatt|{"scientificName":{"parsed":true, "parser_version":"test_version", "parser_run":2,"verbatim":"Moraea spathulata ( (L. f. Klatt","normalized":"Moraea spathulata","canonical":"Moraea spathulata","hybrid":false,"details":[{"genus":{"string":"Moraea"},"species":{"string":"spathulata"}}],"positions":{"0":["genus",6],"7":["species",17]}}}
351
- Cotoneaster (Pyracantha) rogersiana var.aurantiaca|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Cotoneaster (Pyracantha) rogersiana var.aurantiaca", "normalized":"Cotoneaster (Pyracantha) rogersiana", "canonical":"Cotoneaster rogersiana", "hybrid":false, "details":[{"genus":{"string":"Cotoneaster"}, "infragenus":{"string":"Pyracantha"}, "species":{"string":"rogersiana"}}], "parser_run":3, "positions":{"0":["genus", 11], "13":["infragenus", 23], "25":["species", 35]}}}
382
+ Stewartia micrantha (Chun) Sealy, Bot. Mag. 176: t. 510. 1967.|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Stewartia micrantha (Chun) Sealy, Bot. Mag. 176: t. 510. 1967.", "normalized":"Stewartia micrantha (Chun) Sealy, Bot. Mag.", "canonical":"Stewartia micrantha", "hybrid":false, "details":[{"genus":{"string":"Stewartia"}, "species":{"string":"micrantha", "authorship":"(Chun) Sealy, Bot. Mag.", "combinationAuthorTeam":{"authorTeam":"Sealy, Bot. Mag.", "author":["Sealy", "Bot. Mag."]}, "basionymAuthorTeam":{"authorTeam":"Chun", "author":["Chun"]}}}], "parser_run":2, "positions":{"0":["genus", 9], "10":["species", 19], "21":["author_word", 25], "27":["author_word", 32], "34":["author_word", 38], "39":["author_word", 43]}}}
383
+ Pyrobaculum neutrophilum V24Sta|{"scientificName":{"parsed":true, "parser_version":"test_version", "verbatim":"Pyrobaculum neutrophilum V24Sta", "normalized":"Pyrobaculum neutrophilum", "canonical":"Pyrobaculum neutrophilum", "hybrid":false, "details":[{"genus":{"string":"Pyrobaculum"}, "species":{"string":"neutrophilum"}}], "parser_run":2, "positions":{"0":["genus", 11], "12":["species", 24]}}}
data/spec/parser/todo.txt CHANGED
@@ -26,3 +26,5 @@ Polypodium lineare C.Chr. f. caudatoattenuatum Takeda Polypodium
26
26
 
27
27
  Rosa gallica × tomentosa var. eglandulosa R.Keller Rosa gallica
28
28
  Rosa gallica × afzeliana subsp. vosagiaca forma subcomplicata R.Keller Rosa gallica
29
+
30
+ Salmonella sp. (ser.) brancaster Macdonald, Sivell, Emms and Taylor 1948
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: biodiversity19
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.22
4
+ version: 1.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-28 00:00:00.000000000 Z
12
+ date: 2012-10-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: treetop
@@ -162,7 +162,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
162
162
  version: '0'
163
163
  segments:
164
164
  - 0
165
- hash: -340971722675722779
165
+ hash: 1697761162885604721
166
166
  required_rubygems_version: !ruby/object:Gem::Requirement
167
167
  none: false
168
168
  requirements: