【问题标题】:Fuzzyjoin / stringdist_join weight for capitalisatoin (case) mismatch (stringdist)大写字母(大小写)不匹配(stringdist)的 Fuzzyjoin / stringdist_join 权重
【发布时间】:2020-12-31 21:27:39
【问题描述】:

与 R 合作,我正在寻找在 string_dist_left_join() 中加权大小写(即大写与小写)的方法

这是一个可重现的例子:

library(tidyverse)
library(fuzzyjoin)

tibble1 <- tibble(words = c("Bedford", "Maidenhead", "New Forest", "Tier 3", "Citizenship", "Crown"))

tibble2 <- tibble(words = c("bedfords", "bedsford", "BEDFord", "Maidenshead", "Maidenhed", "News forest", "Tier 3", "Citisenships", "crowned", "crows"))

osa <- stringdist_left_join(tibble1, tibble2, distance_col = "distance", max_dist = 5, method = "osa", weight = c(d = 0.1, i = 0.1, s = 1, t = 1))

上面是在几个 tibbles 上重现以模糊连接为动力的 stringsidt_left_join 的代码。输出如下所示:

# A tibble: 55 x 3
   words.x words.y      distance
   <chr>   <chr>           <dbl>
 1 Bedford bedfords        0.3  
 2 Bedford bedsford        0.3  
 3 Bedford BEDFord         0.6  
 4 Bedford Maidenshead     1.4  
 5 Bedford Maidenhed       1.2  
 6 Bedford News forest     1.00 
 7 Bedford Tier 3          0.900
 8 Bedford Citisenships    1.7  
 9 Bedford crowned         1.00 
10 Bedford crows           1.00 
# … with 45 more rows

我希望通过某种方式来衡量大小写,例如,将贝德福德与 BEDford 进行比较:我希望这是比贝德福德与贝德福德更差的匹配,但比贝德福德更好贝德福德到贝德s福德。 ignore_case = TRUE 选项将 BEDford 视为与 Bedford 的完美匹配。

我喜欢fuzzyjoin 包,而且我刚刚发现了可以为每个删除、插入、替换和易位传递给stringdist 的自定义权重。这太棒了;可玩的玩具,可调整的参数。

我还想做的是调整大小写(大写?)匹配。我可以在 stringdist_left_join 中选择ignore_case = TRUE,(实际上,权重大小写为 0 或 1),但作为我讨厌的 cur,我想在 0 和 1 之间调整权重。

有谁知道我在某处缺少的选项吗?

或者答案是:艰难地去做?我想可能会有很长的路要走,涉及比较运行tolower() 之前和之后的距离或计算比较ignore_case = TRUEignore_case = FALSE 的加权距离,但是有谁知道我可以使用的更优雅的方法或包这样做?

谢谢

【问题讨论】:

  • 您是否尝试过更改method,即method = "soundex"
  • @arkrun,是的,我已经对所有可用的方法进行了采样,没有权重。 Soundex 与 Beford 完美匹配 Bedford 和 BEDford(0 距离)。

标签: r stringdist fuzzyjoin


【解决方案1】:

您可以运行两次,一次使用ignore_case = TRUE,一次使用FALSE,然后找到这两个距离的适当线性组合。

lambda * (distance_FALSE - distance_TRUE) + distance_TRUE 之类的东西,lambda 表示您对大小写差异的关心程度远低于其他字符串差异。

【讨论】:

  • 谢谢,是的,我认为代替现成的功能将是一个很好的策略。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多