我有一堆名字,我想获得唯一的名字。但是,由于拼写错误和数据不一致,名称可能会写错。我正在寻找一种方法来检查字符串 vector 中是否有两个是相似的。

例如:

pres <- c(" Obama, B.","Bush, G.W.","Obama, B.H.","Clinton, W.J.")

我想发现" Obama, B.""Obama, B.H."非常相似。有没有办法做到这一点?

最佳答案

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

  • agrep: only return best match(es)
  • In R, how do I replace a string that contains a certain pattern with another string?
  • Fast Levenshtein distance in R?

  • 但是,大多数时候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
    

    07-26 06:00