我有一堆名字,我想獲得唯一的名字。但是,由於拼寫錯誤和數據中的不一致性,名稱可能會寫錯。我正在尋找一種方法來檢查字符串的向量,如果其中兩個是相似的。如何衡量字符串之間的相似性?
例如:
pres <- c(" Obama, B.","Bush, G.W.","Obama, B.H.","Clinton, W.J.")
我想找到" Obama, B."
和"Obama, B.H."
非常相似。有沒有辦法做到這一點?
我有一堆名字,我想獲得唯一的名字。但是,由於拼寫錯誤和數據中的不一致性,名稱可能會寫錯。我正在尋找一種方法來檢查字符串的向量,如果其中兩個是相似的。如何衡量字符串之間的相似性?
例如:
pres <- c(" Obama, B.","Bush, G.W.","Obama, B.H.","Clinton, W.J.")
我想找到" Obama, B."
和"Obama, B.H."
非常相似。有沒有辦法做到這一點?
這可以基於例如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
也許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."