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

问题描述 投票:2回答:4

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

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

John Smith应该匹配 Smith JonJonathan SmithJohnny Smith

java algorithm synchronization addressbook
4个回答
3
投票

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

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


2
投票

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


1
投票

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

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


1
投票

对于名字,我想出了一个类似于metaphone的算法。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.