匹配带有缩写的字符串;模糊匹配

Matching strings with abbreviations; fuzzy matching

我无法匹配字符串。大部分难度集中在缩写

我有两个字符向量。我正在尝试将向量 A 中的单词(拼写错误)与向量 B 中的结束匹配进行匹配。

vec.a <- c("ce", "amer", "principl")

vec.b <- c("ceo", "american", "principal")

我的第一个破解方法是使用 stringdist 包模糊匹配命令。但是,我只能推到这里了。

amatch(vec.a, vec.b, maxDist = 3)
[1] 1 1 3

amatch/fuzzy 匹配非常适合拼写错误:在本例中,ce -> ceoprincipl -> principal .问题出现在缩写词中。 amer 应该与 american 匹配,但 ce 是更接近的匹配——因为排列较少需要匹配。 出现缩写时如何处理模糊匹配?

也许 agrep 就是问题所在。

vec.a <- c("ce", "amer", "principl")
vec.b <- c("ceo", "american", "principal")

sapply(vec.a, \(x){
    out <- agrep(x, vec.b)
    ifelse(length(out) > 0L, out, 0L)
})
#>       ce     amer principl 
#>        1        2        3

reprex package (v2.0.1)

创建于 2022-03-07

将差异度量更改为 Jaro 距离或 Jaro-Winkler distance 适用于您问题中提供的示例。

library(stringdist)

vec.a <- c("ce", "amer", "principl")
vec.b <- c("ceo", "american", "principal")

amatch(vec.a, vec.b, maxDist = 1, method = "jw", p = 0) # Jaro
#> [1] 1 2 3
amatch(vec.a, vec.b, maxDist = 1, method = "jw", p = .2) # Jaro-Winkler
#> [1] 1 2 3