diff --git a/ent/parsed/parsed.go b/ent/parsed/parsed.go index 18e0fda..accebd0 100644 --- a/ent/parsed/parsed.go +++ b/ent/parsed/parsed.go @@ -69,6 +69,9 @@ type Parsed struct { // not parseable and are placed into the "tail" field. Bacteria *tb.Tribool `json:"bacteria,omitempty"` + // Candidatus indicates that the parsed string is a candidatus bacterial name. + Candidatus bool `json:"candidatus,omitempty"` + // Virus is set to true in case if name is not parsed, and probably // belongs to a wide variety of sub-cellular entities like // diff --git a/ent/parser/ast.go b/ent/parser/ast.go index cd9f710..1a2611a 100644 --- a/ent/parser/ast.go +++ b/ent/parser/ast.go @@ -26,6 +26,7 @@ type scientificNameNode struct { surrogate *parsed.Annotation cultivar bool bacteria *tribool.Tribool + candidatus bool tail string parserVersion string ambiguousEpithet string @@ -64,6 +65,7 @@ func (p *Engine) newScientificNameNode() { hybrid: p.hybrid, surrogate: p.surrogate, bacteria: p.bacteria, + candidatus: p.candidatus, cultivar: p.cultivar, tail: tail, } @@ -480,6 +482,7 @@ type candidatusNameNode struct { func (p *Engine) newCandidatusName(n *node32) nameData { bac := tribool.New(1) p.bacteria = &bac + p.candidatus = true p.addWarn(parsed.CandidatusName) var cand *parsed.Word diff --git a/ent/parser/engine.go b/ent/parser/engine.go index 1df7979..e89529f 100644 --- a/ent/parser/engine.go +++ b/ent/parser/engine.go @@ -20,6 +20,7 @@ type baseEngine struct { graftChimera *parsed.Annotation surrogate *parsed.Annotation bacteria *tribool.Tribool + candidatus bool warnings map[parsed.Warning]struct{} tail string cultivar bool @@ -45,6 +46,7 @@ func (p *Engine) fullReset() { p.graftChimera = nil p.surrogate = nil p.bacteria = nil + p.candidatus = false var warnReset map[parsed.Warning]struct{} p.warnings = warnReset p.tail = "" diff --git a/ent/parser/output.go b/ent/parser/output.go index bfcb9e8..f43d498 100644 --- a/ent/parser/output.go +++ b/ent/parser/output.go @@ -29,6 +29,7 @@ func (sn *scientificNameNode) ToOutput( res.ParseQuality, res.QualityWarnings = sn.qualityWarnings() res.Normalized = sn.Normalized() res.Cardinality = sn.cardinality + res.Candidatus = sn.candidatus res.Rank = sn.rank res.Authorship = sn.LastAuthorship(withDetails) res.Hybrid = sn.hybrid diff --git a/testdata/test_data.md b/testdata/test_data.md index b52b38c..47d6aa0 100644 --- a/testdata/test_data.md +++ b/testdata/test_data.md @@ -724,9 +724,9 @@ Authorship: A. Plocek Name: subgen. Psammophrynopsis Koch, 1953 -Canonical: Psammophrynopsis +Canonical: subgen. Psammophrynopsis -Authorship: Koch, 1953 +Authorship: Koch 1953 ```json {"parsed":true,"quality":2,"qualityWarnings":[{"quality":2,"warning":"Uninomial prepended by its rank"}],"verbatim":"subgen. Psammophrynopsis Koch, 1953","normalized":"subgen. Psammophrynopsis Koch 1953","canonical":{"stemmed":"Psammophrynopsis","simple":"Psammophrynopsis","full":"subgen. Psammophrynopsis"},"cardinality":1,"rank":"subgen.","authorship":{"verbatim":"Koch, 1953","normalized":"Koch 1953","year":"1953","authors":["Koch"],"originalAuth":{"authors":["Koch"],"year":{"year":"1953"}}},"details":{"uninomial":{"uninomial":"Psammophrynopsis","rank":"subgen.","authorship":{"verbatim":"Koch, 1953","normalized":"Koch 1953","year":"1953","authors":["Koch"],"originalAuth":{"authors":["Koch"],"year":{"year":"1953"}}}}},"words":[{"verbatim":"subgen.","normalized":"subgen.","wordType":"RANK","start":0,"end":7},{"verbatim":"Psammophrynopsis","normalized":"Psammophrynopsis","wordType":"UNINOMIAL","start":8,"end":24},{"verbatim":"Koch","normalized":"Koch","wordType":"AUTHOR_WORD","start":25,"end":29},{"verbatim":"1953","normalized":"1953","wordType":"YEAR","start":31,"end":35}],"id":"1b8f7c8c-16c8-5411-a992-f7945f0e3838","parserVersion":"test_version"} @@ -7395,7 +7395,7 @@ Canonical: Candidatus Puniceispirillum Authorship: Oh, Kwon, Kang, Kang, Lee, Kim & Cho 2010 ```json -{"parsed":true,"quality":2,"qualityWarnings":[{"quality":2,"warning":"Bacterial `Candidatus` name"}],"verbatim":"Candidatus Puniceispirillum Oh, Kwon, Kang, Kang, Lee, Kim \u0026 Cho, 2010","normalized":"Candidatus Puniceispirillum Oh, Kwon, Kang, Kang, Lee, Kim \u0026 Cho 2010","canonical":{"stemmed":"Puniceispirillum","simple":"Puniceispirillum","full":"Candidatus Puniceispirillum"},"cardinality":1,"authorship":{"verbatim":"Oh, Kwon, Kang, Kang, Lee, Kim \u0026 Cho, 2010","normalized":"Oh, Kwon, Kang, Kang, Lee, Kim \u0026 Cho 2010","year":"2010","authors":["Oh","Kwon","Kang","Lee","Kim","Cho"],"originalAuth":{"authors":["Oh","Kwon","Kang","Kang","Lee","Kim","Cho"],"year":{"year":"2010"}}},"bacteria":"yes","details":{"uninomial":{"uninomial":"Puniceispirillum","authorship":{"verbatim":"Oh, Kwon, Kang, Kang, Lee, Kim \u0026 Cho, 2010","normalized":"Oh, Kwon, Kang, Kang, Lee, Kim \u0026 Cho 2010","year":"2010","authors":["Oh","Kwon","Kang","Lee","Kim","Cho"],"originalAuth":{"authors":["Oh","Kwon","Kang","Kang","Lee","Kim","Cho"],"year":{"year":"2010"}}}}},"words":[{"verbatim":"Candidatus","normalized":"Candidatus","wordType":"CANDIDATUS","start":0,"end":10},{"verbatim":"Puniceispirillum","normalized":"Puniceispirillum","wordType":"UNINOMIAL","start":11,"end":27},{"verbatim":"Oh","normalized":"Oh","wordType":"AUTHOR_WORD","start":28,"end":30},{"verbatim":"Kwon","normalized":"Kwon","wordType":"AUTHOR_WORD","start":32,"end":36},{"verbatim":"Kang","normalized":"Kang","wordType":"AUTHOR_WORD","start":38,"end":42},{"verbatim":"Kang","normalized":"Kang","wordType":"AUTHOR_WORD","start":44,"end":48},{"verbatim":"Lee","normalized":"Lee","wordType":"AUTHOR_WORD","start":50,"end":53},{"verbatim":"Kim","normalized":"Kim","wordType":"AUTHOR_WORD","start":55,"end":58},{"verbatim":"Cho","normalized":"Cho","wordType":"AUTHOR_WORD","start":61,"end":64},{"verbatim":"2010","normalized":"2010","wordType":"YEAR","start":66,"end":70}],"id":"82fde2e2-8e50-5fd0-8ffe-96f34f85505b","parserVersion":"test_version"} +{"parsed":true,"quality":2,"qualityWarnings":[{"quality":2,"warning":"Bacterial `Candidatus` name"}],"verbatim":"Candidatus Puniceispirillum Oh, Kwon, Kang, Kang, Lee, Kim \u0026 Cho, 2010","normalized":"Candidatus Puniceispirillum Oh, Kwon, Kang, Kang, Lee, Kim \u0026 Cho 2010","canonical":{"stemmed":"Puniceispirillum","simple":"Puniceispirillum","full":"Candidatus Puniceispirillum"},"cardinality":1,"authorship":{"verbatim":"Oh, Kwon, Kang, Kang, Lee, Kim \u0026 Cho, 2010","normalized":"Oh, Kwon, Kang, Kang, Lee, Kim \u0026 Cho 2010","year":"2010","authors":["Oh","Kwon","Kang","Lee","Kim","Cho"],"originalAuth":{"authors":["Oh","Kwon","Kang","Kang","Lee","Kim","Cho"],"year":{"year":"2010"}}},"bacteria":"yes","candidatus":true,"details":{"uninomial":{"uninomial":"Puniceispirillum","authorship":{"verbatim":"Oh, Kwon, Kang, Kang, Lee, Kim \u0026 Cho, 2010","normalized":"Oh, Kwon, Kang, Kang, Lee, Kim \u0026 Cho 2010","year":"2010","authors":["Oh","Kwon","Kang","Lee","Kim","Cho"],"originalAuth":{"authors":["Oh","Kwon","Kang","Kang","Lee","Kim","Cho"],"year":{"year":"2010"}}}}},"words":[{"verbatim":"Candidatus","normalized":"Candidatus","wordType":"CANDIDATUS","start":0,"end":10},{"verbatim":"Puniceispirillum","normalized":"Puniceispirillum","wordType":"UNINOMIAL","start":11,"end":27},{"verbatim":"Oh","normalized":"Oh","wordType":"AUTHOR_WORD","start":28,"end":30},{"verbatim":"Kwon","normalized":"Kwon","wordType":"AUTHOR_WORD","start":32,"end":36},{"verbatim":"Kang","normalized":"Kang","wordType":"AUTHOR_WORD","start":38,"end":42},{"verbatim":"Kang","normalized":"Kang","wordType":"AUTHOR_WORD","start":44,"end":48},{"verbatim":"Lee","normalized":"Lee","wordType":"AUTHOR_WORD","start":50,"end":53},{"verbatim":"Kim","normalized":"Kim","wordType":"AUTHOR_WORD","start":55,"end":58},{"verbatim":"Cho","normalized":"Cho","wordType":"AUTHOR_WORD","start":61,"end":64},{"verbatim":"2010","normalized":"2010","wordType":"YEAR","start":66,"end":70}],"id":"82fde2e2-8e50-5fd0-8ffe-96f34f85505b","parserVersion":"test_version"} ``` @@ -7406,7 +7406,7 @@ Canonical: Candidatus Halobonum Authorship: ```json -{"parsed":true,"quality":2,"qualityWarnings":[{"quality":2,"warning":"Bacterial `Candidatus` name"}],"verbatim":"Candidatus Halobonum","normalized":"Candidatus Halobonum","canonical":{"stemmed":"Halobonum","simple":"Halobonum","full":"Candidatus Halobonum"},"cardinality":1,"bacteria":"yes","details":{"uninomial":{"uninomial":"Halobonum"}},"words":[{"verbatim":"Candidatus","normalized":"Candidatus","wordType":"CANDIDATUS","start":0,"end":10},{"verbatim":"Halobonum","normalized":"Halobonum","wordType":"UNINOMIAL","start":11,"end":20}],"id":"289152c0-1042-5cac-a649-44314b25c857","parserVersion":"test_version"} +{"parsed":true,"quality":2,"qualityWarnings":[{"quality":2,"warning":"Bacterial `Candidatus` name"}],"verbatim":"Candidatus Halobonum","normalized":"Candidatus Halobonum","canonical":{"stemmed":"Halobonum","simple":"Halobonum","full":"Candidatus Halobonum"},"cardinality":1,"bacteria":"yes","candidatus":true,"details":{"uninomial":{"uninomial":"Halobonum"}},"words":[{"verbatim":"Candidatus","normalized":"Candidatus","wordType":"CANDIDATUS","start":0,"end":10},{"verbatim":"Halobonum","normalized":"Halobonum","wordType":"UNINOMIAL","start":11,"end":20}],"id":"289152c0-1042-5cac-a649-44314b25c857","parserVersion":"test_version"} ``` Name: Candidatus Endomicrobium sp. MdDo-005 @@ -7416,7 +7416,7 @@ Canonical: Candidatus Endomicrobium Authorship: ```json -{"parsed":true,"quality":4,"qualityWarnings":[{"quality":4,"warning":"Name is approximate"},{"quality":2,"warning":"Bacterial `Candidatus` name"}],"verbatim":"Candidatus Endomicrobium sp. MdDo-005","normalized":"Candidatus Endomicrobium","canonical":{"stemmed":"Endomicrobium","simple":"Endomicrobium","full":"Candidatus Endomicrobium"},"cardinality":0,"bacteria":"yes","surrogate":"APPROXIMATION","details":{"approximation":{"genus":"Endomicrobium","approximationMarker":"sp.","ignored":" MdDo-005"}},"words":[{"verbatim":"Candidatus","normalized":"Candidatus","wordType":"CANDIDATUS","start":0,"end":10},{"verbatim":"Endomicrobium","normalized":"Endomicrobium","wordType":"GENUS","start":11,"end":24},{"verbatim":"sp.","normalized":"sp.","wordType":"APPROXIMATION_MARKER","start":25,"end":28}],"id":"f9231593-37a4-5e11-b3e8-3963f90b37e8","parserVersion":"test_version"} +{"parsed":true,"quality":4,"qualityWarnings":[{"quality":4,"warning":"Name is approximate"},{"quality":2,"warning":"Bacterial `Candidatus` name"}],"verbatim":"Candidatus Endomicrobium sp. MdDo-005","normalized":"Candidatus Endomicrobium","canonical":{"stemmed":"Endomicrobium","simple":"Endomicrobium","full":"Candidatus Endomicrobium"},"cardinality":0,"bacteria":"yes","candidatus":true,"surrogate":"APPROXIMATION","details":{"approximation":{"genus":"Endomicrobium","approximationMarker":"sp.","ignored":" MdDo-005"}},"words":[{"verbatim":"Candidatus","normalized":"Candidatus","wordType":"CANDIDATUS","start":0,"end":10},{"verbatim":"Endomicrobium","normalized":"Endomicrobium","wordType":"GENUS","start":11,"end":24},{"verbatim":"sp.","normalized":"sp.","wordType":"APPROXIMATION_MARKER","start":25,"end":28}],"id":"f9231593-37a4-5e11-b3e8-3963f90b37e8","parserVersion":"test_version"} ``` Name: Candidatus Abawacabacteria bacterium @@ -7436,7 +7436,7 @@ Canonical: Candidatus Accumulibacter phosphatis Authorship: ```json -{"parsed":true,"quality":4,"qualityWarnings":[{"quality":4,"warning":"Unparsed tail"},{"quality":2,"warning":"Bacterial `Candidatus` name"}],"verbatim":"Candidatus Accumulibacter phosphatis clade IIA str. UW-1","normalized":"Candidatus Accumulibacter phosphatis","canonical":{"stemmed":"Accumulibacter phosphat","simple":"Accumulibacter phosphatis","full":"Candidatus Accumulibacter phosphatis"},"cardinality":2,"rank":"sp.","bacteria":"yes","tail":" clade IIA str. UW-1","details":{"species":{"genus":"Accumulibacter","species":"phosphatis"}},"words":[{"verbatim":"Candidatus","normalized":"Candidatus","wordType":"CANDIDATUS","start":0,"end":10},{"verbatim":"Accumulibacter","normalized":"Accumulibacter","wordType":"GENUS","start":11,"end":25},{"verbatim":"phosphatis","normalized":"phosphatis","wordType":"SPECIES","start":26,"end":36}],"id":"0c1f98d9-0c9a-5750-8e44-3e4156f04825","parserVersion":"test_version"} +{"parsed":true,"quality":4,"qualityWarnings":[{"quality":4,"warning":"Unparsed tail"},{"quality":2,"warning":"Bacterial `Candidatus` name"}],"verbatim":"Candidatus Accumulibacter phosphatis clade IIA str. UW-1","normalized":"Candidatus Accumulibacter phosphatis","canonical":{"stemmed":"Accumulibacter phosphat","simple":"Accumulibacter phosphatis","full":"Candidatus Accumulibacter phosphatis"},"cardinality":2,"rank":"sp.","bacteria":"yes","candidatus":true,"tail":" clade IIA str. UW-1","details":{"species":{"genus":"Accumulibacter","species":"phosphatis"}},"words":[{"verbatim":"Candidatus","normalized":"Candidatus","wordType":"CANDIDATUS","start":0,"end":10},{"verbatim":"Accumulibacter","normalized":"Accumulibacter","wordType":"GENUS","start":11,"end":25},{"verbatim":"phosphatis","normalized":"phosphatis","wordType":"SPECIES","start":26,"end":36}],"id":"0c1f98d9-0c9a-5750-8e44-3e4156f04825","parserVersion":"test_version"} ``` Name: Candidatus Anammoxoglobus environmental samples @@ -7446,7 +7446,7 @@ Canonical: Candidatus Anammoxoglobus Authorship: ```json -{"parsed":true,"quality":4,"qualityWarnings":[{"quality":4,"warning":"Unparsed tail"},{"quality":2,"warning":"Bacterial `Candidatus` name"}],"verbatim":"Candidatus Anammoxoglobus environmental samples","normalized":"Candidatus Anammoxoglobus","canonical":{"stemmed":"Anammoxoglobus","simple":"Anammoxoglobus","full":"Candidatus Anammoxoglobus"},"cardinality":1,"bacteria":"yes","tail":" environmental samples","details":{"uninomial":{"uninomial":"Anammoxoglobus"}},"words":[{"verbatim":"Candidatus","normalized":"Candidatus","wordType":"CANDIDATUS","start":0,"end":10},{"verbatim":"Anammoxoglobus","normalized":"Anammoxoglobus","wordType":"UNINOMIAL","start":11,"end":25}],"id":"c2c440df-a095-59bc-b2b7-ed79460af6a3","parserVersion":"test_version"} +{"parsed":true,"quality":4,"qualityWarnings":[{"quality":4,"warning":"Unparsed tail"},{"quality":2,"warning":"Bacterial `Candidatus` name"}],"verbatim":"Candidatus Anammoxoglobus environmental samples","normalized":"Candidatus Anammoxoglobus","canonical":{"stemmed":"Anammoxoglobus","simple":"Anammoxoglobus","full":"Candidatus Anammoxoglobus"},"cardinality":1,"bacteria":"yes","candidatus":true,"tail":" environmental samples","details":{"uninomial":{"uninomial":"Anammoxoglobus"}},"words":[{"verbatim":"Candidatus","normalized":"Candidatus","wordType":"CANDIDATUS","start":0,"end":10},{"verbatim":"Anammoxoglobus","normalized":"Anammoxoglobus","wordType":"UNINOMIAL","start":11,"end":25}],"id":"c2c440df-a095-59bc-b2b7-ed79460af6a3","parserVersion":"test_version"} ``` ### No parsing -- 'Not', 'None', 'Unidentified' phrases diff --git a/testdata/test_data_cultivars_new.md b/testdata/test_data_cultivars_new.md new file mode 100644 index 0000000..5155ac7 --- /dev/null +++ b/testdata/test_data_cultivars_new.md @@ -0,0 +1,196 @@ +# Global Names Parser Test With Cultivars + + + +* [Introduction](#introduction) +* [Tests](#tests) + * [Binomials with cultivars](#binomials-with-cultivars) + * [Names with cultivars in apostrophes](#names-with-cultivars-in-apostrophes) + * [Names with cultivars in single quotes](#names-with-cultivars-in-single-quotes) + * [Names with cultivars in double straight quotes](#names-with-cultivars-in-double-straight-quotes) + * [Hybrid formulae with cultivars](#hybrid-formulae-with-cultivars) + * [Uninomials with cultivars](#uninomials-with-cultivars) + * [Graft-chimeras](#graft-chieras) + + + +## Introduction + +These tests run with the -C/--cultivar flag enabled, which adds the cultivar +epithet into the normalized and canonical names and enables the parsing of graft-chimeras + +## Tests + +### Binomials with cultivars + +Name: Sarracenia flava 'Maxima' + +Canonical: Sarracenia flava ‘Maxima’ + +Authorship: + +```json +{"parsed":true,"quality":1,"verbatim":"Sarracenia flava 'Maxima'","normalized":"Sarracenia flava ‘Maxima’","canonical":{"stemmed":"Sarracenia flau ‘Maxima’","simple":"Sarracenia flava ‘Maxima’","full":"Sarracenia flava ‘Maxima’"},"cardinality":3,"cultivar":true,"details":{"species":{"genus":"Sarracenia","species":"flava","cultivar":"‘Maxima’"}},"words":[{"verbatim":"Sarracenia","normalized":"Sarracenia","wordType":"GENUS","start":0,"end":10},{"verbatim":"flava","normalized":"flava","wordType":"SPECIES","start":11,"end":16},{"verbatim":"Maxima","normalized":"‘Maxima’","wordType":"CULTIVAR","start":18,"end":24}],"id":"39178008-65ee-5de3-af88-63ffdd67e00b","parserVersion":"test_version"} +``` + +Name: Phyllostachys vivax cv aureocaulis + +Canonical: Phyllostachys vivax ‘aureocaulis’ + +Authorship: + +```json +{"parsed":true,"quality":1,"verbatim":"Phyllostachys vivax cv aureocaulis","normalized":"Phyllostachys vivax ‘aureocaulis’","canonical":{"stemmed":"Phyllostachys uiuax ‘aureocaulis’","simple":"Phyllostachys vivax ‘aureocaulis’","full":"Phyllostachys vivax ‘aureocaulis’"},"cardinality":3,"cultivar":true,"details":{"species":{"genus":"Phyllostachys","species":"vivax","cultivar":"‘aureocaulis’"}},"words":[{"verbatim":"Phyllostachys","normalized":"Phyllostachys","wordType":"GENUS","start":0,"end":13},{"verbatim":"vivax","normalized":"vivax","wordType":"SPECIES","start":14,"end":19},{"verbatim":"aureocaulis","normalized":"‘aureocaulis’","wordType":"CULTIVAR","start":23,"end":34}],"id":"56f7057d-9c5c-5ac7-bc7a-f631fb58f5d6","parserVersion":"test_version"} +``` + +Name: Ligusticum sinense cv 'chuanxiong' S.H. Qiu & et al. + +Canonical: Ligusticum sinense ‘chuanxiong’ + +Authorship: + +```json +{"parsed":true,"quality":4,"qualityWarnings":[{"quality":4,"warning":"Unparsed tail"}],"verbatim":"Ligusticum sinense cv 'chuanxiong' S.H. Qiu \u0026 et al.","normalized":"Ligusticum sinense ‘chuanxiong’","canonical":{"stemmed":"Ligusticum sinens ‘chuanxiong’","simple":"Ligusticum sinense ‘chuanxiong’","full":"Ligusticum sinense ‘chuanxiong’"},"cardinality":3,"cultivar":true,"tail":" S.H. Qiu \u0026 et al.","details":{"species":{"genus":"Ligusticum","species":"sinense","cultivar":"‘chuanxiong’"}},"words":[{"verbatim":"Ligusticum","normalized":"Ligusticum","wordType":"GENUS","start":0,"end":10},{"verbatim":"sinense","normalized":"sinense","wordType":"SPECIES","start":11,"end":18},{"verbatim":"chuanxiong","normalized":"‘chuanxiong’","wordType":"CULTIVAR","start":23,"end":33}],"id":"73f015c2-6679-5428-b418-6f4487af419d","parserVersion":"test_version"} +``` + +Name: Anthurium 'Ace of Spades' + +Canonical: Anthurium ‘Ace of Spades’ + +Authorship: + +```json +{"parsed":true,"quality":1,"verbatim":"Anthurium 'Ace of Spades'","normalized":"Anthurium ‘Ace of Spades’","canonical":{"stemmed":"Anthurium ‘Ace of Spades’","simple":"Anthurium ‘Ace of Spades’","full":"Anthurium ‘Ace of Spades’"},"cardinality":2,"cultivar":true,"details":{"uninomial":{"uninomial":"Anthurium","cultivar":"‘Ace of Spades’"}},"words":[{"verbatim":"Anthurium","normalized":"Anthurium","wordType":"UNINOMIAL","start":0,"end":9},{"verbatim":"Ace of Spades","normalized":"‘Ace of Spades’","wordType":"CULTIVAR","start":11,"end":24}],"id":"3adaf031-08f2-576e-b9af-616bf328473e","parserVersion":"test_version"} +``` + +### Names with cultivars in apostrophes + +Name: Sarracenia flava 'Maxima' + +Canonical: Sarracenia flava ‘Maxima’ + +Authorship: + +```json +{"parsed":true,"quality":1,"verbatim":"Sarracenia flava 'Maxima'","normalized":"Sarracenia flava ‘Maxima’","canonical":{"stemmed":"Sarracenia flau ‘Maxima’","simple":"Sarracenia flava ‘Maxima’","full":"Sarracenia flava ‘Maxima’"},"cardinality":3,"cultivar":true,"details":{"species":{"genus":"Sarracenia","species":"flava","cultivar":"‘Maxima’"}},"words":[{"verbatim":"Sarracenia","normalized":"Sarracenia","wordType":"GENUS","start":0,"end":10},{"verbatim":"flava","normalized":"flava","wordType":"SPECIES","start":11,"end":16},{"verbatim":"Maxima","normalized":"‘Maxima’","wordType":"CULTIVAR","start":18,"end":24}],"id":"39178008-65ee-5de3-af88-63ffdd67e00b","parserVersion":"test_version"} +``` + +### Names with cultivars in single quotes + +Name: Colocasia esculenta ‘Black Magic’ + +Canonical: Colocasia esculenta ‘Black Magic’ + +Authorship: + +```json +{"parsed":true,"quality":1,"verbatim":"Colocasia esculenta ‘Black Magic’","normalized":"Colocasia esculenta ‘Black Magic’","canonical":{"stemmed":"Colocasia esculent ‘Black Magic’","simple":"Colocasia esculenta ‘Black Magic’","full":"Colocasia esculenta ‘Black Magic’"},"cardinality":3,"cultivar":true,"details":{"species":{"genus":"Colocasia","species":"esculenta","cultivar":"‘Black Magic’"}},"words":[{"verbatim":"Colocasia","normalized":"Colocasia","wordType":"GENUS","start":0,"end":9},{"verbatim":"esculenta","normalized":"esculenta","wordType":"SPECIES","start":10,"end":19},{"verbatim":"Black Magic","normalized":"‘Black Magic’","wordType":"CULTIVAR","start":21,"end":32}],"id":"9a74485c-86d2-5bc6-a796-a634bdf03a9e","parserVersion":"test_version"} +``` + +### Names with cultivars in double straight quotes + +Name: Amorphophallus konjac "Nightstick" + +Canonical: Amorphophallus konjac ‘Nightstick’ + +Authorship: + +```json +{"parsed":true,"quality":1,"verbatim":"Amorphophallus konjac \"Nightstick\"","normalized":"Amorphophallus konjac ‘Nightstick’","canonical":{"stemmed":"Amorphophallus koniac ‘Nightstick’","simple":"Amorphophallus konjac ‘Nightstick’","full":"Amorphophallus konjac ‘Nightstick’"},"cardinality":3,"cultivar":true,"details":{"species":{"genus":"Amorphophallus","species":"konjac","cultivar":"‘Nightstick’"}},"words":[{"verbatim":"Amorphophallus","normalized":"Amorphophallus","wordType":"GENUS","start":0,"end":14},{"verbatim":"konjac","normalized":"konjac","wordType":"SPECIES","start":15,"end":21},{"verbatim":"Nightstick","normalized":"‘Nightstick’","wordType":"CULTIVAR","start":23,"end":33}],"id":"eaa0c523-412c-55d5-a3fb-88c9476362c7","parserVersion":"test_version"} +``` + +### Hybrid formulae with cultivars + +Name: Sarracenia alata 'Black Tube' x Sarracenia leucophylla + +Canonical: Sarracenia alata ‘Black Tube’ × Sarracenia leucophylla + +Authorship: + +```json +{"parsed":true,"quality":2,"qualityWarnings":[{"quality":2,"warning":"Hybrid formula"}],"verbatim":"Sarracenia alata 'Black Tube' x Sarracenia leucophylla","normalized":"Sarracenia alata ‘Black Tube’ × Sarracenia leucophylla","canonical":{"stemmed":"Sarracenia alat ‘Black Tube’ × Sarracenia leucophyll","simple":"Sarracenia alata ‘Black Tube’ × Sarracenia leucophylla","full":"Sarracenia alata ‘Black Tube’ × Sarracenia leucophylla"},"cardinality":0,"cultivar":true,"hybrid":"HYBRID_FORMULA","details":{"hybridFormula":[{"species":{"genus":"Sarracenia","species":"alata","cultivar":"‘Black Tube’"}},{"species":{"genus":"Sarracenia","species":"leucophylla"}}]},"words":[{"verbatim":"Sarracenia","normalized":"Sarracenia","wordType":"GENUS","start":0,"end":10},{"verbatim":"alata","normalized":"alata","wordType":"SPECIES","start":11,"end":16},{"verbatim":"Black Tube","normalized":"‘Black Tube’","wordType":"CULTIVAR","start":18,"end":28},{"verbatim":"x","normalized":"×","wordType":"HYBRID_CHAR","start":30,"end":31},{"verbatim":"Sarracenia","normalized":"Sarracenia","wordType":"GENUS","start":32,"end":42},{"verbatim":"leucophylla","normalized":"leucophylla","wordType":"SPECIES","start":43,"end":54}],"id":"17b9d0fb-76f0-510e-8c13-bf48033d50dd","parserVersion":"test_version"} +``` + +Name: Sarracenia alata cv Black Tube x Sarracenia leucophylla + +Canonical: Sarracenia alata ‘Black Tube’ × Sarracenia leucophylla + +Authorship: + +```json +{"parsed":true,"quality":2,"qualityWarnings":[{"quality":2,"warning":"Hybrid formula"}],"verbatim":"Sarracenia alata cv Black Tube x Sarracenia leucophylla","normalized":"Sarracenia alata ‘Black Tube’ × Sarracenia leucophylla","canonical":{"stemmed":"Sarracenia alat ‘Black Tube’ × Sarracenia leucophyll","simple":"Sarracenia alata ‘Black Tube’ × Sarracenia leucophylla","full":"Sarracenia alata ‘Black Tube’ × Sarracenia leucophylla"},"cardinality":0,"cultivar":true,"hybrid":"HYBRID_FORMULA","details":{"hybridFormula":[{"species":{"genus":"Sarracenia","species":"alata","cultivar":"‘Black Tube’"}},{"species":{"genus":"Sarracenia","species":"leucophylla"}}]},"words":[{"verbatim":"Sarracenia","normalized":"Sarracenia","wordType":"GENUS","start":0,"end":10},{"verbatim":"alata","normalized":"alata","wordType":"SPECIES","start":11,"end":16},{"verbatim":"Black Tube","normalized":"‘Black Tube’","wordType":"CULTIVAR","start":20,"end":30},{"verbatim":"x","normalized":"×","wordType":"HYBRID_CHAR","start":31,"end":32},{"verbatim":"Sarracenia","normalized":"Sarracenia","wordType":"GENUS","start":33,"end":43},{"verbatim":"leucophylla","normalized":"leucophylla","wordType":"SPECIES","start":44,"end":55}],"id":"1b978ba7-efc5-550f-a598-7830114514b1","parserVersion":"test_version"} +``` + +Name: Sarracenia alata cv Black Tube x Sarracenia flava 'Copper Lid' + +Canonical: Sarracenia alata ‘Black Tube’ × Sarracenia flava ‘Copper Lid’ + +Authorship: + +```json +{"parsed":true,"quality":2,"qualityWarnings":[{"quality":2,"warning":"Hybrid formula"}],"verbatim":"Sarracenia alata cv Black Tube x Sarracenia flava 'Copper Lid'","normalized":"Sarracenia alata ‘Black Tube’ × Sarracenia flava ‘Copper Lid’","canonical":{"stemmed":"Sarracenia alat ‘Black Tube’ × Sarracenia flau ‘Copper Lid’","simple":"Sarracenia alata ‘Black Tube’ × Sarracenia flava ‘Copper Lid’","full":"Sarracenia alata ‘Black Tube’ × Sarracenia flava ‘Copper Lid’"},"cardinality":0,"cultivar":true,"hybrid":"HYBRID_FORMULA","details":{"hybridFormula":[{"species":{"genus":"Sarracenia","species":"alata","cultivar":"‘Black Tube’"}},{"species":{"genus":"Sarracenia","species":"flava","cultivar":"‘Copper Lid’"}}]},"words":[{"verbatim":"Sarracenia","normalized":"Sarracenia","wordType":"GENUS","start":0,"end":10},{"verbatim":"alata","normalized":"alata","wordType":"SPECIES","start":11,"end":16},{"verbatim":"Black Tube","normalized":"‘Black Tube’","wordType":"CULTIVAR","start":20,"end":30},{"verbatim":"x","normalized":"×","wordType":"HYBRID_CHAR","start":31,"end":32},{"verbatim":"Sarracenia","normalized":"Sarracenia","wordType":"GENUS","start":33,"end":43},{"verbatim":"flava","normalized":"flava","wordType":"SPECIES","start":44,"end":49},{"verbatim":"Copper Lid","normalized":"‘Copper Lid’","wordType":"CULTIVAR","start":51,"end":61}],"id":"260dea27-b2c9-5231-bebf-b149999e053a","parserVersion":"test_version"} +``` + +### Uninomials with cultivars + +Name: Rhododendron cv Cilpinense + +Canonical: Rhododendron ‘Cilpinense’ + +Authorship: + +```json +{"parsed":true,"quality":1,"verbatim":"Rhododendron cv Cilpinense","normalized":"Rhododendron ‘Cilpinense’","canonical":{"stemmed":"Rhododendron ‘Cilpinense’","simple":"Rhododendron ‘Cilpinense’","full":"Rhododendron ‘Cilpinense’"},"cardinality":2,"cultivar":true,"details":{"uninomial":{"uninomial":"Rhododendron","cultivar":"‘Cilpinense’"}},"words":[{"verbatim":"Rhododendron","normalized":"Rhododendron","wordType":"UNINOMIAL","start":0,"end":12},{"verbatim":"Cilpinense","normalized":"‘Cilpinense’","wordType":"CULTIVAR","start":16,"end":26}],"id":"abd299df-e4b2-533c-86eb-a4a5e273b934","parserVersion":"test_version"} +``` + +Name: Spathiphyllum Schott “Mauna Loa” + +Canonical: Spathiphyllum ‘Mauna Loa’ + +Authorship: Schott + +```json +{"parsed":true,"quality":1,"verbatim":"Spathiphyllum Schott “Mauna Loa”","normalized":"Spathiphyllum Schott ‘Mauna Loa’","canonical":{"stemmed":"Spathiphyllum ‘Mauna Loa’","simple":"Spathiphyllum ‘Mauna Loa’","full":"Spathiphyllum ‘Mauna Loa’"},"cardinality":2,"authorship":{"verbatim":"Schott","normalized":"Schott","authors":["Schott"],"originalAuth":{"authors":["Schott"]}},"cultivar":true,"details":{"uninomial":{"uninomial":"Spathiphyllum","cultivar":"‘Mauna Loa’","authorship":{"verbatim":"Schott","normalized":"Schott","authors":["Schott"],"originalAuth":{"authors":["Schott"]}}}},"words":[{"verbatim":"Spathiphyllum","normalized":"Spathiphyllum","wordType":"UNINOMIAL","start":0,"end":13},{"verbatim":"Schott","normalized":"Schott","wordType":"AUTHOR_WORD","start":14,"end":20},{"verbatim":"Mauna Loa","normalized":"‘Mauna Loa’","wordType":"CULTIVAR","start":22,"end":31}],"id":"fb8afb5b-67b8-5bcc-8492-773cc40d3bb9","parserVersion":"test_version"} +``` + +### Graft-chimeras + +Name: + Crataegomespilus + +Canonical: + Crataegomespilus + +Authorship: + +```json +{"parsed":true,"quality":2,"qualityWarnings":[{"quality":2,"warning":"Named graft-chimera"}],"verbatim":"+ Crataegomespilus","normalized":"+ Crataegomespilus","canonical":{"stemmed":"Crataegomespilus","simple":"Crataegomespilus","full":"+ Crataegomespilus"},"cardinality":1,"hybrid":"NAMED_GRAFT_CHIMERA","details":{"uninomial":{"uninomial":"Crataegomespilus"}},"words":[{"verbatim":"+","normalized":"+","wordType":"GRAFT_CHIMERA_CHAR","start":0,"end":1},{"verbatim":"Crataegomespilus","normalized":"Crataegomespilus","wordType":"UNINOMIAL","start":2,"end":18}],"id":"408e8fc7-fa27-53a6-9eff-37cb779724e4","parserVersion":"test_version"} +``` + +Name: +Crataegomespilus + +Canonical: + Crataegomespilus + +Authorship: + +```json +{"parsed":true,"quality":3,"qualityWarnings":[{"quality":3,"warning":"Graft-chimera char is not separated by space"},{"quality":2,"warning":"Named graft-chimera"}],"verbatim":"+Crataegomespilus","normalized":"+ Crataegomespilus","canonical":{"stemmed":"Crataegomespilus","simple":"Crataegomespilus","full":"+ Crataegomespilus"},"cardinality":1,"hybrid":"NAMED_GRAFT_CHIMERA","details":{"uninomial":{"uninomial":"Crataegomespilus"}},"words":[{"verbatim":"+","normalized":"+","wordType":"GRAFT_CHIMERA_CHAR","start":0,"end":1},{"verbatim":"Crataegomespilus","normalized":"Crataegomespilus","wordType":"UNINOMIAL","start":1,"end":17}],"id":"c2c50c08-1f62-547f-8fab-50359caf0b31","parserVersion":"test_version"} +``` + +Name: Cytisus purpureus + Laburnum anagyroides + +Canonical: Cytisus purpureus + Laburnum anagyroides + +Authorship: + +```json +{"parsed":true,"quality":2,"qualityWarnings":[{"quality":2,"warning":"Graft-chimera formula"}],"verbatim":"Cytisus purpureus + Laburnum anagyroides","normalized":"Cytisus purpureus + Laburnum anagyroides","canonical":{"stemmed":"Cytisus purpure + Laburnum anagyroid","simple":"Cytisus purpureus + Laburnum anagyroides","full":"Cytisus purpureus + Laburnum anagyroides"},"cardinality":0,"hybrid":"GRAFT_CHIMERA_FORMULA","details":{"graftChimeraFormula":[{"species":{"genus":"Cytisus","species":"purpureus"}},{"species":{"genus":"Laburnum","species":"anagyroides"}}]},"words":[{"verbatim":"Cytisus","normalized":"Cytisus","wordType":"GENUS","start":0,"end":7},{"verbatim":"purpureus","normalized":"purpureus","wordType":"SPECIES","start":8,"end":17},{"verbatim":"+","normalized":"+","wordType":"GRAFT_CHIMERA_CHAR","start":18,"end":19},{"verbatim":"Laburnum","normalized":"Laburnum","wordType":"GENUS","start":20,"end":28},{"verbatim":"anagyroides","normalized":"anagyroides","wordType":"SPECIES","start":29,"end":40}],"id":"a8f8ace8-ba1a-5371-b9d5-73efce81d52c","parserVersion":"test_version"} +``` + +Name: Crataegus + Mespilus + +Canonical: Crataegus + Mespilus + +Authorship: + +```json +{"parsed":true,"quality":2,"qualityWarnings":[{"quality":2,"warning":"Graft-chimera formula"}],"verbatim":"Crataegus + Mespilus","normalized":"Crataegus + Mespilus","canonical":{"stemmed":"Crataegus + Mespilus","simple":"Crataegus + Mespilus","full":"Crataegus + Mespilus"},"cardinality":0,"hybrid":"GRAFT_CHIMERA_FORMULA","details":{"graftChimeraFormula":[{"uninomial":{"uninomial":"Crataegus"}},{"uninomial":{"uninomial":"Mespilus"}}]},"words":[{"verbatim":"Crataegus","normalized":"Crataegus","wordType":"UNINOMIAL","start":0,"end":9},{"verbatim":"+","normalized":"+","wordType":"GRAFT_CHIMERA_CHAR","start":10,"end":11},{"verbatim":"Mespilus","normalized":"Mespilus","wordType":"UNINOMIAL","start":12,"end":20}],"id":"d651cd82-9b00-53dd-9d59-6af66ab62046","parserVersion":"test_version"} +```