如何通过语义匹配两个字符串?

问题描述

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