如何衡量字符串之间的相似性?

Sac*_*amp 28 regex string r r-faq

我有一堆名字,我想获得独特的名字.但是,由于拼写错误和数据不一致,名称可能写错了.我正在寻找一种方法来检查字符串向量,如果其中两个是similair.

例如:

pres <- c(" Obama, B.","Bush, G.W.","Obama, B.H.","Clinton, W.J.")
Run Code Online (Sandbox Code Playgroud)

我想找到它" Obama, B."并且"Obama, B.H."非常相似.有没有办法做到这一点?

Jor*_*eys 30

这可以基于例如Levenshtein距离来完成.在不同的包中有多种实现方式.在这些问题的答案中可以找到一些解决方案和包:

但大多数情况下agrep会做你想做的事:

> sapply(pres,agrep,pres)
$` Obama, B.`
[1] 1 3

$`Bush, G.W.`
[1] 2

$`Obama, B.H.`
[1] 1 3

$`Clinton, W.J.`
[1] 4
Run Code Online (Sandbox Code Playgroud)


Cha*_*ase 17

也许agrep是你想要的?它使用Levenshtein编辑距离搜索近似匹配.

lapply(pres, agrep, pres, value = TRUE)

[[1]]
[1] " Obama, B."  "Obama, B.H."

[[2]]
[1] "Bush, G.W."

[[3]]
[1] " Obama, B."  "Obama, B.H."

[[4]]
[1] "Clinton, W.J."
Run Code Online (Sandbox Code Playgroud)