2015-01-21 1 views
6

과학적인 이름은 일반적으로 3 종의 정보로 구성됩니다 : 속 (genus), 종 에피 엣 톤 (etestheton) 및 저자. L. ilicifolius과학적인 이름 쪼개기

  • 잔잔한을 : 잔잔한

  • 종 epitheton : ilicifolious
  • 저자 : L.

쉬운 간단한 예는 다음이 될 것입니다. 그러나이 문제는 하이브리드, 아종/품종/형식, 여러 저자 및 기타 불일치를 다루어야 할 때 더욱 복잡해집니다. 이 경우 종명은 다음과 같습니다.

cf. Andrographis paniculata (Burm.f.) 벽. Andrographis

  • 종 epitheton : 예에 Nees

    • CF : 종은 100 % 확실하게
    • 속을 결정하지 않은 쿨라 타로
    • 저자 : (Burm.f.) 벽. 예에 Nees

    하거나 :

    나팔꽃 PES-caprae (L.) DC. subsp. 의 brasiliensis (L.) Ooststr.f

    • 속 : Ipomea
    • 종 epitheton : PES-caprae
    • 종 저자 : (L.) DC.
    • 아종 epitheton :의 brasiliensis
    • 아종 저자 : (L.)

  • Ooststr.f 나는 그런 이름을 해체 할 수있는 신뢰할 수있는 방법을 찾기 위해 노력하고있어. if/else 문을 사용하면 tack을 사용하여 일부 hackish 코드를 작성할 수 있지만 좀 더 우아하고 견고한 것을 찾고 있습니다. 수학적 표현을 분석하는 계산기와 비슷한 이름을 파싱하는 일종의 파서를 생각하고있었습니다. 불행히도, 나는 가장 정교한 프로그래머가 아니며 전에 실제 파서를 작성하지도 않았으며 과학적 이름에 많은 변화가 있었기 때문에이 경우에는 의미가 있는지 알 수 없었습니다. 이 문제를 해결하는 가장 좋은 방법은 무엇이라고 생각하십니까? 선호 언어는 R이며, 아마도 Julia가 더 잘 맞는 경우에는 Julia 일 수도 있습니다.

    +6

    전 생물학 데이터 유형에 대해 파서를 쓰지 않으려면 아무도 그렇게하지 않는 것이 좋습니다. 당신은 매우 많은 엣지 경우를 만날 것이고 파서를 디자인 할 때 생각하지 않았을 것입니다. 생물 학자들은 이상한 종입니다. 나는 당신의 필요에 맞는 적절한 파서를 찾고 휠을 재발 명하는 대신에 사용하려고 제안합니다. – cel

    +2

    컴퓨터가 이러한 표현식을 구문 분석 할 수있는 아주 정확한 규칙 목록을 제시해야합니다. 세 가지 예제는 파싱이 어떻게 작동하는지 완전히 정의하기에는 부족합니다. 나는 인간으로서 그들을 파싱하는데 어려움을 겪을 것이다. – MrFlick

    답변

    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 참조).