Для моей проблемы с аналитикой данных мне обычно нужно регулировать имена, которые называют A и B, я бы считал их одинаковыми или очень похожими, если A и B имеют значительное количество общих подстрок, независимо от порядка этих подстрок.
Например, для "ХОЛОД" и c("НАПОЛНЕНИЕ", "ХОЛОД/ХОЛОД ВЕТЕРОМ") я бы хотел выбрать "ХОЛОД/ХОЛОД ВЕТЕРОМ", чтобы оно было больше похоже на "ХОЛОД", чем на "НАВОДНЕНИЕ".
Мое текущее задание находится в R. Итак, мои конкретные вопросы заключаются в следующем:
Существуют ли такие метрики, уже определенные в R?
Можно ли предоставить свою собственную реализацию и как-то интегрировать ее с пакетом R stringdist?
Для моего требования я мог бы просто использовать поиск по регулярному выражению, если бы я мог найти A в B или B в A, я могу просто считать их расстояние равным 0.
Большое спасибо!
Редактировать:
В контексте следующего:
> vv <- c("FLOOD", "COLD/WIND CHILL")
> sapply(vv, adist, y = "COLD")
FLOOD COLD/WIND CHILL
3 11
Я бы хотел, чтобы расстояние от "ХОЛОД" до "ХОЛОД/ВЕТЕР ХОЛОД" было бы меньше, чем от "ХОЛОД" до "НАПОЛНЕНИЕ".
Кажется, что метрика должна игнорировать оставшуюся часть, которая будет удалена после нахождения совпадающей подстроки.
Редактировать1:
Моя первоначальная проблема была решена. Вот продолжение со связанной проблемой использования amatch
из stringdist
в R:
Мне кажется, что я не смог воспроизвести эквивалентный результат тех, что с adist
, и даже stringdist
в одном пакете с amatch
.
Ниже приведена иллюстрация:
vv <- c("FLOOD", "COLD/WIND CHILL")
sapply(vv, adist, y = "COLD",costs=list(deletions=0))
FLOOD COLD/WIND CHILL
2 0
stringdist("COLD", c("FLOOD", " COLD/WIND CHILL"), method = 'lv', weight=c(0.001, 0.99, 0.99, 0.99))
[1] 1.981 1.002
amatch("COLD", c("FLOOD", " COLD/WIND CHILL"), method = 'lv', weight=c(0.0001, 0.999, 0.999, 0.999), maxDist = 100)
[1] 1
В приведенном выше контексте, используя вычисление stringdist
, amatch
должно возвращать 2
вместо 1
.
На основании документа stringdist,
"вес:
Для метода = 'osa' или 'dl' штраф за удаление, вставку, замену и транспонирование в указанном порядке. Если метод = 'lv', штраф за транспонирование игнорируется."
Я выбрал веса соответственно, чтобы убрать штраф за удаление и максимизировать штраф к другим операциям. Обнадеживает то, что stringdist
показывает ожидаемое поведение с настройкой весов.
Я бы предположил, что amatch
будет использовать stringdist
для выполнения вычислений, но кажется странным, что поведение amatch
противоречит поведению stringdist
!
Я хочу, чтобы amatch
работало, чтобы мне не приходилось повторно реализовывать его, используя adist
или stringdist
.
Спасибо за помощь еще раз.