2013-03-13 92 views
1

我想比較兩個名單和地址列表來查看唯一的數據。我可以很容易地提取出所有這些在兩個列表中都是完全相同的字符串,然後我留下不同的名稱和地址,但可能是同一個人。 即:如何在比較地址的兩個字符串時獲得百分比準確度匹配?

在列表條目1史密斯ĴPh234567 34史密斯ST

在列表條目2史密斯約翰Ph234567 34史密斯ST

或列表1史密斯ĴPh234567 34史密斯路

條目

在列表條目2史密斯ĴPh234567 34史密斯路

我要添加到條目的標籤,似乎彼此相似,比如80%的比賽。因爲他們的每一個字,或字母相匹配(取決於你如何寫它與其他所有單詞或字母串中

嵌套foreach循環不起作用。

對於循環不作爲一個變化ĴVRS工作約翰之後每進入創建錯誤。

我寫它在vb.net,但也可以從C#

回答

9

這種問題一般是通過計算字符串之間的edit distance解決翻譯。先從例如Levenshtein距離。

這會給你一個分數(將一個字符串轉換爲另一個字符串所需的「編輯操作」的數量)。要將其轉換爲百分比標識,您需要將其標準化爲較大字符串的長度(沿線爲percent = (largerString.Length - editDistance)/largerString.Length)。

+1

感謝那正是我所需要的:-)我甚至找到了它的鏈接http://www.dotnetperls.com/levenshtein-vbnet – netchicken 2013-03-13 23:57:45

+0

可以很好,但如果你比較**很多**很慢**項目。這看起來很有趣:http://stevehanov.ca/blog/index.php?id=114 – spender 2013-03-14 00:02:19

+1

@spender有效的實現,但最終你不會低於O(nm)運行時。這可以證明你可以做的漸近最好。當您將** ** **參考與大量實例進行比較時,索引數據結構開始有意義。 – 2013-03-14 00:03:10