Oracle查找相似但不完全匹配的重复记录

3
我正在寻找一种搜索文本字段以识别可能相似的行的方法,以便确定它们是否是应该合并的重复项。例如,如果我的数据看起来像这样:
MyText_Column
1. Bob 2. Bobby 3. Robert 4. Jane 5. Janey 6. Janie 7. Joe 8. John 9. Johnathan
GROUP BY 不起作用,因为没有一个值完全相同,但如果我能有一个查询,返回一个列表,其中包含一行类似的可能性,那就太好了。也许有更好的布局,但我想象中的结果如下:
Query Result
Search Compare Likely_Match
1. Bob Bobby 96% 2. Bob Robert 12% 3. Bob Jane 0% 4. Bob Janey 0% ...... 8. Jane Janey 87% 9. Jane Janie 69% 10. Jane Joe 12%
然后,有了这样的结果,我可以按照可能性进行排序,并进行视觉扫描,以确定结果是否为重复项。
2个回答

5

UTL_MATCH包有几种方法可以实现这一点——我猜你想使用Jaro-Winkler相似度算法。像这样:

SELECT a.mytext_column search,
       b.mytext_column compare,
       utl_match.jaro_winkler_similarity( a.mytext_column, b.mytext_column ) similarity
  FROM table_name a,
       table_name b
 WHERE a.<<primary key>> != b.<<primary key>>
 ORDER BY utl_match.jaro_winkler_similarity( a.mytext_column, b.mytext_column ) desc

这将生成一个N *(N-1)行的结果集,根据原始数据集中的行数可能会变得笨重。您可能希望通过仅返回特定搜索词的最佳匹配项或仅返回相似度得分大于某个阈值的行来限制结果。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接