一个简单的Taxon Parser:将输入的字符串按照属种作者分开

处理生物学名时经常需要将学名按照意义分成几个部分, 如

  1. GENUS 属名
  2. SPECIES 种加词
  3. AUTHOR_OF_SPECIES 作者
  4. INFRASPECIFIC_RANK 种下等级
  5. INFRASPECIFIC_EPITHET 种下等级加词
  6. AUTHOR_OF_INFRASPECIFIC_RANK 种下等级作者
    例如, 太白深灰槭的学名是:
    Acer caesium Wall. ex Brandis subsp. giraldii (Pax) E. Murr.

按照各部分的含义分开,应该是:

  • 属名 GENUS: “Acer”
  • 种加词 SPECIES: “caesium”
  • 种作者 AUTHOR_OF_SPECIES: “Wall. ex Brandis”
  • 属下等级 INFRASPECIFIC_RANK: “subsp.”
  • 属下等级加词 INFRASPECIFIC_EPITHET: “giraldii”
  • 属下等级作者 AUTHOR_OF_INFRASPECIFIC_RANK: “(Pax) E. Murr.”

物种的学名的拼写有以下几种情况

  1. 只给出属名
  2. 只给出属名和sp.
  3. 给出属名和种名, 但是未提供作者
  4. 给出属名, 种加词和作者
  5. 给出属名, 种加词, 作者, 种下等级(var.或subsp.,或f.), 种下等级加词, 种下等级作者
  6. 给出属名, 种加词, 种下等级(var.或subsp.,或f.), 种下等级加词, 种下等级作者
  7. 给出属名, 种加词, 种下等级(var.或subsp.,或f.), 种下等级加词
  8. 相应的程序必须考虑到以上各种情况, 并将其正确分开。

herblabel (https://github.com/helixcn/herblabel ) R 程序包提供了一个简单的生物学名处理的函数

parse_taxa(), 经过测试,在以上提到的各种情况, 均工作正常。 由于 种下等级 f. 也常用于人名, 故本程序未加入处理f.的部分。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
library(herblabel)
### Species
parse_taxa("Acer")
parse_taxa("Acer caudatifoliumHayata")
parse_taxa("Acer caudatifolium")
parse_taxa("Acer sp.")
### variaty
parse_taxa("Acer caudatum Wall. var.multiserratum (Maxim.) Rehd.")
parse_taxa("Acer caudatum var.multiserratum (Maxim.) Rehd.")
parse_taxa("Acer caudatum Wall. var.multiserratum")
parse_taxa("Acer caudatum var. multiserratum")
### subspecies
parse_taxa("Acer caesium Wall. exBrandis subsp. giraldii (Pax) E. Murr.")
parse_taxa("Acer caesium subsp.giraldii (Pax) E. Murr.")
parse_taxa("Acer caesium Wall. exBrandis subsp. giraldii")
parse_taxa("Acer caesium subsp.giraldii")