大阵列比较

时间:2012-01-25 22:22:50

标签: java arrays comparison

我在SQL数据库中有〜25.000个不同的名称,并且想要对所有这些进行编辑距离比较以便例如标准化。 John Doe& Jhon Doe。

当db只有大约1000个名字时,我用来在数组中存储所有不同的名字。然后我会在该数组上使用两个for循环,从而将数组中的每个元素与其他元素进行比较。当编辑距离给出匹配> 0.9时,我将执行SQL查询,将所有记录中的另一个值替换为另一个值。

使用我更大的数据库,这是不可能的。你们会做什么?

ps:我也对任何多线程解决方案感到好奇,因为这个过程现在需要很长时间。

pps:我用Java编码

2 个答案:

答案 0 :(得分:1)

没有办法绕着成对匹配:尽可能高效的方式。

如果您需要更快地进行记录链接,请尝试使用字符串距离指标,该指标需要的计算量少于编辑距离(Bonacci distanceJaro–Winkler distance等)。

您还可以使用其他指标作为预处理步骤,然后计算编辑距离以确认或拒绝匹配。

答案 1 :(得分:1)

计算每个名字的soundex并将其存储在数据库中怎么样?您甚至可以在数据库端执行此操作,例如a MySQL SOUNDEX function

在计算每个名称的soundex之后,您所要做的就是用相同的soundex对行进行分组。

编辑:

如果soundex对于您的应用来说太粗糙,您可以先通过比较他们的索引来选择候选人,并在每组候选人中使用您通常的指标。