我在SQL数据库中有〜25.000个不同的名称,并且想要对所有这些进行编辑距离比较以便例如标准化。 John Doe& Jhon Doe。
当db只有大约1000个名字时,我用来在数组中存储所有不同的名字。然后我会在该数组上使用两个for循环,从而将数组中的每个元素与其他元素进行比较。当编辑距离给出匹配> 0.9时,我将执行SQL查询,将所有记录中的另一个值替换为另一个值。
使用我更大的数据库,这是不可能的。你们会做什么?
ps:我也对任何多线程解决方案感到好奇,因为这个过程现在需要很长时间。pps:我用Java编码
答案 0 :(得分:1)
没有办法绕着成对匹配:尽可能高效的方式。
如果您需要更快地进行记录链接,请尝试使用字符串距离指标,该指标需要的计算量少于编辑距离(Bonacci distance,Jaro–Winkler distance等)。
您还可以使用其他指标作为预处理步骤,然后计算编辑距离以确认或拒绝匹配。
答案 1 :(得分:1)
计算每个名字的soundex并将其存储在数据库中怎么样?您甚至可以在数据库端执行此操作,例如a MySQL SOUNDEX function。
在计算每个名称的soundex之后,您所要做的就是用相同的soundex对行进行分组。
编辑:
如果soundex对于您的应用来说太粗糙,您可以先通过比较他们的索引来选择候选人,并在每组候选人中使用您通常的指标。