使用缩写匹配字符串;模糊匹配

4

我在匹配字符字符串时遇到了麻烦,主要是缩写的问题。

我有两个字符向量。我试图将向量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/模糊匹配效果很好:此时ce -> ceoprincipl -> principal。但缩写词会带来问题,amer应该与american匹配,但由于需要更少的排列组合才能匹配,ce成为更接近的匹配结果。

在存在缩写词的情况下如何处理模糊匹配?

2个回答

1
也许问题所需的是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

本文创建于2022-03-07,使用reprex软件包(v2.0.1)


1
更改相似度度量标准为Jaro距离或Jaro-Winkler距离,对您提出的问题示例有效。
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

这个很好用,谢谢。不过当我尝试将我的数据放进去,只有55%的数据匹配成功,其余的都是NA。我知道应该有更多的匹配。有没有办法让这些匹配数字再高一些? - YouLocalRUser
不知道你的数据是什么样子,很难说。你能否在问题中添加一些失败的案例? - Till

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接