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

时间:2012-08-22 16:59:25

标签: sql oracle search duplicates search-engine

我正在尝试找到一种方法来搜索文本字段以识别可能类似的行,以便我可以确定它们是否是应该合并的重复项。例如,如果我的数据如下所示:

MyText_Column

  1. 鲍勃
  2. 巴比
  3. 罗伯特
  4. 詹尼
  5. 珍妮
  6. 约翰
  7. 乔纳森
  8. GROUP BY不起作用,因为没有一个值完全相同,但是如果我有一个查询可以返回一行相似的可能性列表,那就太好了。也许有更好的布局,但我想象的是这样的结果:

    查询结果

    搜索比较Likely_Match

    1. Bob Bobby 96%
    2. Bob Robert 12%
    3. Bob Jane 0%
    4. Bob Janey 0%
    5. .....
    6. Jane Janey 87%
    7. Jane Janie 69%
    8. Jane Joe 12%
    9. 然后结果就像我可以按可能性排序并进行视觉扫描以确定结果是否重复。

2 个答案:

答案 0 :(得分:5)

UTL_MATCH package有两种方法可以做到这一点 - 我的猜测是你想要使用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)行的结果集,这些行可能不实用,具体取决于原始数据集中的行数。您可能希望通过仅返回特定搜索词的最佳匹配或仅返回相似度得分大于某个阈值的行来限制事物。

答案 1 :(得分:2)

您也可以使用SOUNDEX功能。