拆分学名
Splitting scientific names
一个学名通常由3个信息组成:属、种名和作者。一个简单的例子如下:
板栗叶 L.
- 属:老鼠属
- 物种名称:icifolious
- 作者:L.
简单。然而,当我们不得不处理混合体、subspecies/varieties/forma、多位作者和其他不一致时,事情就变得更加复杂了。在这些情况下,物种名称可能如下所示:
比照。 穿心莲 (Burm.f.) 墙。前任
- cf.: 没有 100% 确定物种
- 属:穿心莲
- 物种名称:paniculata
- 作者:(Burm.f.)墙。前任
或者这个:
Ipomoea pes-caprae (L.) DC。亚种巴西人 (L.) Ooststr.f
- 属:番薯属
- 物种名称:pes-caprae
- 物种作者:(L.) DC.
- 亚种名称:brasiliensis
- 亚种作者:(L.)Ooststr.f
我正试图找到一种可靠的方法来解构这些名称。我可以使用 tons if if/else 语句编写一些 hackish 代码,但我正在寻找更优雅(和健壮)的东西。我在考虑某种解析器,它解析名称的方式类似于解析数学表达式的计算器。不幸的是,我不是最老练的程序员,我之前也没有写过真正的解析器,我也不知道在这种情况下它是否有意义,因为科学名称有很多变化。您认为解决这个问题的最佳方法是什么?首选语言是 R,如果它更适合任务,也可能是 Julia。
你很幸运(有点)。 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
.
一个学名通常由3个信息组成:属、种名和作者。一个简单的例子如下:
板栗叶 L.
- 属:老鼠属
- 物种名称:icifolious
- 作者:L.
简单。然而,当我们不得不处理混合体、subspecies/varieties/forma、多位作者和其他不一致时,事情就变得更加复杂了。在这些情况下,物种名称可能如下所示:
比照。 穿心莲 (Burm.f.) 墙。前任
- cf.: 没有 100% 确定物种
- 属:穿心莲
- 物种名称:paniculata
- 作者:(Burm.f.)墙。前任
或者这个:
Ipomoea pes-caprae (L.) DC。亚种巴西人 (L.) Ooststr.f
- 属:番薯属
- 物种名称:pes-caprae
- 物种作者:(L.) DC.
- 亚种名称:brasiliensis
- 亚种作者:(L.)Ooststr.f
我正试图找到一种可靠的方法来解构这些名称。我可以使用 tons if if/else 语句编写一些 hackish 代码,但我正在寻找更优雅(和健壮)的东西。我在考虑某种解析器,它解析名称的方式类似于解析数学表达式的计算器。不幸的是,我不是最老练的程序员,我之前也没有写过真正的解析器,我也不知道在这种情况下它是否有意义,因为科学名称有很多变化。您认为解决这个问题的最佳方法是什么?首选语言是 R,如果它更适合任务,也可能是 Julia。
你很幸运(有点)。 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
.