2

I'm dealing with a large database which have two columns. The first column id is a long while second column name is a String. name is the name of a person with corresponding id. So, I wish to compare the name of row with name of other rows.

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

All these names in rows should provide matches. If possible it would be great to have the percentage/ratio of match. Is there any java library/snippet that can do this? I'm open to all suggestions.

4

3 回答 3

4

这个库对你来说可能很有趣:http: //sourceforge.net/projects/simmetrics/

它为字符串提供了不同的相似性度量。

从他们的 SourceForge 页面:

SimMetrics 是一个相似度度量库,例如从编辑距离(Levenshtein、Gotoh、Jaro 等)到其他度量(例如 Soundex、Chapman)。

于 2012-06-10T18:02:09.273 回答
4

看起来您会对用于计算字符串距离的Levenshtein 算法感兴趣。您可以在此处找到 Java 实现。

于 2012-06-10T17:57:18.363 回答
0

查看William W. Cohen等人的论文“名称匹配任务的字符串距离度量的比较”。该论文比较了几个字符串距离度量。

他们还在SecondString 项目中实现了其中的大部分。它是一个“基于 Java 的开源近似字符串匹配技术包”,因此您可以轻松比较不同的指标以评估哪些指标符合您的要求。

如果您只需要匹配名称 - Jaro-Winkler是一个不错的选择,它也在SecondString包中实现。

如果您的所有姓名都在数据库中,则将相似性度量实现为存储过程可能是有意义的,以避免获取所有数据以使用 java.util.Date 进行比较。所以你可以使用这样的查询:

SELECT t1.name, t2.name, sim(t1.name, t2.name) FROM table t1, table t2 WHERE sim(t1.name, t2.name) > 0.8
于 2012-06-11T13:44:13.167 回答