匹配带有缩写的字符串;模糊匹配
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 -> ceo 和 principl -> 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
我无法匹配字符串。大部分难度集中在缩写
我有两个字符向量。我正在尝试将向量 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 -> ceo 和 principl -> 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