用于比较人名以检测相同性的算法

时间:2010-05-16 22:05:08

标签: java algorithm synchronization addressbook

我正在研究地址簿同步算法。如果存在,我想重用一些代码,但还没找到。

有人知道一个算法会告诉我数字/ float / procent两个名字是多少相同的。 Levenstein距离在这种方法中并不好,因为名称和我们的地址簿与每个名称部分的开头相匹配。

John Smith应该匹配 Smith JonJonathan SmithJohnny Smith

4 个答案:

答案 0 :(得分:3)

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

如果你有名字,姓氏问题那么你可以对它们进行排序,以确保史密斯约翰被保存为约翰史密斯

答案 1 :(得分:2)

您应该查看字符串比较算法,例如Levenshtein或Smith-Waterman。这是a great library让您入门

答案 2 :(得分:1)

要真正得到这些案例,你可能需要一个别名表,但我认为Soundex会让你接近。

http://commons.apache.org/codec/apidocs/org/apache/commons/codec/language/Soundex.html

答案 3 :(得分:1)

对于名字,我提出了类似于metaphone的算法。

你还需要一些逻辑来将字符串分解为姓氏,给定名称,标题等。它可能会变得复杂。

有边缘情况。如果有人拥有“教授”这个标题,你不希望将其解释为名字。如果他们在开始时有“主”,可能是他们的名字(很多人被称为主)或他们的头衔。等等。如果你的名字已经以标准形式出现,你知道他们的姓氏,名字和头衔,这是最好的。

我已经编写了一些PHP代码来执行此操作:请参阅name(请参阅similarityto()函数),textfuzzyprobability