科学名称通常由3条信息组成:属,种上皮和作者。一个简单的例子如下:
Acanthus ilicifolius L。
易。然而,当我们必须处理杂交种,亚种/品种/形态,几个作者和其他不一致时,问题变得更加复杂。在这些情况下,物种名称可能如下所示:
比照 Andrographis paniculata (Burm.f.)Wall。前尼斯
或者这个:
Ipomoea pes-caprae(L.)DC。亚种。 brasiliensis(L.)Ooststr.f我试图找到解构这些名字的可靠方法。如果if / else语句我可以使用吨写一些hackish代码,但我正在寻找更优雅(和健壮)的东西。我想的是某种解析器的名称类似于解析数学表达式的计算器。不幸的是,我不是最复杂的程序员,我之前也没有写过真正的解析器,也不知道在这种情况下它是否有意义,因为科学名称有很多变化。你认为解决这个问题的最佳方法是什么?首选语言是R,如果它更适合任务,也许也是Julia。
答案 0 :(得分:15)
你很幸运(有点)。 GBIF有name parser,taxize
包与gbif_parse
函数挂钩到其API。
library(taxize)
gbif_parse(c('Acanthus ilicifolius L.',
'cf. Andrographis paniculata (Burm.f.) Wall. ex Nees',
'Ipomoea pes-caprae (L.) DC. subsp. brasiliensis (L.) Ooststr.f'))
# scientificname type genusorabove specificepithet authorsparsed authorship canonicalname canonicalnamewithmarker canonicalnamecomplete bracketauthorship infraspecificepithet rankmarker
# 1 Acanthus ilicifolius L. WELLFORMED Acanthus ilicifolius TRUE L. Acanthus ilicifolius Acanthus ilicifolius Acanthus ilicifolius L. <NA> <NA> <NA>
# 2 cf. Andrographis paniculata (Burm.f.) Wall. ex Nees INFORMAL Andrographis paniculata TRUE Wall. ex Nees Andrographis paniculata Andrographis paniculata Andrographis paniculata (Burm. f.) Wall. ex Nees Burm. f. <NA> <NA>
# 3 Ipomoea pes-caprae (L.) DC. subsp. brasiliensis (L.) Ooststr.f SCINAME Ipomoea pes-caprae TRUE Ooststr.f Ipomoea pes-caprae brasiliensis Ipomoea pes-caprae subsp. brasiliensis Ipomoea pes-caprae subsp. brasiliensis (L.) Ooststr.f L. brasiliensis subsp.
有关详细信息,请参阅?gbif_parse
。您还可以找到GBIF on github。
taxize
也可以利用EOL API - 请参阅?gni_parse
。