2011-05-18 71 views
26

我有一堆名字,我想獲得唯一的名字。但是,由於拼寫錯誤和數據中的不一致性,名稱可能會寫錯。我正在尋找一種方法來檢查字符串的向量,如果其中兩個是相似的。如何衡量字符串之間的相似性?

例如:

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

我想找到" Obama, B.""Obama, B.H."非常相似。有沒有辦法做到這一點?

回答

29

這可以基於例如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 
16

也許agrep是wha你想要嗎?它使用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." 
相關問題