3

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

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%

然后有了这样的结果,我可以按可能性排序并进行视觉扫描以确定结果是否重复。

4

2 回答 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) 行的结果集,根据原始数据集中的行数,这可能会很笨拙。您可能希望通过仅返回特定搜索词的最佳匹配或仅返回相似度得分大于某个阈值的行来限制事物。

于 2012-08-22T17:04:18.207 回答
2

You could also use the SOUNDEX function.

于 2012-08-22T17:58:20.820 回答