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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用于比较人名以检测相同性的算法相关的知识,希望对你有一定的参考价值。

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

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

John Smith应该匹配 Smith JonJonathan SmithJohnny Smith

答案

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

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

另一答案

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

另一答案

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

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

另一答案

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

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

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

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

以上是关于用于比较人名以检测相同性的算法的主要内容,如果未能解决你的问题,请参考以下文章

python Jython天真的方法,用于根据名字列表检测OpenRefine中的潜在人名

将代码片段插入数据库并在 textarea 中以相同方式显示

Facebook开源两套检测算法用于抵制犯罪

十条实用的jQuery代码片段

算法竞赛入门码蹄集进阶塔335题(MT3330-3335)

Manacher 入门+模板 回文串专用算法