#r #fuzzyjoin
#r #fuzzyjoin
Вопрос:
library(dplyr)
library(fuzzyjoin)
df1 <- data.frame(x = c("Socks", "Mouse"))
df2 <- data.frame(y = c("Sock", "House"))
stringdist_left_join(df1, df2,
by = c(x = "y"),
max_dist = 1,
ignore_case = TRUE,
distance_col = "distance")
вывод:
x y distance
1 Socks Sock 1
2 Mouse House 1
Для обоих сравнений (Socks vs. Носок и мышь против Дом) Я получаю одинаковое расстояние. Пока все хорошо. Но теперь я хочу сопоставить слова на семантическом уровне. В первом сравнении (Socks vs. Sock) разница заключается только во множественном числе по сравнению с единственным. И я бы посчитал это совпадением. Однако во втором сравнении (мышь против House) значение двух слов различается. Я не хочу считать это совпадением. Есть предложения, как я мог бы добавить еще один столбец (например, «match»), где у меня было бы значение TRUE в первой строке (для Socks против Sock) и FALSE во второй строке (для мыши против Дом)?
Есть ли способ указать, что я хочу игнорировать суффиксы? Думаю о чем-то похожем на «ignore_case = TRUE» (см. Код)
У меня длинный набор данных с немецкими словами. Я бы предпочел решение, которое не требует использования словарей (т. Е. решение, применимое к большему количеству вариантов использования). Однако, если нет никакого способа обойти это, я был бы признателен за подробную информацию о том, как использовать немецкий словарь для моей проблемы.
Комментарии:
1. То, что вы описываете в своем примере с носками, называется stemming . Идея состояла бы в том, чтобы сначала выделить слова, а затем соединить их, используя нечеткое соединение. Примером пакета является corpus (я никогда им не пользовался, но, похоже, он делает то, что вы хотите).
2. @Bas, спасибо тебе! Ваше предложение действительно решило эту конкретную проблему.
Ответ №1:
метод stringdist_fuzzy_join = «soundex» может помочь. Разные методы имеют разные расстояния, и тогда вы можете установить максимальное расстояние (но будет сложно получить идеальные соответствия для всех случаев).
Это тоже может оказаться полезным для вас: https://cran.r-project.org/web/packages/fuzzyjoin/vignettes/stringdist_join.html