biodiversity19 1.0.22 → 1.1.0

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