我正在研究地址簿同步算法。如果存在,我想重用一些代码,但还没找到。
有人知道一个算法会告诉我数字/ float / procent两个名字是多少相同的。 Levenstein距离在这种方法中并不好,因为名称和我们的地址簿与每个名称部分的开头相匹配。
John Smith
应该匹配
Smith Jon
,Jonathan Smith
,Johnny Smith
答案 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()函数),textfuzzy,probability。