Как уже упоминалось @ G5W, задача требует ввода данных пользователем. Вот пример того, как это можно сделать
# we have here pre-defined choices: any match must out of 'animals'
animals <- c('cat','dog','mouse')
# here is the text we want to match
text <- c('cats', 'cuts', 'dogs', 'dawg', 'frog', 'lion')
# now we use the string distance metric
# via the package stringdist & using metric 'jw'
# c.f. ?stringdist::stringdist
vapply(seq_along(text),
function (k) animals[which.min(stringdist::stringdist(text[k], animals, 'jw'))],
character(1))
# [1] "cat" "cat" "dog" "dog" "dog" "dog"
Обратите внимание, что, например, lion
соответствует dog
, так как это наиболее близкое соответствие.
Чтобы дополнительно проиллюстрировать замечания, сделанные в разделе комментариев, рассмотрим следующее
stringdist::stringdist('cts', c('cats','cuts'), 'jw')
# [1] 0.08333333 0.08333333
Слово cts
равноудалено от cats
и cuts
. Предположим, что два слова содержатся в соответствующей таблице animals
, тогда в этом случае which.min
вернет (по умолчанию) первый экземпляр минимального значения, поэтому мы получим cats
.
Вы видите, как это может оказаться проблематичным: предположим, cts
должно было быть cuts
, приведенное выше приведет к ложному значению.