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

Mic*_*ack 2 sql oracle search search-engine duplicates

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

MyText_Column

  1. 短发
  2. 鲍比
  3. 罗伯特
  4. 詹尼
  5. 珍妮
  6. 约翰
  7. 乔纳森

GROUP BY不起作用,因为没有一个值完全相同,但如果我可以有一个查询返回一行相似的可能性的列表将是很好的.也许有更好的布局,但我想象的是这样的结果:

查询结果

搜索比较Likely_Match

  1. 鲍勃鲍比96%
  2. 鲍勃罗伯特12%
  3. 鲍勃·简0%
  4. 鲍勃·简妮0%
  5. .....
  6. 简珍妮87%
  7. 简珍妮69%
  8. 简乔12%

然后结果就像我可以按可能性排序并且可视地扫描以确定结果是否重复.

Jus*_*ave 5

UTL_MATCH包有几个方法来做that--我的猜测是,你将要使用的哈罗-温克勒相似度算法.就像是

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
Run Code Online (Sandbox Code Playgroud)

这将生成N*(N-1)行的结果集,这些行可能是不实用的,这取决于原始数据集中的行数.您可能希望通过仅返回特定搜索词的最佳匹配或仅返回相似度得分大于某个阈值的行来限制事物.