2014-02-20 20 views
1

我們正在導入第三方應用程序 和 的客戶記錄,同時與另一個接口進行交互,如果找不到客戶匹配,我們正在插入新客戶。查找帶有特殊字符和其他字符的重複記錄

如果沒有找到確切的客戶匹配,則客戶得到重複。

現在有沒有辦法手抖接口兩者之上,並得到正確的客戶

所以現在我們需要開發工具來刪除重複的客戶

有一個人可以請建議這將是最好的實現這一目標的方法。

Levenshtein距離可能是一種選擇?其他?

在性能方面也因爲我們有超過5000個客戶

的例子,我們需要處理的

Customer 1 - abcsÿdesλ 

Customer 2 - abcsfdesd 

Customer 3 - úbcsfdμsd 

以上所有的客戶是相同的,需要合併爲一個。

我們需要給客戶比較像名字,姓氏等

請指教,提前感謝至少5場的基礎。

回答

1

根據這些錯誤發生的方式,LevenshteinSoundex可能是可能的替代方案。 Soundex比較可能的發音,而Levenshtein僅比較字符。

如果由於名字在電話中被寫下來而發生錯誤,那麼發音清楚但拼寫不清晰,那麼Soundex可能是一個選項。如果由於拼寫錯誤,無法讀取的郵件或錯誤的OCR而導致拼寫錯誤,則Soundex基本上毫無價值,Levenshtein非常適合。

所有的比較例程都會返回一個輸入值相似程度的值。您需要兩個閾值,一個用於整個記錄,另一個用於每個字段。您希望整個記錄(所有字段的總和)低於某個值,您希望每個字段都低於某個值。

有時您可能想要爲這些數字引入特殊含義或具有字段依賴性。例如:如果你有性別或稱呼,如果這些匹配,名字上的匹配可以不那麼嚴格。如果性/稱呼不匹配,最好對名字嚴格一些,因爲即使是一封信也可以分隔兩個明顯不同的人。想想馬里奧和瑪麗亞還是安傑洛和安吉拉。你不想讓安吉洛先生和安吉拉太太成爲同一個人。這很難解釋。

最後但並非最不重要的是,5000條記錄不算什麼。如果你把它放在一個數據庫中,你可以循環比較所有5000到你的輸入記錄。

如果你將來有更多的記錄,你需要一個字段,你非常確定只選擇幾條記錄進行比較是正確的。例如,郵政編碼通常在電話中詳細說明,結構良好,因此很少會出現錯誤。從數據庫中選擇所有具有相同郵政編碼或相似可能正確字段的記錄,以減少必須與之比較的記錄數量。

+0

感謝您的反饋 但有大約5000條記錄比較1場4999次需要大約3分鐘,這意味着與5個領域需要15分鐘。 任何改善性能的選項。 –

+1

@KeshavdasM如果這是一次性操作,15分鐘聽起來不是很長時間。您絕對不應該在需要定期反覆執行此操作的情況下創建解決方案。完成一次,將結果放入一個新的數據庫中,然後僅使用該數據庫。另外,還有一件事:如果您可以通過除名字之外的其他信息對您的記錄進行分組,也許您只能依靠組內的比較來進行比較?這可能會顯着減少比較次數... – Kjartan

+0

謝謝,正是這樣做,將濾波器應用於其他參數,最後使用Levenshtein算法精確地找到匹配 –