我正在研究地址簿同步算法。我想重用一些代碼,如果存在,但還找不到。比較人名以檢測相同性的算法
有人知道算法,會告訴我在數字/浮動/ procent兩個名字是相同的。 Levenstein距離在這種方法中並不好,因爲名稱和我們的地址書籍與每個名稱部分的開頭都相匹配。
John Smith
應符合
Smith Jon
,Jonathan Smith
,Johnny Smith
我正在研究地址簿同步算法。我想重用一些代碼,如果存在,但還找不到。比較人名以檢測相同性的算法
有人知道算法,會告訴我在數字/浮動/ procent兩個名字是相同的。 Levenstein距離在這種方法中並不好,因爲名稱和我們的地址書籍與每個名稱部分的開頭都相匹配。
John Smith
應符合
Smith Jon
,Jonathan Smith
,Johnny Smith
也看看Jaro Winkler算法。這對名字有好處。 http://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance
如果你有第一個名字,姓氏問題,那麼你可以只對它們進行排序,以確保史密斯約翰保存爲約翰·史密斯
要真正獲得這些種情況,你可能需要一個別名錶,但我想探測法將讓你關閉。
http://commons.apache.org/codec/apidocs/org/apache/commons/codec/language/Soundex.html
你應該看的字符串比較算法,如萊文斯坦或史密斯 - 沃特曼。這裏是a great library讓你開始吧
對於名字,我想出了一個類似於metaphone的算法。
您還需要一些邏輯來將字符串分解成姓,名,標題等。它可能會變得複雜。
有邊緣情況。如果某人有「教授」這個頭銜,那麼您不希望將其解釋爲名字。如果他們在開始時有「主」,可能是他們的名字(很多人稱爲主)或他們的頭銜。等等。如果你的名字已經在標準格式中,那麼你最好知道他們的姓氏,名字和頭銜。
我寫了一些PHP代碼來做到這一點:請參閱name(請參閱similarityto()函數),textfuzzy,probability。
我選擇這個答案,因爲你直接指向算法雖然另一響應早先提交了同一個網站的鏈接。 – Pentium10 2010-05-17 06:45:42