2012-08-22 122 views
2

我試圖找到一種方法來搜索文本字段以識別可能類似的行,以便我可以確定它們是否應該合併重複。例如,如果數據我看起來像這樣:Oracle查找類似但不完全匹配的重複記錄

MyText_Column

    鮑勃
  1. 鮑比
  2. 羅伯特
  3. 詹尼
  4. 珍妮
  5. 約翰
  6. 喬納森

一個GROUP BY將無法工作,因爲沒有值是完全一樣的,但如果我能有一個查詢,將返回的可能性的列表,一排類似會很好。也許有一個更好的佈局,但我所想象的是這樣一個結果:

查詢結果

搜索比較Likely_Match

  1. 鮑勃·鮑比96%
  2. 鮑勃·羅伯特12%
  3. Bob Jane 0%
  4. Bob Janey 0%
  5. ... ..
  6. 簡詹尼87%
  7. 簡珍妮69%
  8. 簡喬12%

然後用類似的結果,我可以由似然和目視掃描排序,以確定該結果是重複或不。

回答

4

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)行的視行的原始數據集的數目可以是笨重。您可能希望通過僅返回特定搜索詞的最佳匹配或僅返回具有大於某個閾值的相似度得分的行來限制事情。

2

您也可以使用SOUNDEX函數。