The Kew Names Matching Service (KNMS) allows a user to submit taxon names for matching against records in Plants of the World Online (POWO). As far as I can tell, it uses exact matching as well as some rules-based matching to account for common orthographic variants and Latin mistakes.
The website provides interfaces for submitting a list of names copied into a text field, as well as through a CSV upload. I’ve made this package interface with the text field submission.
I’m not sure if KNMS is being maintained or updated at the moment, and may point towards an old version of POWO/WCVP. Therefore, it’s a good first pass for matching the bulk of names but it’s worth checking through any unmatched names, as they may be in POWO or WCVP.
To use KNMS, you just need to submit names for matching as a character vector or list.
matches <- match_knms("Poa annua")
matches
#> <KNMS match: 1 names submitted>
#> Matches returned: 0
#> Multiple matches: 1
#> Unmatched names: 0
#> List of 1
#> $ :List of 4
#> ..$ : chr "Poa annua"
#> ..$ : chr "multiple_matches"
#> ..$ : chr "urn:lsid:ipni.org:names:416502-1"
#> ..$ : chr "Poa annua Linnaea 6: 38 (1831) Schltdl. & Cham. 1831"
Where a name could be matched with multiple records - for example, if the same name has been published as different concepts - KNMS will return multiple matches, as it has here.
The raw results from KNMS can be a bit difficult to interpret, so it is best to tidy
them for inspection.
tidy(matches)
#> # A tibble: 2 × 4
#> submitted matched ipni_id matched_record
#> <chr> <lgl> <chr> <chr>
#> 1 Poa annua TRUE 416502-1 Poa annua Linnaea 6: 38 (1831) Schltdl. & Cham. 18…
#> 2 Poa annua TRUE 320035-2 Poa annua Sp. Pl.: 68 (1753) L. 1753
We can see here that Poa annua
has matched to both Poa annua L. and Poa annua Schltdl. & Cham..
To avoid having to resolve these multiple matches, it is usually best to submit the author string as part of the name, if it is available.
matches <- match_knms("Poa annua L.")
tidy(matches)
#> # A tibble: 1 × 4
#> submitted matched ipni_id matched_record
#> <chr> <lgl> <chr> <chr>
#> 1 Poa annua L. TRUE 320035-2 Poa annua Sp. Pl.: 68 (1753) L. 1753
Multiple names can be submitted at once, as a list or character vector.
names_to_match <- c("Poa annua L.", "Myrcia guianensis", "Bulbophyllum sp.")
matches <- match_knms(names_to_match)
tidy(matches)
#> # A tibble: 3 × 4
#> submitted matched ipni_id matched_record
#> <chr> <lgl> <chr> <chr>
#> 1 Poa annua L. TRUE 320035-2 Poa annua Sp. Pl.: 68 (1753) L. 1753
#> 2 Myrcia guianensis TRUE 598851-1 Myrcia guianensis Prodr. 3: 245 (1828) (Au…
#> 3 Bulbophyllum sp. TRUE 325894-2 Bulbophyllum Hist. Orchid.: t. 3 (1822) Th…
KNMS may not always match to the rank that you want. For instance, in the previous example Bulbophyllum sp. was matched to the genus name Bulbophyllum, rather than returning no match at all.
KNMS will accept a large number of names for matching, but may hang if too many are submitted. The match_knms
function will return a warning if you submit more than 1000 names. In these cases, it might be easier to split your list of names into chunks, or use the CSV upload on the KNMS website.