比较/匹配java中的字符串

时间:2012-06-10 17:45:58

标签: java string

我正在处理一个有两列的大型数据库。第一列idlong,而第二列nameStringname是具有相应ID的人的姓名。因此,我希望将行的name与其他行的name进行比较。

John Carter
john Carter
Carter
jo car
Willam Carter
C William
Carter j.

行中的所有这些name都应提供匹配。如果可能的话,拥有匹配的百分比/比率会很棒。有没有可以做到这一点的java库/代码段?我对所有建议持开放态度。

3 个答案:

答案 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
相关问题