2010-05-16 18 views
1

我正在研究地址簿同步算法。我想重用一些代碼,如果存在,但還找不到。比較人名以檢測相同性的算法

有人知道算法,會告訴我在數字/浮動/ procent兩個名字是相同的。 Levenstein距離在這種方法中並不好,因爲名稱和我們的地址書籍與每個名稱部分的開頭都相匹配。

John Smith應符合
Smith JonJonathan SmithJohnny Smith

回答

1

也看看Jaro Winkler算法。這對名字有好處。 http://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance

如果你有第一個名字,姓氏問題,那麼你可以只對它們進行排序,以確保史密斯約翰保存爲約翰·史密斯

+0

我選擇這個答案,因爲你直接指向算法雖然另一響應早先提交了同一個網站的鏈接。 – Pentium10 2010-05-17 06:45:42

2

你應該看的字符串比較算法,如萊文斯坦或史密斯 - 沃特曼。這裏是a great library讓你開始吧

1

對於名字,我想出了一個類似於metaphone的算法。

您還需要一些邏輯來將字符串分解成姓,名,標題等。它可能會變得複雜。

有邊緣情況。如果某人有「教授」這個頭銜,那麼您不希望將其解釋爲名字。如果他們在開始時有「主」,可能是他們的名字(很多人稱爲主)或他們的頭銜。等等。如果你的名字已經在標準格式中,那麼你最好知道他們的姓氏,名字和頭銜。

我寫了一些PHP代碼來做到這一點:請參閱name(請參閱similarityto()函數),textfuzzy,probability