2015-01-21 2 views
6

Научное название обычно состоит из трех частей информации: род, вид эпитетон и автор. Простой пример будет следующим:Разделение научных названий

ACANTHUS ilicifolius L.

  • рода: ACANTHUS
  • Видов epitheton: ilicifolious
  • Автор: Л.

Easy. Однако вопрос усложняется, когда мы имеем дело с гибридами, подвидами/разновидностями/формами, несколькими авторами и другими несоответствиями. В этих случаях название вида может выглядеть следующим образом:

ср. Andrographis paniculata (Burm.f.) Стена. ех Nees

  • ср .: вид не был определен со 100% уверенностью
  • рода: Andrographis
  • Видов epitheton: метельчатый
  • Автор: (Burm.f.) стена. ех Nees

этом:

ипомеи ПЭС-caprae (L.) DC. подвид. Brasiliensis (L.) Ooststr.f

  • Род: Ipomea
  • Виды epitheton: ПЭС-caprae
  • Виды Автор: (L.) DC.
  • подвид epitheton: Brasiliensis
  • подвид Автор: (L.) Ooststr.f

Я пытаюсь найти надежный способ деконструировать такие имена. Я мог бы написать какой-то хакерский код, используя тс если if/else, но я ищу что-то более элегантное (и надежное). Я думал о каком-то синтаксическом анализаторе, который анализирует имя подобно калькулятору, анализирующему математическое выражение. К сожалению, я не самый сложный программист, и я даже не написал настоящий парсер раньше, и не знаю, будет ли это иметь смысл в этом случае, поскольку в научных именах существует довольно много вариаций. Как вы думаете, как лучше всего решить эту проблему? Предпочтительным языком является R, возможно, также Julia, если он лучше подходит для этой задачи.

+6

Я бы предложил НЕ пытаться написать синтаксический анализатор для любого биологического типа данных, если только никто не сделал этого раньше. Вы столкнетесь с таким количеством случаев с краями, о которых вы не подумали, когда вы разработали свой парсер. Биологи - это странный вид :) Я бы предложил попробовать найти подходящий парсер, который бы соответствовал вашим потребностям и использовать его вместо того, чтобы изобретать колесо. – cel

+2

Вам нужно будет составить очень точный список правил, которые компьютер мог бы выполнить для анализа этих выражений. Ваши три примера кажутся недостаточными, чтобы полностью определить, как будет работать синтаксический анализ. Мне, как человеку, было бы трудно разобрать их. – MrFlick

ответ

15

Вы в удаче (типа). GBIF имеет name parser, а пакет taxize перехватывает его API с помощью функции gbif_parse.

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 также использует API EOL - см. ?gni_parse.

Смежные вопросы