用于比较人名以检测相同性的算法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用于比较人名以检测相同性的算法相关的知识,希望对你有一定的参考价值。
我正在研究地址簿同步算法。如果存在,我想重用一些代码,但还没找到。
有人知道一个算法会告诉我在数字/浮点数/过程中有多少两个名字相同。 Levenstein距离在这种方法中并不好,因为名称和我们的地址簿与每个名称部分的开头相匹配。
John Smith
应该匹配
Smith Jon
,Jonathan Smith
,Johnny 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()函数),textfuzzy,probability。
以上是关于用于比较人名以检测相同性的算法的主要内容,如果未能解决你的问题,请参考以下文章
python Jython天真的方法,用于根据名字列表检测OpenRefine中的潜在人名