问题描述
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与Sock),差异仅在于复数与单数。我认为这是一场比赛。但是,在第二个比较(鼠标与房屋)中,两个词的含义不同。我不想将其视为匹配项。关于如何添加其他列(例如“匹配”)的任何建议,在第一行中(对于袜子与袜子)我将具有TRUE,在第二行中(对于鼠标与房屋而言)我将具有FALSE?
是否有一种方法可以表明我想忽略后缀?考虑类似于“ ignore_case = TRUE”的内容(请参见代码)
我有一个很长的包含德语单词的数据集。我希望不要求使用字典的解决方案(即适用于更多用例的解决方案)。但是,如果没有解决的办法,我将很高兴提供有关如何使用德语词典解决问题的详细信息。
解决方法
stringdist_fuzzy_join方法=“ soundex”可能会有所帮助。不同的方法具有不同的距离,然后您可以设置最大距离(但是很难在所有情况下都获得完美的匹配)。
您可能也会发现这很有帮助: https://cran.r-project.org/web/packages/fuzzyjoin/vignettes/stringdist_join.html