我正在处理一个有两列的大型数据库。第一列id
是long
,而第二列name
是String
。 name
是具有相应ID的人的姓名。因此,我希望将行的name
与其他行的name
进行比较。
John Carter
john Carter
Carter
jo car
Willam Carter
C William
Carter j.
行中的所有这些name
都应提供匹配。如果可能的话,拥有匹配的百分比/比率会很棒。有没有可以做到这一点的java库/代码段?我对所有建议持开放态度。
答案 0 :(得分:4)
您似乎对计算字符串距离Levenshtein algorithm感兴趣。您可以找到Java实现here。
答案 1 :(得分:4)
这个图书馆对您来说很有意思:http://sourceforge.net/projects/simmetrics/
它为字符串提供了不同的相似性度量。
从他们的SourceForge页面:
SimMetrics是一个相似度量标准库,例如从编辑距离 (Levenshtein,Gotoh,Jaro等)其他指标,(例如Soundex, 查普曼)。
答案 2 :(得分:0)
查看'A Comparison of String Distance Metrics for Name-Matching Tasks'等人的论文William W. Cohen。本文比较了几个字符串距离指标。
他们还在SecondString project内实施了大部分内容。它是一个“基于Java的开源式近似字符串匹配技术包”,因此您可以轻松地比较不同的指标,以评估哪些指标符合您的要求。
如果您只需要匹配名称 - Jaro-Winkler 是一个不错的选择,也可以在SecondString包中实现。
如果您在数据库中拥有所有名称,则将相似性度量实现为存储过程可能是有意义的,以避免获取所有数据以使用java进行比较。所以你可以使用这样的查询:
SELECT t1.name, t2.name, sim(t1.name, t2.name) FROM table t1, table t2 WHERE sim(t1.name, t2.name) > 0.8