diff --git a/CHANGELOG.md b/CHANGELOG.md index acb919d..f61ab38 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +## [v1.9.0] - 2023-10-12 Thu + +- Add: restore backward compatibility by creating a new flag + `--species-group-cut`. ## [v1.8.0] - 2023-10-11 Wed diff --git a/README.md b/README.md index 001046b..317724f 100644 --- a/README.md +++ b/README.md @@ -158,13 +158,7 @@ of names. Three versions of canonical forms are included: | - | *Spiraea alba var. alba* Du Roi | Best for disambiguation, but has many lexical variants | | Full | *Spiraea alba var. alba* | Presentation, infraspecies disambiguation | | Simple | *Spiraea alba alba* | Name matching, presentation | -| Stem | *Spiraea alb* | Best for matching fem./masc. inconsistencies | - -Note than stemmed version loses infraspecific epithet in cases where -it is the same as specific epithet. If they are not identical, both will be -present (e.g. `Bus alba albus` will produce stemmed canonical as -`Bus alb alb`, because `alba` and `albus` are not identical. This helps to -match nominotypical infraspecies (ICN)/species groups (ICZN). +| Stem | *Spiraea alb alb* | Best for matching fem./masc. inconsistencies | The ``canonicalName -> full`` is good for presentation, as it keeps more details. @@ -406,15 +400,17 @@ performance. ``--port -p`` : set a port to run web-interface and [RESTful API][OpenAPI]. -`` --web-logs`` -: requires `--port`. Enables output of logs for web-services. - `` --nsqd-tcp`` : requires `--port`. Allows to redirect web-service log output to [NSQ] messaging server's TCP-based endpoint. It is handy for aggregations of logs from GNparser web-services running inside of Docker containers or in Kubernetes pods. +``--species-group-cut`` +: Changes stemmed canonical for autonym or species group names (e.g. `Aus bus bus`). It cuts infraspecific epithet, leaving only genus and specific +epithet. All other data stays the same. This feature might be useful to +match names like `Aus bus` and `Aus bus bus`. + ``--stream -s`` : ``GNparser`` can be used from any language using pipe-in/pipe-out of the command line application. This approach requires sending 1 name at a time @@ -427,6 +423,9 @@ achieve that. ``--version -V`` : shows the version number of ``GNparser``. +`` --web-logs`` +: requires `--port`. Enables output of logs for web-services. + To parse one name: ```bash diff --git a/config.go b/config.go index c183b16..e9b3835 100644 --- a/config.go +++ b/config.go @@ -74,6 +74,11 @@ type Config struct { // WithWebLogs flag enables logs when running web-service. This flag is // ignored if `Port` value is not set. WithWebLogs bool + + // WithSpeciesGroupCut flag means that stemmed version of autonyms (ICN) and + // species group names (ICZN) will be truncated to species. It helps to + // simplify matching names like `Aus bus` and `Aus bus bus`. + WithSpeciesGroupCut bool } // Option is a type that has to be returned by all Option functions. Such @@ -199,6 +204,13 @@ func OptWithWebLogs(b bool) Option { } } +// OptWithSpeciesGroupCut sets WithSpeciesGroupCut field. +func OptWithSpeciesGroupCut(b bool) Option { + return func(cfg *Config) { + cfg.WithSpeciesGroupCut = b + } +} + // NewConfig generates a new Config object. It can take an arbitrary number // of `Option` functions to modify default configuration settings. func NewConfig(opts ...Option) Config { diff --git a/ent/parser/ast.go b/ent/parser/ast.go index c5c4945..727e390 100644 --- a/ent/parser/ast.go +++ b/ent/parser/ast.go @@ -29,6 +29,7 @@ type scientificNameNode struct { ambiguousEpithet string ambiguousModif string warnings map[parsed.Warning]struct{} + withSpGroup bool } func (p *Engine) newScientificNameNode() { diff --git a/ent/parser/interfaces.go b/ent/parser/interfaces.go index b526fd1..27aefe8 100644 --- a/ent/parser/interfaces.go +++ b/ent/parser/interfaces.go @@ -20,7 +20,7 @@ type Parser interface { // It contains a method to convert AST into final output. type ScientificNameNode interface { // ToOutput converts AST into final output object. - ToOutput(withDetails bool) parsed.Parsed + ToOutput(withDetails, withSpGr bool) parsed.Parsed } // nameData is the interface for converting AST to output elements. diff --git a/ent/parser/name.go b/ent/parser/name.go index b4bfea1..aede19c 100644 --- a/ent/parser/name.go +++ b/ent/parser/name.go @@ -2,6 +2,7 @@ package parser import ( "fmt" + "strings" "github.com/gnames/gnparser/ent/parsed" "github.com/gnames/gnparser/ent/stemmer" @@ -38,17 +39,36 @@ func (sn *scientificNameNode) Normalized() string { // Canonical returns canonical forms of scientific name. There are // three forms: Stemmed, the most normalized, Simple, and Full (the least // normalized). -func (sn *scientificNameNode) Canonical() *parsed.Canonical { +func (sn *scientificNameNode) Canonical(withSpGr bool) *parsed.Canonical { var res *parsed.Canonical if sn.nameData == nil { return res } c := sn.canonical() - return &parsed.Canonical{ - Stemmed: stemmer.StemCanonical(c.Value, sn.cardinality), + res = &parsed.Canonical{ + Stemmed: stemmer.StemCanonical(c.Value), Simple: c.Value, Full: c.ValueRanked, } + if withSpGr && sn.cardinality == 3 { + res.Stemmed = spGrStemmed(res.Stemmed, res.Simple) + } + return res +} + +func spGrStemmed(stem, simple string) string { + + eStem := strings.Split(stem, " ") + if len(eStem) != 3 || eStem[1] != eStem[2] { + return stem + } + + sStem := strings.Split(simple, " ") + if len(sStem) != 3 || sStem[1] != sStem[2] { + return stem + } + + return eStem[0] + " " + eStem[1] } // Details returns additional details of about a scientific names. diff --git a/ent/parser/output.go b/ent/parser/output.go index 5f74f2d..80c9391 100644 --- a/ent/parser/output.go +++ b/ent/parser/output.go @@ -10,10 +10,11 @@ import ( // ToOutput converts Abstract Syntax Tree of scientific name to a // final output object. -func (sn *scientificNameNode) ToOutput(withDetails bool) parsed.Parsed { +func (sn *scientificNameNode) ToOutput( + withDetails, withSpGr bool) parsed.Parsed { res := parsed.Parsed{ Verbatim: sn.verbatim, - Canonical: sn.Canonical(), + Canonical: sn.Canonical(withSpGr), Virus: sn.virus, DaggerChar: sn.daggerChar, VerbatimID: sn.verbatimID, diff --git a/ent/parser/parser_test.go b/ent/parser/parser_test.go index c441377..ab1c84e 100644 --- a/ent/parser/parser_test.go +++ b/ent/parser/parser_test.go @@ -1,6 +1,7 @@ package parser_test import ( + "fmt" "testing" "github.com/gnames/gnparser/ent/parser" @@ -18,7 +19,7 @@ func TestPreNParse(t *testing.T) { } for _, v := range testData { sn := p.PreprocessAndParse(v.name, "test_version", true, false, false, false) - parsed := sn.ToOutput(false) + parsed := sn.ToOutput(false, false) can := parsed.Canonical msg := v.name if v.can == "" { @@ -29,7 +30,7 @@ func TestPreNParse(t *testing.T) { } } -// TTestToOutput tests ToOutput method of ScientificNameNode +// TestToOutput tests ToOutput method of ScientificNameNode func TestToOutput(t *testing.T) { p := parser.New() testData := []struct { @@ -39,21 +40,24 @@ func TestToOutput(t *testing.T) { {"Pardosa moesta L.", "Pardosa moesta", "L.", false, true}, { "Bacillus subtilis (Ehrenberg, 1835) Cohn, 1872", - "Bacillus subtilis", "(Ehrenberg 1835) Cohn 1872", false, true, + "Bacillus subtilis", "(Ehrenberg 1835) Cohn 1872", + false, true, }, { "Bacillus subtilis (Ehrenberg, 1835) Cohn, 1872 sec. Miller", - "Bacillus subtilis", "(Ehrenberg 1835) Cohn 1872", false, true, + "Bacillus subtilis", "(Ehrenberg 1835) Cohn 1872", + false, true, }, { "Aconitum napellus var. formosum (Rchb.) W. D. J. Koch (nom. ambig.)", - "Aconitum napellus formosum", "(Rchb.) W. D. J. Koch", true, true, + "Aconitum napellus formosum", "(Rchb.) W. D. J. Koch", + true, true, }, {"something", "", "", false, false}, } for _, v := range testData { sn := p.PreprocessAndParse(v.name, "test_version", true, false, false, false) - out := sn.ToOutput(v.det) + out := sn.ToOutput(v.det, false) msg := v.name if !out.Parsed { assert.Nil(t, out.Canonical, msg) @@ -63,3 +67,40 @@ func TestToOutput(t *testing.T) { assert.Equal(t, v.au, out.Authorship.Normalized, msg) } } + +// TestSpecGroupOption checks if stem is cut when WithSpeciesGroupCut is true. +func TestSpecGroupOption(t *testing.T) { + assert := assert.New(t) + + p := parser.New() + testData := []struct { + name, stemmed string + spGrp bool + }{ + {"Aus alba alba", "Aus alb alb", false}, + {"Aus alba alba", "Aus alb", true}, + {"Aus alba albus", "Aus alb alb", true}, + { + "Bacillus subtilis subtilis (Ehrenberg, 1835) Cohn, 1872", + "Bacillus subtil subtil", false, + }, + { + "Bacillus subtilis subtilis (Ehrenberg, 1835) Cohn, 1872", + "Bacillus subtil", true, + }, + { + "Bacillus subtila subtilis (Ehrenberg, 1835) Cohn, 1872", + "Bacillus subtil subtil", true, + }, + } + for _, v := range testData { + sn := p.PreprocessAndParse( + v.name, "test_version", + true, false, false, false, + ) + out := sn.ToOutput(false, v.spGrp) + msg := v.name + fmt.Println(out.Canonical.Simple) + assert.Equal(v.stemmed, out.Canonical.Stemmed, msg) + } +} diff --git a/ent/stemmer/stemmer.go b/ent/stemmer/stemmer.go index 5ae5187..d656ab4 100644 --- a/ent/stemmer/stemmer.go +++ b/ent/stemmer/stemmer.go @@ -130,10 +130,7 @@ type StemmedWord struct { // 3. All characters in the string are ASCII with exception of the // hybrid sign. // 4. The string always starts with a capitalized word. -func StemCanonical(c string, card int) string { - if card == 3 { - c = normalizeSpGroup(c, card) - } +func StemCanonical(c string) string { graftChimeraFormulaParts := strings.Split(c, " + ") for gci, gcv := range graftChimeraFormulaParts { hybridFormulaParts := strings.Split(gcv, " × ") @@ -162,19 +159,6 @@ func StemCanonical(c string, card int) string { return str.TransliterateDiaereses(strings.Join(graftChimeraFormulaParts, " + ")) } -func normalizeSpGroup(c string, card int) string { - if card != 3 { - return c - } - - es := strings.Split(c, " ") - if len(es) != 3 || es[1] != es[2] { - return c - } - - return es[0] + " " + es[1] -} - // Stem takes a word and, assuming the word is noun, removes its latin suffix // if such suffix is detected. func Stem(wrd string) StemmedWord { diff --git a/ent/stemmer/stemmer_test.go b/ent/stemmer/stemmer_test.go index d9002c0..bea8a91 100644 --- a/ent/stemmer/stemmer_test.go +++ b/ent/stemmer/stemmer_test.go @@ -26,23 +26,22 @@ func TestStemmer(t *testing.T) { t.Run("StemCanonical", func(t *testing.T) { data := []struct { - msg string - in string - out string - card int + msg string + in string + out string }{ - {"Uninomial", "Pomatomus", "Pomatomus", 1}, - {"Binomial1", "Betula naturae", "Betula natur", 2}, - {"Binomial2", "Betula alba", "Betula alb", 2}, - {"Binomial3", "Leptochloöpsis virgata", "Leptochloopsis uirgat", 2}, - {"Trinomial", "Betula alba naturae", "Betula alb natur", 3}, - {"SpGroup", "Betula alba alba", "Betula alb", 3}, - {"SpGroup", "Betula alba albus", "Betula alb alb", 3}, - {"GraftChimeraFormula", "Crataegus + Mespilus", "Crataegus + Mespilus", 0}, - {"GraftChimeraFormula2", "Cytisus purpureus + Laburnum anagyroides", "Cytisus purpure + Laburnum anagyroid", 0}, + {"Uninomial", "Pomatomus", "Pomatomus"}, + {"Binomial1", "Betula naturae", "Betula natur"}, + {"Binomial2", "Betula alba", "Betula alb"}, + {"Binomial3", "Leptochloöpsis virgata", "Leptochloopsis uirgat"}, + {"Trinomial", "Betula alba naturae", "Betula alb natur"}, + {"SpGroup", "Betula alba alba", "Betula alb alb"}, + {"SpGroup", "Betula alba albus", "Betula alb alb"}, + {"GraftChimeraFormula", "Crataegus + Mespilus", "Crataegus + Mespilus"}, + {"GraftChimeraFormula2", "Cytisus purpureus + Laburnum anagyroides", "Cytisus purpure + Laburnum anagyroid"}, } for _, v := range data { - assert.Equal(t, v.out, stemmer.StemCanonical(v.in, v.card), v.msg) + assert.Equal(t, v.out, stemmer.StemCanonical(v.in), v.msg) } }) } diff --git a/gnparser.go b/gnparser.go index db36e37..f50f9da 100644 --- a/gnparser.go +++ b/gnparser.go @@ -50,7 +50,10 @@ func (gnp gnparser) ParseName(s string) parsed.Parsed { sciNameNode := gnp.parser.PreprocessAndParse( s, ver, gnp.cfg.IgnoreHTMLTags, gnp.cfg.WithCapitalization, gnp.cfg.WithCultivars, gnp.cfg.WithPreserveDiaereses, ) - res := sciNameNode.ToOutput(gnp.cfg.WithDetails) + res := sciNameNode.ToOutput( + gnp.cfg.WithDetails, + gnp.cfg.WithSpeciesGroupCut, + ) return res } diff --git a/gnparser/cmd/flags.go b/gnparser/cmd/flags.go index 2d160c7..0ca1600 100644 --- a/gnparser/cmd/flags.go +++ b/gnparser/cmd/flags.go @@ -142,6 +142,18 @@ func withPreserveDiaeresesFlag(cmd *cobra.Command) { } } +func spGrCutFlag(cmd *cobra.Command) { + b, err := cmd.Flags().GetBool("species-group-cut") + if err != nil { + fmt.Println(err) + os.Exit(1) + } + if b { + opts = append(opts, gnparser.OptWithSpeciesGroupCut(true)) + } + +} + func withStreamFlag(cmd *cobra.Command) { withDet, err := cmd.Flags().GetBool("stream") if err != nil { diff --git a/gnparser/cmd/root.go b/gnparser/cmd/root.go index c652008..88e1bb7 100644 --- a/gnparser/cmd/root.go +++ b/gnparser/cmd/root.go @@ -80,6 +80,7 @@ gnparser -j 5 -p 8080 withEnableCultivarsFlag(cmd) withPreserveDiaeresesFlag(cmd) batchSizeFlag(cmd) + spGrCutFlag(cmd) port := portFlag(cmd) cfg := gnparser.NewConfig(opts...) batchSize = cfg.BatchSize @@ -171,6 +172,8 @@ func init() { rootCmd.Flags().BoolP("web-logs", "", false, "enable logs for the web service") + rootCmd.Flags().BoolP("species-group-cut", "", false, "cut autonym/species group names to species for stemmed version") + rootCmd.Flags().StringP("nsqd-tcp", "", "", "an addresss pointing to NSQ TCP service for logs redirection (e.g. 127.0.0.1:4150)") } diff --git a/testdata/test_data.md b/testdata/test_data.md index a918984..28c9236 100644 --- a/testdata/test_data.md +++ b/testdata/test_data.md @@ -1603,7 +1603,7 @@ Canonical: Yarrowia lipolytica var. lipolytica Authorship: (Wick., Kurtzman & E. A. Herrm.) Van der Walt & Arx 1981 ```json -{"parsed":true,"quality":1,"verbatim":"Yarrowia lipolytica var. lipolytica (Wick., Kurtzman \u0026 E.A. Herrm.) Van der Walt \u0026 Arx 1981","normalized":"Yarrowia lipolytica var. lipolytica (Wick., Kurtzman \u0026 E. A. Herrm.) Van der Walt \u0026 Arx 1981","canonical":{"stemmed":"Yarrowia lipolytic","simple":"Yarrowia lipolytica lipolytica","full":"Yarrowia lipolytica var. lipolytica"},"cardinality":3,"authorship":{"verbatim":"(Wick., Kurtzman \u0026 E.A. Herrm.) Van der Walt \u0026 Arx 1981","normalized":"(Wick., Kurtzman \u0026 E. A. Herrm.) Van der Walt \u0026 Arx 1981","authors":["Wick.","Kurtzman","E. A. Herrm.","Van der Walt","Arx"],"originalAuth":{"authors":["Wick.","Kurtzman","E. A. Herrm."]},"combinationAuth":{"authors":["Van der Walt","Arx"],"year":{"year":"1981"}}},"details":{"infraspecies":{"genus":"Yarrowia","species":"lipolytica","infraspecies":[{"value":"lipolytica","rank":"var.","authorship":{"verbatim":"(Wick., Kurtzman \u0026 E.A. Herrm.) Van der Walt \u0026 Arx 1981","normalized":"(Wick., Kurtzman \u0026 E. A. Herrm.) Van der Walt \u0026 Arx 1981","authors":["Wick.","Kurtzman","E. A. Herrm.","Van der Walt","Arx"],"originalAuth":{"authors":["Wick.","Kurtzman","E. A. Herrm."]},"combinationAuth":{"authors":["Van der Walt","Arx"],"year":{"year":"1981"}}}}]}},"words":[{"verbatim":"Yarrowia","normalized":"Yarrowia","wordType":"GENUS","start":0,"end":8},{"verbatim":"lipolytica","normalized":"lipolytica","wordType":"SPECIES","start":9,"end":19},{"verbatim":"var.","normalized":"var.","wordType":"RANK","start":20,"end":24},{"verbatim":"lipolytica","normalized":"lipolytica","wordType":"INFRASPECIES","start":25,"end":35},{"verbatim":"Wick.","normalized":"Wick.","wordType":"AUTHOR_WORD","start":37,"end":42},{"verbatim":"Kurtzman","normalized":"Kurtzman","wordType":"AUTHOR_WORD","start":44,"end":52},{"verbatim":"E.","normalized":"E.","wordType":"AUTHOR_WORD","start":55,"end":57},{"verbatim":"A.","normalized":"A.","wordType":"AUTHOR_WORD","start":57,"end":59},{"verbatim":"Herrm.","normalized":"Herrm.","wordType":"AUTHOR_WORD","start":60,"end":66},{"verbatim":"Van","normalized":"Van","wordType":"AUTHOR_WORD","start":68,"end":71},{"verbatim":"der","normalized":"der","wordType":"AUTHOR_WORD","start":72,"end":75},{"verbatim":"Walt","normalized":"Walt","wordType":"AUTHOR_WORD","start":76,"end":80},{"verbatim":"Arx","normalized":"Arx","wordType":"AUTHOR_WORD","start":83,"end":86},{"verbatim":"1981","normalized":"1981","wordType":"YEAR","start":87,"end":91}],"id":"e649d828-0ae9-5b5b-b079-1485c9bbf872","parserVersion":"test_version"} +{"parsed":true,"quality":1,"verbatim":"Yarrowia lipolytica var. lipolytica (Wick., Kurtzman \u0026 E.A. Herrm.) Van der Walt \u0026 Arx 1981","normalized":"Yarrowia lipolytica var. lipolytica (Wick., Kurtzman \u0026 E. A. Herrm.) Van der Walt \u0026 Arx 1981","canonical":{"stemmed":"Yarrowia lipolytic lipolytic","simple":"Yarrowia lipolytica lipolytica","full":"Yarrowia lipolytica var. lipolytica"},"cardinality":3,"authorship":{"verbatim":"(Wick., Kurtzman \u0026 E.A. Herrm.) Van der Walt \u0026 Arx 1981","normalized":"(Wick., Kurtzman \u0026 E. A. Herrm.) Van der Walt \u0026 Arx 1981","authors":["Wick.","Kurtzman","E. A. Herrm.","Van der Walt","Arx"],"originalAuth":{"authors":["Wick.","Kurtzman","E. A. Herrm."]},"combinationAuth":{"authors":["Van der Walt","Arx"],"year":{"year":"1981"}}},"details":{"infraspecies":{"genus":"Yarrowia","species":"lipolytica","infraspecies":[{"value":"lipolytica","rank":"var.","authorship":{"verbatim":"(Wick., Kurtzman \u0026 E.A. Herrm.) Van der Walt \u0026 Arx 1981","normalized":"(Wick., Kurtzman \u0026 E. A. Herrm.) Van der Walt \u0026 Arx 1981","authors":["Wick.","Kurtzman","E. A. Herrm.","Van der Walt","Arx"],"originalAuth":{"authors":["Wick.","Kurtzman","E. A. Herrm."]},"combinationAuth":{"authors":["Van der Walt","Arx"],"year":{"year":"1981"}}}}]}},"words":[{"verbatim":"Yarrowia","normalized":"Yarrowia","wordType":"GENUS","start":0,"end":8},{"verbatim":"lipolytica","normalized":"lipolytica","wordType":"SPECIES","start":9,"end":19},{"verbatim":"var.","normalized":"var.","wordType":"RANK","start":20,"end":24},{"verbatim":"lipolytica","normalized":"lipolytica","wordType":"INFRASPECIES","start":25,"end":35},{"verbatim":"Wick.","normalized":"Wick.","wordType":"AUTHOR_WORD","start":37,"end":42},{"verbatim":"Kurtzman","normalized":"Kurtzman","wordType":"AUTHOR_WORD","start":44,"end":52},{"verbatim":"E.","normalized":"E.","wordType":"AUTHOR_WORD","start":55,"end":57},{"verbatim":"A.","normalized":"A.","wordType":"AUTHOR_WORD","start":57,"end":59},{"verbatim":"Herrm.","normalized":"Herrm.","wordType":"AUTHOR_WORD","start":60,"end":66},{"verbatim":"Van","normalized":"Van","wordType":"AUTHOR_WORD","start":68,"end":71},{"verbatim":"der","normalized":"der","wordType":"AUTHOR_WORD","start":72,"end":75},{"verbatim":"Walt","normalized":"Walt","wordType":"AUTHOR_WORD","start":76,"end":80},{"verbatim":"Arx","normalized":"Arx","wordType":"AUTHOR_WORD","start":83,"end":86},{"verbatim":"1981","normalized":"1981","wordType":"YEAR","start":87,"end":91}],"id":"e649d828-0ae9-5b5b-b079-1485c9bbf872","parserVersion":"test_version"} ``` Name: Pseudocercospora dendrobii(H.C. Burnett)U. Braun & Crous 2003 @@ -1663,7 +1663,7 @@ Canonical: Armeria carpetana subsp. carpetana Authorship: H. del Villar ```json -{"parsed":true,"quality":1,"verbatim":"Armeria carpetana ssp. carpetana H. del Villar","normalized":"Armeria carpetana subsp. carpetana H. del Villar","canonical":{"stemmed":"Armeria carpetan","simple":"Armeria carpetana carpetana","full":"Armeria carpetana subsp. carpetana"},"cardinality":3,"authorship":{"verbatim":"H. del Villar","normalized":"H. del Villar","authors":["H. del Villar"],"originalAuth":{"authors":["H. del Villar"]}},"details":{"infraspecies":{"genus":"Armeria","species":"carpetana","infraspecies":[{"value":"carpetana","rank":"subsp.","authorship":{"verbatim":"H. del Villar","normalized":"H. del Villar","authors":["H. del Villar"],"originalAuth":{"authors":["H. del Villar"]}}}]}},"words":[{"verbatim":"Armeria","normalized":"Armeria","wordType":"GENUS","start":0,"end":7},{"verbatim":"carpetana","normalized":"carpetana","wordType":"SPECIES","start":8,"end":17},{"verbatim":"ssp.","normalized":"subsp.","wordType":"RANK","start":18,"end":22},{"verbatim":"carpetana","normalized":"carpetana","wordType":"INFRASPECIES","start":23,"end":32},{"verbatim":"H.","normalized":"H.","wordType":"AUTHOR_WORD","start":33,"end":35},{"verbatim":"del","normalized":"del","wordType":"AUTHOR_WORD","start":36,"end":39},{"verbatim":"Villar","normalized":"Villar","wordType":"AUTHOR_WORD","start":40,"end":46}],"id":"4b16116e-549d-56bf-959a-ff11edb25021","parserVersion":"test_version"} +{"parsed":true,"quality":1,"verbatim":"Armeria carpetana ssp. carpetana H. del Villar","normalized":"Armeria carpetana subsp. carpetana H. del Villar","canonical":{"stemmed":"Armeria carpetan carpetan","simple":"Armeria carpetana carpetana","full":"Armeria carpetana subsp. carpetana"},"cardinality":3,"authorship":{"verbatim":"H. del Villar","normalized":"H. del Villar","authors":["H. del Villar"],"originalAuth":{"authors":["H. del Villar"]}},"details":{"infraspecies":{"genus":"Armeria","species":"carpetana","infraspecies":[{"value":"carpetana","rank":"subsp.","authorship":{"verbatim":"H. del Villar","normalized":"H. del Villar","authors":["H. del Villar"],"originalAuth":{"authors":["H. del Villar"]}}}]}},"words":[{"verbatim":"Armeria","normalized":"Armeria","wordType":"GENUS","start":0,"end":7},{"verbatim":"carpetana","normalized":"carpetana","wordType":"SPECIES","start":8,"end":17},{"verbatim":"ssp.","normalized":"subsp.","wordType":"RANK","start":18,"end":22},{"verbatim":"carpetana","normalized":"carpetana","wordType":"INFRASPECIES","start":23,"end":32},{"verbatim":"H.","normalized":"H.","wordType":"AUTHOR_WORD","start":33,"end":35},{"verbatim":"del","normalized":"del","wordType":"AUTHOR_WORD","start":36,"end":39},{"verbatim":"Villar","normalized":"Villar","wordType":"AUTHOR_WORD","start":40,"end":46}],"id":"4b16116e-549d-56bf-959a-ff11edb25021","parserVersion":"test_version"} ``` ### Exceptions with Binomials @@ -1954,7 +1954,7 @@ Canonical: Tillandsia utriculata subsp. utriculata Authorship: ```json -{"parsed":true,"quality":1,"verbatim":"Tillandsia utriculata subspec. utriculata","normalized":"Tillandsia utriculata subsp. utriculata","canonical":{"stemmed":"Tillandsia utriculat","simple":"Tillandsia utriculata utriculata","full":"Tillandsia utriculata subsp. utriculata"},"cardinality":3,"details":{"infraspecies":{"genus":"Tillandsia","species":"utriculata","infraspecies":[{"value":"utriculata","rank":"subsp."}]}},"words":[{"verbatim":"Tillandsia","normalized":"Tillandsia","wordType":"GENUS","start":0,"end":10},{"verbatim":"utriculata","normalized":"utriculata","wordType":"SPECIES","start":11,"end":21},{"verbatim":"subspec.","normalized":"subsp.","wordType":"RANK","start":22,"end":30},{"verbatim":"utriculata","normalized":"utriculata","wordType":"INFRASPECIES","start":31,"end":41}],"id":"fa612e5d-f697-5227-a5a0-fdb4a1aafe7a","parserVersion":"test_version"} +{"parsed":true,"quality":1,"verbatim":"Tillandsia utriculata subspec. utriculata","normalized":"Tillandsia utriculata subsp. utriculata","canonical":{"stemmed":"Tillandsia utriculat utriculat","simple":"Tillandsia utriculata utriculata","full":"Tillandsia utriculata subsp. utriculata"},"cardinality":3,"details":{"infraspecies":{"genus":"Tillandsia","species":"utriculata","infraspecies":[{"value":"utriculata","rank":"subsp."}]}},"words":[{"verbatim":"Tillandsia","normalized":"Tillandsia","wordType":"GENUS","start":0,"end":10},{"verbatim":"utriculata","normalized":"utriculata","wordType":"SPECIES","start":11,"end":21},{"verbatim":"subspec.","normalized":"subsp.","wordType":"RANK","start":22,"end":30},{"verbatim":"utriculata","normalized":"utriculata","wordType":"INFRASPECIES","start":31,"end":41}],"id":"fa612e5d-f697-5227-a5a0-fdb4a1aafe7a","parserVersion":"test_version"} ``` Name: Prunus mexicana S. Watson var. reticulata (Sarg.) Sarg. @@ -2004,7 +2004,7 @@ Canonical: Aus bus var. bus Authorship: ```json -{"parsed":true,"quality":1,"verbatim":"Aus bus Linn. var. bus","normalized":"Aus bus Linn. var. bus","canonical":{"stemmed":"Aus bus","simple":"Aus bus bus","full":"Aus bus var. bus"},"cardinality":3,"details":{"infraspecies":{"genus":"Aus","species":"bus","authorship":{"verbatim":"Linn.","normalized":"Linn.","authors":["Linn."],"originalAuth":{"authors":["Linn."]}},"infraspecies":[{"value":"bus","rank":"var."}]}},"words":[{"verbatim":"Aus","normalized":"Aus","wordType":"GENUS","start":0,"end":3},{"verbatim":"bus","normalized":"bus","wordType":"SPECIES","start":4,"end":7},{"verbatim":"Linn.","normalized":"Linn.","wordType":"AUTHOR_WORD","start":8,"end":13},{"verbatim":"var.","normalized":"var.","wordType":"RANK","start":14,"end":18},{"verbatim":"bus","normalized":"bus","wordType":"INFRASPECIES","start":19,"end":22}],"id":"2a6e45e2-5737-514b-8055-06f8a878dd36","parserVersion":"test_version"} +{"parsed":true,"quality":1,"verbatim":"Aus bus Linn. var. bus","normalized":"Aus bus Linn. var. bus","canonical":{"stemmed":"Aus bus bus","simple":"Aus bus bus","full":"Aus bus var. bus"},"cardinality":3,"details":{"infraspecies":{"genus":"Aus","species":"bus","authorship":{"verbatim":"Linn.","normalized":"Linn.","authors":["Linn."],"originalAuth":{"authors":["Linn."]}},"infraspecies":[{"value":"bus","rank":"var."}]}},"words":[{"verbatim":"Aus","normalized":"Aus","wordType":"GENUS","start":0,"end":3},{"verbatim":"bus","normalized":"bus","wordType":"SPECIES","start":4,"end":7},{"verbatim":"Linn.","normalized":"Linn.","wordType":"AUTHOR_WORD","start":8,"end":13},{"verbatim":"var.","normalized":"var.","wordType":"RANK","start":14,"end":18},{"verbatim":"bus","normalized":"bus","wordType":"INFRASPECIES","start":19,"end":22}],"id":"2a6e45e2-5737-514b-8055-06f8a878dd36","parserVersion":"test_version"} ``` Name: Agalinis purpurea (L.) Briton var. borealis (Berg.) Peterson 1987 @@ -2084,7 +2084,7 @@ Canonical: Allophylus amazonicus var. amazonicus Authorship: ```json -{"parsed":true,"quality":1,"verbatim":"Allophylus amazonicus var amazonicus","normalized":"Allophylus amazonicus var. amazonicus","canonical":{"stemmed":"Allophylus amazonic","simple":"Allophylus amazonicus amazonicus","full":"Allophylus amazonicus var. amazonicus"},"cardinality":3,"details":{"infraspecies":{"genus":"Allophylus","species":"amazonicus","infraspecies":[{"value":"amazonicus","rank":"var."}]}},"words":[{"verbatim":"Allophylus","normalized":"Allophylus","wordType":"GENUS","start":0,"end":10},{"verbatim":"amazonicus","normalized":"amazonicus","wordType":"SPECIES","start":11,"end":21},{"verbatim":"var","normalized":"var.","wordType":"RANK","start":22,"end":25},{"verbatim":"amazonicus","normalized":"amazonicus","wordType":"INFRASPECIES","start":26,"end":36}],"id":"4e5c108c-b089-5198-9088-dd58d74d951f","parserVersion":"test_version"} +{"parsed":true,"quality":1,"verbatim":"Allophylus amazonicus var amazonicus","normalized":"Allophylus amazonicus var. amazonicus","canonical":{"stemmed":"Allophylus amazonic amazonic","simple":"Allophylus amazonicus amazonicus","full":"Allophylus amazonicus var. amazonicus"},"cardinality":3,"details":{"infraspecies":{"genus":"Allophylus","species":"amazonicus","infraspecies":[{"value":"amazonicus","rank":"var."}]}},"words":[{"verbatim":"Allophylus","normalized":"Allophylus","wordType":"GENUS","start":0,"end":10},{"verbatim":"amazonicus","normalized":"amazonicus","wordType":"SPECIES","start":11,"end":21},{"verbatim":"var","normalized":"var.","wordType":"RANK","start":22,"end":25},{"verbatim":"amazonicus","normalized":"amazonicus","wordType":"INFRASPECIES","start":26,"end":36}],"id":"4e5c108c-b089-5198-9088-dd58d74d951f","parserVersion":"test_version"} ``` Name: Yarrowia lipolytica variety lipolytic @@ -2268,7 +2268,7 @@ Canonical: Calicium furfuraceum * furfuraceum Authorship: (L.) Pers. 1797 ```json -{"parsed":true,"quality":3,"qualityWarnings":[{"quality":3,"warning":"Uncommon rank"}],"verbatim":"Calicium furfuraceum * furfuraceum (L.) Pers. 1797","normalized":"Calicium furfuraceum * furfuraceum (L.) Pers. 1797","canonical":{"stemmed":"Calicium furfurace","simple":"Calicium furfuraceum furfuraceum","full":"Calicium furfuraceum * furfuraceum"},"cardinality":3,"authorship":{"verbatim":"(L.) Pers. 1797","normalized":"(L.) Pers. 1797","authors":["L.","Pers."],"originalAuth":{"authors":["L."]},"combinationAuth":{"authors":["Pers."],"year":{"year":"1797"}}},"details":{"infraspecies":{"genus":"Calicium","species":"furfuraceum","infraspecies":[{"value":"furfuraceum","rank":"*","authorship":{"verbatim":"(L.) Pers. 1797","normalized":"(L.) Pers. 1797","authors":["L.","Pers."],"originalAuth":{"authors":["L."]},"combinationAuth":{"authors":["Pers."],"year":{"year":"1797"}}}}]}},"words":[{"verbatim":"Calicium","normalized":"Calicium","wordType":"GENUS","start":0,"end":8},{"verbatim":"furfuraceum","normalized":"furfuraceum","wordType":"SPECIES","start":9,"end":20},{"verbatim":"*","normalized":"*","wordType":"RANK","start":21,"end":22},{"verbatim":"furfuraceum","normalized":"furfuraceum","wordType":"INFRASPECIES","start":23,"end":34},{"verbatim":"L.","normalized":"L.","wordType":"AUTHOR_WORD","start":36,"end":38},{"verbatim":"Pers.","normalized":"Pers.","wordType":"AUTHOR_WORD","start":40,"end":45},{"verbatim":"1797","normalized":"1797","wordType":"YEAR","start":46,"end":50}],"id":"6c5da8ae-cc50-5ce3-835d-d42e16aa0757","parserVersion":"test_version"} +{"parsed":true,"quality":3,"qualityWarnings":[{"quality":3,"warning":"Uncommon rank"}],"verbatim":"Calicium furfuraceum * furfuraceum (L.) Pers. 1797","normalized":"Calicium furfuraceum * furfuraceum (L.) Pers. 1797","canonical":{"stemmed":"Calicium furfurace furfurace","simple":"Calicium furfuraceum furfuraceum","full":"Calicium furfuraceum * furfuraceum"},"cardinality":3,"authorship":{"verbatim":"(L.) Pers. 1797","normalized":"(L.) Pers. 1797","authors":["L.","Pers."],"originalAuth":{"authors":["L."]},"combinationAuth":{"authors":["Pers."],"year":{"year":"1797"}}},"details":{"infraspecies":{"genus":"Calicium","species":"furfuraceum","infraspecies":[{"value":"furfuraceum","rank":"*","authorship":{"verbatim":"(L.) Pers. 1797","normalized":"(L.) Pers. 1797","authors":["L.","Pers."],"originalAuth":{"authors":["L."]},"combinationAuth":{"authors":["Pers."],"year":{"year":"1797"}}}}]}},"words":[{"verbatim":"Calicium","normalized":"Calicium","wordType":"GENUS","start":0,"end":8},{"verbatim":"furfuraceum","normalized":"furfuraceum","wordType":"SPECIES","start":9,"end":20},{"verbatim":"*","normalized":"*","wordType":"RANK","start":21,"end":22},{"verbatim":"furfuraceum","normalized":"furfuraceum","wordType":"INFRASPECIES","start":23,"end":34},{"verbatim":"L.","normalized":"L.","wordType":"AUTHOR_WORD","start":36,"end":38},{"verbatim":"Pers.","normalized":"Pers.","wordType":"AUTHOR_WORD","start":40,"end":45},{"verbatim":"1797","normalized":"1797","wordType":"YEAR","start":46,"end":50}],"id":"6c5da8ae-cc50-5ce3-835d-d42e16aa0757","parserVersion":"test_version"} ``` Name: Polyrhachis orsyllus nat musculus Forel 1901 @@ -3311,7 +3311,7 @@ Canonical: Aspicilia desertorum desertorum Authorship: ```json -{"parsed":true,"quality":1,"verbatim":"Aspicilia desertorum desertorum","normalized":"Aspicilia desertorum desertorum","canonical":{"stemmed":"Aspicilia desertor","simple":"Aspicilia desertorum desertorum","full":"Aspicilia desertorum desertorum"},"cardinality":3,"details":{"infraspecies":{"genus":"Aspicilia","species":"desertorum","infraspecies":[{"value":"desertorum"}]}},"words":[{"verbatim":"Aspicilia","normalized":"Aspicilia","wordType":"GENUS","start":0,"end":9},{"verbatim":"desertorum","normalized":"desertorum","wordType":"SPECIES","start":10,"end":20},{"verbatim":"desertorum","normalized":"desertorum","wordType":"INFRASPECIES","start":21,"end":31}],"id":"06de3555-3226-5e05-930e-6706044c1f7a","parserVersion":"test_version"} +{"parsed":true,"quality":1,"verbatim":"Aspicilia desertorum desertorum","normalized":"Aspicilia desertorum desertorum","canonical":{"stemmed":"Aspicilia desertor desertor","simple":"Aspicilia desertorum desertorum","full":"Aspicilia desertorum desertorum"},"cardinality":3,"details":{"infraspecies":{"genus":"Aspicilia","species":"desertorum","infraspecies":[{"value":"desertorum"}]}},"words":[{"verbatim":"Aspicilia","normalized":"Aspicilia","wordType":"GENUS","start":0,"end":9},{"verbatim":"desertorum","normalized":"desertorum","wordType":"SPECIES","start":10,"end":20},{"verbatim":"desertorum","normalized":"desertorum","wordType":"INFRASPECIES","start":21,"end":31}],"id":"06de3555-3226-5e05-930e-6706044c1f7a","parserVersion":"test_version"} ``` Name: Theope thestias discus @@ -3331,7 +3331,7 @@ Canonical: Ocydromus dalmatinus dalmatinus Authorship: (Dejean 1831) ```json -{"parsed":true,"quality":1,"verbatim":"Ocydromus dalmatinus dalmatinus (Dejean, 1831)","normalized":"Ocydromus dalmatinus dalmatinus (Dejean 1831)","canonical":{"stemmed":"Ocydromus dalmatin","simple":"Ocydromus dalmatinus dalmatinus","full":"Ocydromus dalmatinus dalmatinus"},"cardinality":3,"authorship":{"verbatim":"(Dejean, 1831)","normalized":"(Dejean 1831)","year":"1831","authors":["Dejean"],"originalAuth":{"authors":["Dejean"],"year":{"year":"1831"}}},"details":{"infraspecies":{"genus":"Ocydromus","species":"dalmatinus","infraspecies":[{"value":"dalmatinus","authorship":{"verbatim":"(Dejean, 1831)","normalized":"(Dejean 1831)","year":"1831","authors":["Dejean"],"originalAuth":{"authors":["Dejean"],"year":{"year":"1831"}}}}]}},"words":[{"verbatim":"Ocydromus","normalized":"Ocydromus","wordType":"GENUS","start":0,"end":9},{"verbatim":"dalmatinus","normalized":"dalmatinus","wordType":"SPECIES","start":10,"end":20},{"verbatim":"dalmatinus","normalized":"dalmatinus","wordType":"INFRASPECIES","start":21,"end":31},{"verbatim":"Dejean","normalized":"Dejean","wordType":"AUTHOR_WORD","start":33,"end":39},{"verbatim":"1831","normalized":"1831","wordType":"YEAR","start":41,"end":45}],"id":"5701cc12-ec23-5015-b426-3d065c94ea0a","parserVersion":"test_version"} +{"parsed":true,"quality":1,"verbatim":"Ocydromus dalmatinus dalmatinus (Dejean, 1831)","normalized":"Ocydromus dalmatinus dalmatinus (Dejean 1831)","canonical":{"stemmed":"Ocydromus dalmatin dalmatin","simple":"Ocydromus dalmatinus dalmatinus","full":"Ocydromus dalmatinus dalmatinus"},"cardinality":3,"authorship":{"verbatim":"(Dejean, 1831)","normalized":"(Dejean 1831)","year":"1831","authors":["Dejean"],"originalAuth":{"authors":["Dejean"],"year":{"year":"1831"}}},"details":{"infraspecies":{"genus":"Ocydromus","species":"dalmatinus","infraspecies":[{"value":"dalmatinus","authorship":{"verbatim":"(Dejean, 1831)","normalized":"(Dejean 1831)","year":"1831","authors":["Dejean"],"originalAuth":{"authors":["Dejean"],"year":{"year":"1831"}}}}]}},"words":[{"verbatim":"Ocydromus","normalized":"Ocydromus","wordType":"GENUS","start":0,"end":9},{"verbatim":"dalmatinus","normalized":"dalmatinus","wordType":"SPECIES","start":10,"end":20},{"verbatim":"dalmatinus","normalized":"dalmatinus","wordType":"INFRASPECIES","start":21,"end":31},{"verbatim":"Dejean","normalized":"Dejean","wordType":"AUTHOR_WORD","start":33,"end":39},{"verbatim":"1831","normalized":"1831","wordType":"YEAR","start":41,"end":45}],"id":"5701cc12-ec23-5015-b426-3d065c94ea0a","parserVersion":"test_version"} ``` Name: Rhipidia gracilirama lassula @@ -3353,7 +3353,7 @@ Canonical: Ocydromus dalmatinus dalmatinus Authorship: (Dejean 1831) ```json -{"parsed":true,"quality":4,"qualityWarnings":[{"quality":4,"warning":"Authorship is missing one parenthesis"}],"verbatim":"Ocydromus dalmatinus dalmatinus Dejean, 1831)","normalized":"Ocydromus dalmatinus dalmatinus (Dejean 1831)","canonical":{"stemmed":"Ocydromus dalmatin","simple":"Ocydromus dalmatinus dalmatinus","full":"Ocydromus dalmatinus dalmatinus"},"cardinality":3,"authorship":{"verbatim":"Dejean, 1831)","normalized":"(Dejean 1831)","year":"1831","authors":["Dejean"],"originalAuth":{"authors":["Dejean"],"year":{"year":"1831"}}},"details":{"infraspecies":{"genus":"Ocydromus","species":"dalmatinus","infraspecies":[{"value":"dalmatinus","authorship":{"verbatim":"Dejean, 1831)","normalized":"(Dejean 1831)","year":"1831","authors":["Dejean"],"originalAuth":{"authors":["Dejean"],"year":{"year":"1831"}}}}]}},"words":[{"verbatim":"Ocydromus","normalized":"Ocydromus","wordType":"GENUS","start":0,"end":9},{"verbatim":"dalmatinus","normalized":"dalmatinus","wordType":"SPECIES","start":10,"end":20},{"verbatim":"dalmatinus","normalized":"dalmatinus","wordType":"INFRASPECIES","start":21,"end":31},{"verbatim":"Dejean","normalized":"Dejean","wordType":"AUTHOR_WORD","start":32,"end":38},{"verbatim":"1831","normalized":"1831","wordType":"YEAR","start":40,"end":44}],"id":"5de70fe3-959a-5555-afdb-3ab85b91f1d7","parserVersion":"test_version"} +{"parsed":true,"quality":4,"qualityWarnings":[{"quality":4,"warning":"Authorship is missing one parenthesis"}],"verbatim":"Ocydromus dalmatinus dalmatinus Dejean, 1831)","normalized":"Ocydromus dalmatinus dalmatinus (Dejean 1831)","canonical":{"stemmed":"Ocydromus dalmatin dalmatin","simple":"Ocydromus dalmatinus dalmatinus","full":"Ocydromus dalmatinus dalmatinus"},"cardinality":3,"authorship":{"verbatim":"Dejean, 1831)","normalized":"(Dejean 1831)","year":"1831","authors":["Dejean"],"originalAuth":{"authors":["Dejean"],"year":{"year":"1831"}}},"details":{"infraspecies":{"genus":"Ocydromus","species":"dalmatinus","infraspecies":[{"value":"dalmatinus","authorship":{"verbatim":"Dejean, 1831)","normalized":"(Dejean 1831)","year":"1831","authors":["Dejean"],"originalAuth":{"authors":["Dejean"],"year":{"year":"1831"}}}}]}},"words":[{"verbatim":"Ocydromus","normalized":"Ocydromus","wordType":"GENUS","start":0,"end":9},{"verbatim":"dalmatinus","normalized":"dalmatinus","wordType":"SPECIES","start":10,"end":20},{"verbatim":"dalmatinus","normalized":"dalmatinus","wordType":"INFRASPECIES","start":21,"end":31},{"verbatim":"Dejean","normalized":"Dejean","wordType":"AUTHOR_WORD","start":32,"end":38},{"verbatim":"1831","normalized":"1831","wordType":"YEAR","start":40,"end":44}],"id":"5de70fe3-959a-5555-afdb-3ab85b91f1d7","parserVersion":"test_version"} ``` Name: Ocydromus dalmatinus dalmatinus Dejean, 1831 ) @@ -3363,7 +3363,7 @@ Canonical: Ocydromus dalmatinus dalmatinus Authorship: (Dejean 1831) ```json -{"parsed":true,"quality":4,"qualityWarnings":[{"quality":4,"warning":"Authorship is missing one parenthesis"}],"verbatim":"Ocydromus dalmatinus dalmatinus Dejean, 1831 )","normalized":"Ocydromus dalmatinus dalmatinus (Dejean 1831)","canonical":{"stemmed":"Ocydromus dalmatin","simple":"Ocydromus dalmatinus dalmatinus","full":"Ocydromus dalmatinus dalmatinus"},"cardinality":3,"authorship":{"verbatim":"Dejean, 1831 )","normalized":"(Dejean 1831)","year":"1831","authors":["Dejean"],"originalAuth":{"authors":["Dejean"],"year":{"year":"1831"}}},"details":{"infraspecies":{"genus":"Ocydromus","species":"dalmatinus","infraspecies":[{"value":"dalmatinus","authorship":{"verbatim":"Dejean, 1831 )","normalized":"(Dejean 1831)","year":"1831","authors":["Dejean"],"originalAuth":{"authors":["Dejean"],"year":{"year":"1831"}}}}]}},"words":[{"verbatim":"Ocydromus","normalized":"Ocydromus","wordType":"GENUS","start":0,"end":9},{"verbatim":"dalmatinus","normalized":"dalmatinus","wordType":"SPECIES","start":10,"end":20},{"verbatim":"dalmatinus","normalized":"dalmatinus","wordType":"INFRASPECIES","start":21,"end":31},{"verbatim":"Dejean","normalized":"Dejean","wordType":"AUTHOR_WORD","start":32,"end":38},{"verbatim":"1831","normalized":"1831","wordType":"YEAR","start":40,"end":44}],"id":"88dcc885-3360-5234-9620-371c2ebb636c","parserVersion":"test_version"} +{"parsed":true,"quality":4,"qualityWarnings":[{"quality":4,"warning":"Authorship is missing one parenthesis"}],"verbatim":"Ocydromus dalmatinus dalmatinus Dejean, 1831 )","normalized":"Ocydromus dalmatinus dalmatinus (Dejean 1831)","canonical":{"stemmed":"Ocydromus dalmatin dalmatin","simple":"Ocydromus dalmatinus dalmatinus","full":"Ocydromus dalmatinus dalmatinus"},"cardinality":3,"authorship":{"verbatim":"Dejean, 1831 )","normalized":"(Dejean 1831)","year":"1831","authors":["Dejean"],"originalAuth":{"authors":["Dejean"],"year":{"year":"1831"}}},"details":{"infraspecies":{"genus":"Ocydromus","species":"dalmatinus","infraspecies":[{"value":"dalmatinus","authorship":{"verbatim":"Dejean, 1831 )","normalized":"(Dejean 1831)","year":"1831","authors":["Dejean"],"originalAuth":{"authors":["Dejean"],"year":{"year":"1831"}}}}]}},"words":[{"verbatim":"Ocydromus","normalized":"Ocydromus","wordType":"GENUS","start":0,"end":9},{"verbatim":"dalmatinus","normalized":"dalmatinus","wordType":"SPECIES","start":10,"end":20},{"verbatim":"dalmatinus","normalized":"dalmatinus","wordType":"INFRASPECIES","start":21,"end":31},{"verbatim":"Dejean","normalized":"Dejean","wordType":"AUTHOR_WORD","start":32,"end":38},{"verbatim":"1831","normalized":"1831","wordType":"YEAR","start":40,"end":44}],"id":"88dcc885-3360-5234-9620-371c2ebb636c","parserVersion":"test_version"} ``` Name: Ocydromus dalmatinus dalmatinus ( Dejean, 1831 Mill. @@ -3373,7 +3373,7 @@ Canonical: Ocydromus dalmatinus dalmatinus Authorship: (Dejean 1831) Mill. ```json -{"parsed":true,"quality":4,"qualityWarnings":[{"quality":4,"warning":"Authorship is missing one parenthesis"}],"verbatim":"Ocydromus dalmatinus dalmatinus ( Dejean, 1831 Mill.","normalized":"Ocydromus dalmatinus dalmatinus (Dejean 1831) Mill.","canonical":{"stemmed":"Ocydromus dalmatin","simple":"Ocydromus dalmatinus dalmatinus","full":"Ocydromus dalmatinus dalmatinus"},"cardinality":3,"authorship":{"verbatim":"( Dejean, 1831 Mill.","normalized":"(Dejean 1831) Mill.","year":"1831","authors":["Dejean","Mill."],"originalAuth":{"authors":["Dejean"],"year":{"year":"1831"}},"combinationAuth":{"authors":["Mill."]}},"details":{"infraspecies":{"genus":"Ocydromus","species":"dalmatinus","infraspecies":[{"value":"dalmatinus","authorship":{"verbatim":"( Dejean, 1831 Mill.","normalized":"(Dejean 1831) Mill.","year":"1831","authors":["Dejean","Mill."],"originalAuth":{"authors":["Dejean"],"year":{"year":"1831"}},"combinationAuth":{"authors":["Mill."]}}}]}},"words":[{"verbatim":"Ocydromus","normalized":"Ocydromus","wordType":"GENUS","start":0,"end":9},{"verbatim":"dalmatinus","normalized":"dalmatinus","wordType":"SPECIES","start":10,"end":20},{"verbatim":"dalmatinus","normalized":"dalmatinus","wordType":"INFRASPECIES","start":21,"end":31},{"verbatim":"Dejean","normalized":"Dejean","wordType":"AUTHOR_WORD","start":34,"end":40},{"verbatim":"1831","normalized":"1831","wordType":"YEAR","start":42,"end":46},{"verbatim":"Mill.","normalized":"Mill.","wordType":"AUTHOR_WORD","start":47,"end":52}],"id":"0e8758a1-2567-543b-bafd-c8f9c81e2f08","parserVersion":"test_version"} +{"parsed":true,"quality":4,"qualityWarnings":[{"quality":4,"warning":"Authorship is missing one parenthesis"}],"verbatim":"Ocydromus dalmatinus dalmatinus ( Dejean, 1831 Mill.","normalized":"Ocydromus dalmatinus dalmatinus (Dejean 1831) Mill.","canonical":{"stemmed":"Ocydromus dalmatin dalmatin","simple":"Ocydromus dalmatinus dalmatinus","full":"Ocydromus dalmatinus dalmatinus"},"cardinality":3,"authorship":{"verbatim":"( Dejean, 1831 Mill.","normalized":"(Dejean 1831) Mill.","year":"1831","authors":["Dejean","Mill."],"originalAuth":{"authors":["Dejean"],"year":{"year":"1831"}},"combinationAuth":{"authors":["Mill."]}},"details":{"infraspecies":{"genus":"Ocydromus","species":"dalmatinus","infraspecies":[{"value":"dalmatinus","authorship":{"verbatim":"( Dejean, 1831 Mill.","normalized":"(Dejean 1831) Mill.","year":"1831","authors":["Dejean","Mill."],"originalAuth":{"authors":["Dejean"],"year":{"year":"1831"}},"combinationAuth":{"authors":["Mill."]}}}]}},"words":[{"verbatim":"Ocydromus","normalized":"Ocydromus","wordType":"GENUS","start":0,"end":9},{"verbatim":"dalmatinus","normalized":"dalmatinus","wordType":"SPECIES","start":10,"end":20},{"verbatim":"dalmatinus","normalized":"dalmatinus","wordType":"INFRASPECIES","start":21,"end":31},{"verbatim":"Dejean","normalized":"Dejean","wordType":"AUTHOR_WORD","start":34,"end":40},{"verbatim":"1831","normalized":"1831","wordType":"YEAR","start":42,"end":46},{"verbatim":"Mill.","normalized":"Mill.","wordType":"AUTHOR_WORD","start":47,"end":52}],"id":"0e8758a1-2567-543b-bafd-c8f9c81e2f08","parserVersion":"test_version"} ``` Name: Ocydromus dalmatinus dalmatinus (Dejean, 1831 Mill. @@ -3383,7 +3383,7 @@ Canonical: Ocydromus dalmatinus dalmatinus Authorship: (Dejean 1831) Mill. ```json -{"parsed":true,"quality":4,"qualityWarnings":[{"quality":4,"warning":"Authorship is missing one parenthesis"}],"verbatim":"Ocydromus dalmatinus dalmatinus (Dejean, 1831 Mill.","normalized":"Ocydromus dalmatinus dalmatinus (Dejean 1831) Mill.","canonical":{"stemmed":"Ocydromus dalmatin","simple":"Ocydromus dalmatinus dalmatinus","full":"Ocydromus dalmatinus dalmatinus"},"cardinality":3,"authorship":{"verbatim":"(Dejean, 1831 Mill.","normalized":"(Dejean 1831) Mill.","year":"1831","authors":["Dejean","Mill."],"originalAuth":{"authors":["Dejean"],"year":{"year":"1831"}},"combinationAuth":{"authors":["Mill."]}},"details":{"infraspecies":{"genus":"Ocydromus","species":"dalmatinus","infraspecies":[{"value":"dalmatinus","authorship":{"verbatim":"(Dejean, 1831 Mill.","normalized":"(Dejean 1831) Mill.","year":"1831","authors":["Dejean","Mill."],"originalAuth":{"authors":["Dejean"],"year":{"year":"1831"}},"combinationAuth":{"authors":["Mill."]}}}]}},"words":[{"verbatim":"Ocydromus","normalized":"Ocydromus","wordType":"GENUS","start":0,"end":9},{"verbatim":"dalmatinus","normalized":"dalmatinus","wordType":"SPECIES","start":10,"end":20},{"verbatim":"dalmatinus","normalized":"dalmatinus","wordType":"INFRASPECIES","start":21,"end":31},{"verbatim":"Dejean","normalized":"Dejean","wordType":"AUTHOR_WORD","start":33,"end":39},{"verbatim":"1831","normalized":"1831","wordType":"YEAR","start":41,"end":45},{"verbatim":"Mill.","normalized":"Mill.","wordType":"AUTHOR_WORD","start":46,"end":51}],"id":"b3c856b3-16a7-5dfc-abfd-3bba539b634f","parserVersion":"test_version"} +{"parsed":true,"quality":4,"qualityWarnings":[{"quality":4,"warning":"Authorship is missing one parenthesis"}],"verbatim":"Ocydromus dalmatinus dalmatinus (Dejean, 1831 Mill.","normalized":"Ocydromus dalmatinus dalmatinus (Dejean 1831) Mill.","canonical":{"stemmed":"Ocydromus dalmatin dalmatin","simple":"Ocydromus dalmatinus dalmatinus","full":"Ocydromus dalmatinus dalmatinus"},"cardinality":3,"authorship":{"verbatim":"(Dejean, 1831 Mill.","normalized":"(Dejean 1831) Mill.","year":"1831","authors":["Dejean","Mill."],"originalAuth":{"authors":["Dejean"],"year":{"year":"1831"}},"combinationAuth":{"authors":["Mill."]}},"details":{"infraspecies":{"genus":"Ocydromus","species":"dalmatinus","infraspecies":[{"value":"dalmatinus","authorship":{"verbatim":"(Dejean, 1831 Mill.","normalized":"(Dejean 1831) Mill.","year":"1831","authors":["Dejean","Mill."],"originalAuth":{"authors":["Dejean"],"year":{"year":"1831"}},"combinationAuth":{"authors":["Mill."]}}}]}},"words":[{"verbatim":"Ocydromus","normalized":"Ocydromus","wordType":"GENUS","start":0,"end":9},{"verbatim":"dalmatinus","normalized":"dalmatinus","wordType":"SPECIES","start":10,"end":20},{"verbatim":"dalmatinus","normalized":"dalmatinus","wordType":"INFRASPECIES","start":21,"end":31},{"verbatim":"Dejean","normalized":"Dejean","wordType":"AUTHOR_WORD","start":33,"end":39},{"verbatim":"1831","normalized":"1831","wordType":"YEAR","start":41,"end":45},{"verbatim":"Mill.","normalized":"Mill.","wordType":"AUTHOR_WORD","start":46,"end":51}],"id":"b3c856b3-16a7-5dfc-abfd-3bba539b634f","parserVersion":"test_version"} ``` ### Unknown authorship @@ -3731,7 +3731,7 @@ Canonical: Amelanchier arborea var. arborea Authorship: (Michx. fil.) Fernald ```json -{"parsed":true,"quality":1,"verbatim":"Amelanchier arborea var. arborea (Michx. f.) Fernald","normalized":"Amelanchier arborea var. arborea (Michx. fil.) Fernald","canonical":{"stemmed":"Amelanchier arbore","simple":"Amelanchier arborea arborea","full":"Amelanchier arborea var. arborea"},"cardinality":3,"authorship":{"verbatim":"(Michx. f.) Fernald","normalized":"(Michx. fil.) Fernald","authors":["Michx. fil.","Fernald"],"originalAuth":{"authors":["Michx. fil."]},"combinationAuth":{"authors":["Fernald"]}},"details":{"infraspecies":{"genus":"Amelanchier","species":"arborea","infraspecies":[{"value":"arborea","rank":"var.","authorship":{"verbatim":"(Michx. f.) Fernald","normalized":"(Michx. fil.) Fernald","authors":["Michx. fil.","Fernald"],"originalAuth":{"authors":["Michx. fil."]},"combinationAuth":{"authors":["Fernald"]}}}]}},"words":[{"verbatim":"Amelanchier","normalized":"Amelanchier","wordType":"GENUS","start":0,"end":11},{"verbatim":"arborea","normalized":"arborea","wordType":"SPECIES","start":12,"end":19},{"verbatim":"var.","normalized":"var.","wordType":"RANK","start":20,"end":24},{"verbatim":"arborea","normalized":"arborea","wordType":"INFRASPECIES","start":25,"end":32},{"verbatim":"Michx.","normalized":"Michx.","wordType":"AUTHOR_WORD","start":34,"end":40},{"verbatim":"f.","normalized":"fil.","wordType":"AUTHOR_WORD_FILIUS","start":41,"end":43},{"verbatim":"Fernald","normalized":"Fernald","wordType":"AUTHOR_WORD","start":45,"end":52}],"id":"1644869c-3e0c-5e7e-a709-a86dee11b917","parserVersion":"test_version"} +{"parsed":true,"quality":1,"verbatim":"Amelanchier arborea var. arborea (Michx. f.) Fernald","normalized":"Amelanchier arborea var. arborea (Michx. fil.) Fernald","canonical":{"stemmed":"Amelanchier arbore arbore","simple":"Amelanchier arborea arborea","full":"Amelanchier arborea var. arborea"},"cardinality":3,"authorship":{"verbatim":"(Michx. f.) Fernald","normalized":"(Michx. fil.) Fernald","authors":["Michx. fil.","Fernald"],"originalAuth":{"authors":["Michx. fil."]},"combinationAuth":{"authors":["Fernald"]}},"details":{"infraspecies":{"genus":"Amelanchier","species":"arborea","infraspecies":[{"value":"arborea","rank":"var.","authorship":{"verbatim":"(Michx. f.) Fernald","normalized":"(Michx. fil.) Fernald","authors":["Michx. fil.","Fernald"],"originalAuth":{"authors":["Michx. fil."]},"combinationAuth":{"authors":["Fernald"]}}}]}},"words":[{"verbatim":"Amelanchier","normalized":"Amelanchier","wordType":"GENUS","start":0,"end":11},{"verbatim":"arborea","normalized":"arborea","wordType":"SPECIES","start":12,"end":19},{"verbatim":"var.","normalized":"var.","wordType":"RANK","start":20,"end":24},{"verbatim":"arborea","normalized":"arborea","wordType":"INFRASPECIES","start":25,"end":32},{"verbatim":"Michx.","normalized":"Michx.","wordType":"AUTHOR_WORD","start":34,"end":40},{"verbatim":"f.","normalized":"fil.","wordType":"AUTHOR_WORD_FILIUS","start":41,"end":43},{"verbatim":"Fernald","normalized":"Fernald","wordType":"AUTHOR_WORD","start":45,"end":52}],"id":"1644869c-3e0c-5e7e-a709-a86dee11b917","parserVersion":"test_version"} ``` Name: Cerastium arvense var. fuegianum Hook. f. @@ -5211,7 +5211,7 @@ Canonical: Carabus satyrus satyrus Authorship: Kurnakov 1962 ```json -{"parsed":true,"quality":2,"qualityWarnings":[{"quality":2,"warning":"Author in upper case"}],"verbatim":"Carabus satyrus satyrus KURNAKOV, 1962","normalized":"Carabus satyrus satyrus Kurnakov 1962","canonical":{"stemmed":"Carabus satyr","simple":"Carabus satyrus satyrus","full":"Carabus satyrus satyrus"},"cardinality":3,"authorship":{"verbatim":"KURNAKOV, 1962","normalized":"Kurnakov 1962","year":"1962","authors":["Kurnakov"],"originalAuth":{"authors":["Kurnakov"],"year":{"year":"1962"}}},"details":{"infraspecies":{"genus":"Carabus","species":"satyrus","infraspecies":[{"value":"satyrus","authorship":{"verbatim":"KURNAKOV, 1962","normalized":"Kurnakov 1962","year":"1962","authors":["Kurnakov"],"originalAuth":{"authors":["Kurnakov"],"year":{"year":"1962"}}}}]}},"words":[{"verbatim":"Carabus","normalized":"Carabus","wordType":"GENUS","start":0,"end":7},{"verbatim":"satyrus","normalized":"satyrus","wordType":"SPECIES","start":8,"end":15},{"verbatim":"satyrus","normalized":"satyrus","wordType":"INFRASPECIES","start":16,"end":23},{"verbatim":"KURNAKOV","normalized":"Kurnakov","wordType":"AUTHOR_WORD","start":24,"end":32},{"verbatim":"1962","normalized":"1962","wordType":"YEAR","start":34,"end":38}],"id":"81654954-0f47-5715-acb1-1cd8d2c49e9a","parserVersion":"test_version"} +{"parsed":true,"quality":2,"qualityWarnings":[{"quality":2,"warning":"Author in upper case"}],"verbatim":"Carabus satyrus satyrus KURNAKOV, 1962","normalized":"Carabus satyrus satyrus Kurnakov 1962","canonical":{"stemmed":"Carabus satyr satyr","simple":"Carabus satyrus satyrus","full":"Carabus satyrus satyrus"},"cardinality":3,"authorship":{"verbatim":"KURNAKOV, 1962","normalized":"Kurnakov 1962","year":"1962","authors":["Kurnakov"],"originalAuth":{"authors":["Kurnakov"],"year":{"year":"1962"}}},"details":{"infraspecies":{"genus":"Carabus","species":"satyrus","infraspecies":[{"value":"satyrus","authorship":{"verbatim":"KURNAKOV, 1962","normalized":"Kurnakov 1962","year":"1962","authors":["Kurnakov"],"originalAuth":{"authors":["Kurnakov"],"year":{"year":"1962"}}}}]}},"words":[{"verbatim":"Carabus","normalized":"Carabus","wordType":"GENUS","start":0,"end":7},{"verbatim":"satyrus","normalized":"satyrus","wordType":"SPECIES","start":8,"end":15},{"verbatim":"satyrus","normalized":"satyrus","wordType":"INFRASPECIES","start":16,"end":23},{"verbatim":"KURNAKOV","normalized":"Kurnakov","wordType":"AUTHOR_WORD","start":24,"end":32},{"verbatim":"1962","normalized":"1962","wordType":"YEAR","start":34,"end":38}],"id":"81654954-0f47-5715-acb1-1cd8d2c49e9a","parserVersion":"test_version"} ``` @@ -5314,7 +5314,7 @@ Canonical: Pelargonium cucullatum subsp. cucullatum Authorship: (L.) L'Her. ```json -{"parsed":true,"quality":4,"qualityWarnings":[{"quality":4,"warning":"Unparsed tail"}],"verbatim":"Pelargonium cucullatum ssp. cucullatum (L.) L'Her. ex [Soland.]","normalized":"Pelargonium cucullatum subsp. cucullatum (L.) L'Her.","canonical":{"stemmed":"Pelargonium cucullat","simple":"Pelargonium cucullatum cucullatum","full":"Pelargonium cucullatum subsp. cucullatum"},"cardinality":3,"authorship":{"verbatim":"(L.) L'Her.","normalized":"(L.) L'Her.","authors":["L.","L'Her."],"originalAuth":{"authors":["L."]},"combinationAuth":{"authors":["L'Her."]}},"tail":" ex [Soland.]","details":{"infraspecies":{"genus":"Pelargonium","species":"cucullatum","infraspecies":[{"value":"cucullatum","rank":"subsp.","authorship":{"verbatim":"(L.) L'Her.","normalized":"(L.) L'Her.","authors":["L.","L'Her."],"originalAuth":{"authors":["L."]},"combinationAuth":{"authors":["L'Her."]}}}]}},"words":[{"verbatim":"Pelargonium","normalized":"Pelargonium","wordType":"GENUS","start":0,"end":11},{"verbatim":"cucullatum","normalized":"cucullatum","wordType":"SPECIES","start":12,"end":22},{"verbatim":"ssp.","normalized":"subsp.","wordType":"RANK","start":23,"end":27},{"verbatim":"cucullatum","normalized":"cucullatum","wordType":"INFRASPECIES","start":28,"end":38},{"verbatim":"L.","normalized":"L.","wordType":"AUTHOR_WORD","start":40,"end":42},{"verbatim":"L'Her.","normalized":"L'Her.","wordType":"AUTHOR_WORD","start":44,"end":50}],"id":"83811b74-a581-5801-aa49-d4eab6775fdb","parserVersion":"test_version"} +{"parsed":true,"quality":4,"qualityWarnings":[{"quality":4,"warning":"Unparsed tail"}],"verbatim":"Pelargonium cucullatum ssp. cucullatum (L.) L'Her. ex [Soland.]","normalized":"Pelargonium cucullatum subsp. cucullatum (L.) L'Her.","canonical":{"stemmed":"Pelargonium cucullat cucullat","simple":"Pelargonium cucullatum cucullatum","full":"Pelargonium cucullatum subsp. cucullatum"},"cardinality":3,"authorship":{"verbatim":"(L.) L'Her.","normalized":"(L.) L'Her.","authors":["L.","L'Her."],"originalAuth":{"authors":["L."]},"combinationAuth":{"authors":["L'Her."]}},"tail":" ex [Soland.]","details":{"infraspecies":{"genus":"Pelargonium","species":"cucullatum","infraspecies":[{"value":"cucullatum","rank":"subsp.","authorship":{"verbatim":"(L.) L'Her.","normalized":"(L.) L'Her.","authors":["L.","L'Her."],"originalAuth":{"authors":["L."]},"combinationAuth":{"authors":["L'Her."]}}}]}},"words":[{"verbatim":"Pelargonium","normalized":"Pelargonium","wordType":"GENUS","start":0,"end":11},{"verbatim":"cucullatum","normalized":"cucullatum","wordType":"SPECIES","start":12,"end":22},{"verbatim":"ssp.","normalized":"subsp.","wordType":"RANK","start":23,"end":27},{"verbatim":"cucullatum","normalized":"cucullatum","wordType":"INFRASPECIES","start":28,"end":38},{"verbatim":"L.","normalized":"L.","wordType":"AUTHOR_WORD","start":40,"end":42},{"verbatim":"L'Her.","normalized":"L'Her.","wordType":"AUTHOR_WORD","start":44,"end":50}],"id":"83811b74-a581-5801-aa49-d4eab6775fdb","parserVersion":"test_version"} ``` @@ -6780,7 +6780,7 @@ Canonical: Acarospora cratericola cratericola Authorship: Shenk 1974 ```json -{"parsed":true,"quality":4,"qualityWarnings":[{"quality":4,"warning":"Unparsed tail"}],"verbatim":"Acarospora cratericola cratericola Shenk 1974 group","normalized":"Acarospora cratericola cratericola Shenk 1974","canonical":{"stemmed":"Acarospora cratericol","simple":"Acarospora cratericola cratericola","full":"Acarospora cratericola cratericola"},"cardinality":3,"authorship":{"verbatim":"Shenk 1974","normalized":"Shenk 1974","year":"1974","authors":["Shenk"],"originalAuth":{"authors":["Shenk"],"year":{"year":"1974"}}},"tail":" group","details":{"infraspecies":{"genus":"Acarospora","species":"cratericola","infraspecies":[{"value":"cratericola","authorship":{"verbatim":"Shenk 1974","normalized":"Shenk 1974","year":"1974","authors":["Shenk"],"originalAuth":{"authors":["Shenk"],"year":{"year":"1974"}}}}]}},"words":[{"verbatim":"Acarospora","normalized":"Acarospora","wordType":"GENUS","start":0,"end":10},{"verbatim":"cratericola","normalized":"cratericola","wordType":"SPECIES","start":11,"end":22},{"verbatim":"cratericola","normalized":"cratericola","wordType":"INFRASPECIES","start":23,"end":34},{"verbatim":"Shenk","normalized":"Shenk","wordType":"AUTHOR_WORD","start":35,"end":40},{"verbatim":"1974","normalized":"1974","wordType":"YEAR","start":41,"end":45}],"id":"0f466e31-7e23-5320-ac7e-4c1026bc8af6","parserVersion":"test_version"} +{"parsed":true,"quality":4,"qualityWarnings":[{"quality":4,"warning":"Unparsed tail"}],"verbatim":"Acarospora cratericola cratericola Shenk 1974 group","normalized":"Acarospora cratericola cratericola Shenk 1974","canonical":{"stemmed":"Acarospora cratericol cratericol","simple":"Acarospora cratericola cratericola","full":"Acarospora cratericola cratericola"},"cardinality":3,"authorship":{"verbatim":"Shenk 1974","normalized":"Shenk 1974","year":"1974","authors":["Shenk"],"originalAuth":{"authors":["Shenk"],"year":{"year":"1974"}}},"tail":" group","details":{"infraspecies":{"genus":"Acarospora","species":"cratericola","infraspecies":[{"value":"cratericola","authorship":{"verbatim":"Shenk 1974","normalized":"Shenk 1974","year":"1974","authors":["Shenk"],"originalAuth":{"authors":["Shenk"],"year":{"year":"1974"}}}}]}},"words":[{"verbatim":"Acarospora","normalized":"Acarospora","wordType":"GENUS","start":0,"end":10},{"verbatim":"cratericola","normalized":"cratericola","wordType":"SPECIES","start":11,"end":22},{"verbatim":"cratericola","normalized":"cratericola","wordType":"INFRASPECIES","start":23,"end":34},{"verbatim":"Shenk","normalized":"Shenk","wordType":"AUTHOR_WORD","start":35,"end":40},{"verbatim":"1974","normalized":"1974","wordType":"YEAR","start":41,"end":45}],"id":"0f466e31-7e23-5320-ac7e-4c1026bc8af6","parserVersion":"test_version"} ``` Name: Acarospora cratericola cratericola Shenk 1974 species group @@ -6790,7 +6790,7 @@ Canonical: Acarospora cratericola cratericola Authorship: Shenk 1974 ```json -{"parsed":true,"quality":4,"qualityWarnings":[{"quality":4,"warning":"Unparsed tail"}],"verbatim":"Acarospora cratericola cratericola Shenk 1974 species group","normalized":"Acarospora cratericola cratericola Shenk 1974","canonical":{"stemmed":"Acarospora cratericol","simple":"Acarospora cratericola cratericola","full":"Acarospora cratericola cratericola"},"cardinality":3,"authorship":{"verbatim":"Shenk 1974","normalized":"Shenk 1974","year":"1974","authors":["Shenk"],"originalAuth":{"authors":["Shenk"],"year":{"year":"1974"}}},"tail":" species group","details":{"infraspecies":{"genus":"Acarospora","species":"cratericola","infraspecies":[{"value":"cratericola","authorship":{"verbatim":"Shenk 1974","normalized":"Shenk 1974","year":"1974","authors":["Shenk"],"originalAuth":{"authors":["Shenk"],"year":{"year":"1974"}}}}]}},"words":[{"verbatim":"Acarospora","normalized":"Acarospora","wordType":"GENUS","start":0,"end":10},{"verbatim":"cratericola","normalized":"cratericola","wordType":"SPECIES","start":11,"end":22},{"verbatim":"cratericola","normalized":"cratericola","wordType":"INFRASPECIES","start":23,"end":34},{"verbatim":"Shenk","normalized":"Shenk","wordType":"AUTHOR_WORD","start":35,"end":40},{"verbatim":"1974","normalized":"1974","wordType":"YEAR","start":41,"end":45}],"id":"a7684260-ed99-5d55-9a35-fd97b67e8933","parserVersion":"test_version"} +{"parsed":true,"quality":4,"qualityWarnings":[{"quality":4,"warning":"Unparsed tail"}],"verbatim":"Acarospora cratericola cratericola Shenk 1974 species group","normalized":"Acarospora cratericola cratericola Shenk 1974","canonical":{"stemmed":"Acarospora cratericol cratericol","simple":"Acarospora cratericola cratericola","full":"Acarospora cratericola cratericola"},"cardinality":3,"authorship":{"verbatim":"Shenk 1974","normalized":"Shenk 1974","year":"1974","authors":["Shenk"],"originalAuth":{"authors":["Shenk"],"year":{"year":"1974"}}},"tail":" species group","details":{"infraspecies":{"genus":"Acarospora","species":"cratericola","infraspecies":[{"value":"cratericola","authorship":{"verbatim":"Shenk 1974","normalized":"Shenk 1974","year":"1974","authors":["Shenk"],"originalAuth":{"authors":["Shenk"],"year":{"year":"1974"}}}}]}},"words":[{"verbatim":"Acarospora","normalized":"Acarospora","wordType":"GENUS","start":0,"end":10},{"verbatim":"cratericola","normalized":"cratericola","wordType":"SPECIES","start":11,"end":22},{"verbatim":"cratericola","normalized":"cratericola","wordType":"INFRASPECIES","start":23,"end":34},{"verbatim":"Shenk","normalized":"Shenk","wordType":"AUTHOR_WORD","start":35,"end":40},{"verbatim":"1974","normalized":"1974","wordType":"YEAR","start":41,"end":45}],"id":"a7684260-ed99-5d55-9a35-fd97b67e8933","parserVersion":"test_version"} ``` Name: Acarospora cratericola cratericola Shenk 1974 species complex @@ -6800,7 +6800,7 @@ Canonical: Acarospora cratericola cratericola Authorship: Shenk 1974 ```json -{"parsed":true,"quality":4,"qualityWarnings":[{"quality":4,"warning":"Unparsed tail"}],"verbatim":"Acarospora cratericola cratericola Shenk 1974 species complex","normalized":"Acarospora cratericola cratericola Shenk 1974","canonical":{"stemmed":"Acarospora cratericol","simple":"Acarospora cratericola cratericola","full":"Acarospora cratericola cratericola"},"cardinality":3,"authorship":{"verbatim":"Shenk 1974","normalized":"Shenk 1974","year":"1974","authors":["Shenk"],"originalAuth":{"authors":["Shenk"],"year":{"year":"1974"}}},"tail":" species complex","details":{"infraspecies":{"genus":"Acarospora","species":"cratericola","infraspecies":[{"value":"cratericola","authorship":{"verbatim":"Shenk 1974","normalized":"Shenk 1974","year":"1974","authors":["Shenk"],"originalAuth":{"authors":["Shenk"],"year":{"year":"1974"}}}}]}},"words":[{"verbatim":"Acarospora","normalized":"Acarospora","wordType":"GENUS","start":0,"end":10},{"verbatim":"cratericola","normalized":"cratericola","wordType":"SPECIES","start":11,"end":22},{"verbatim":"cratericola","normalized":"cratericola","wordType":"INFRASPECIES","start":23,"end":34},{"verbatim":"Shenk","normalized":"Shenk","wordType":"AUTHOR_WORD","start":35,"end":40},{"verbatim":"1974","normalized":"1974","wordType":"YEAR","start":41,"end":45}],"id":"d227da04-7c89-50f7-8cf1-de09bc5aa903","parserVersion":"test_version"} +{"parsed":true,"quality":4,"qualityWarnings":[{"quality":4,"warning":"Unparsed tail"}],"verbatim":"Acarospora cratericola cratericola Shenk 1974 species complex","normalized":"Acarospora cratericola cratericola Shenk 1974","canonical":{"stemmed":"Acarospora cratericol cratericol","simple":"Acarospora cratericola cratericola","full":"Acarospora cratericola cratericola"},"cardinality":3,"authorship":{"verbatim":"Shenk 1974","normalized":"Shenk 1974","year":"1974","authors":["Shenk"],"originalAuth":{"authors":["Shenk"],"year":{"year":"1974"}}},"tail":" species complex","details":{"infraspecies":{"genus":"Acarospora","species":"cratericola","infraspecies":[{"value":"cratericola","authorship":{"verbatim":"Shenk 1974","normalized":"Shenk 1974","year":"1974","authors":["Shenk"],"originalAuth":{"authors":["Shenk"],"year":{"year":"1974"}}}}]}},"words":[{"verbatim":"Acarospora","normalized":"Acarospora","wordType":"GENUS","start":0,"end":10},{"verbatim":"cratericola","normalized":"cratericola","wordType":"SPECIES","start":11,"end":22},{"verbatim":"cratericola","normalized":"cratericola","wordType":"INFRASPECIES","start":23,"end":34},{"verbatim":"Shenk","normalized":"Shenk","wordType":"AUTHOR_WORD","start":35,"end":40},{"verbatim":"1974","normalized":"1974","wordType":"YEAR","start":41,"end":45}],"id":"d227da04-7c89-50f7-8cf1-de09bc5aa903","parserVersion":"test_version"} ``` Name: Parus caeruleus species complex diff --git a/version.go b/version.go index 230f015..ea6d4d9 100644 --- a/version.go +++ b/version.go @@ -3,7 +3,7 @@ package gnparser var ( // Version is the version of the gnparser package. When Makefile is // used, the version is calculated out of Git tags. - Version = "v1.8.0" + Version = "v1.9.0" // Build is a timestamp of when Makefile was used to compile // the gnparser code. If go build was used, Build stays empty. Build string