1
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. Sock 和 Mouse vs. House),我得到相同的距离。到目前为止,一切都很好。但是现在我想在语义级别上匹配单词。在第一个比较(Socks 与 Sock)中,区别仅在于复数与单数。我会把这算作一场比赛。然而,在第二个比较(Mouse vs. House)中,这两个词的含义不同。我不想把这算作一场比赛。有什么建议我可以添加另一列(例如,“匹配”),在第一行(对于 Socks 与 Sock)和 FALSE 在第二行(对于 Mouse vs. House)中我将具有 TRUE?

有没有办法表明我想忽略后缀?考虑类似于“ignore_case = TRUE”的东西(见代码)

我有一个带有德语单词的长数据集。我更喜欢不需要使用字典的解决方案(即适用于更多用例的解决方案)。但是,如果没有办法解决它,我将不胜感激有关如何使用德语词典解决我的问题的详细信息。

4

1 回答 1

0

stringdist_fuzzy_join method = "soundex" 可能会有所帮助。不同的方法有不同的距离,然后你可以设置一个最大距离(但很难在所有情况下都得到完美的匹配)。

您可能会发现这也很有帮助: https ://cran.r-project.org/web/packages/fuzzyjoin/vignettes/stringdist_join.html

于 2020-10-20T07:24:29.730 回答