sql >> Databáze >  >> RDS >> Oracle

Porovnání duplicitních hodnot sloupců Oracle pomocí Soundex, Jaro Winkler a Edit Distance (UTL_MATCH)

"Snažím se najít spolehlivou metodu pro párování duplicitních záznamů osob v databázi."

Bohužel nic takového neexistuje. Nejvíce můžete doufat v systém s rozumným prvkem pochybností.

SQL> select n1
       , n2
       , soundex(n1) as sdx_n1
       , soundex(n2) as sdx_n2
       , utl_match.edit_distance_similarity(n1, n2) as ed
       , utl_match.jaro_winkler_similarity(n1, n2) as jw   
from t94
order by n1, n2
/


  2    3    4    5    6    7    8    9  
N1                   N2                   SDX_ SDX_         ED         JW
-------------------- -------------------- ---- ---- ---------- ----------
MARK                 MARKIE               M620 M620         67         93
MARK                 MARKS                M620 M620         80         96
MARK                 MARKUS               M620 M622         67         93
MARKY                MARKIE               M620 M620         67         89
MARSK                MARKS                M620 M620         60         95
MARX                 AMRX                 M620 A562         50         91
MARX                 M4RX                 M620 M620         75         85
MARX                 MARKS                M620 M620         60         84
MARX                 MARSK                M620 M620         60         84
MARX                 MAX                  M620 M200         75         93
MARX                 MRX                  M620 M620         75         92

11 rows selected.

SQL> SQL> SQL> 

Velkou výhodou SOUNDEX je, že tokenizuje řetězec. To znamená, že vám poskytuje něco, co lze indexovat :to je neuvěřitelně cenné, pokud jde o velké množství dat. Na druhou stranu je to staré a hrubé. Existují novější algoritmy, jako je Metaphone a Double Metaphone. Přes Google byste měli být schopni najít jejich implementace PL/SQL.

Výhodou bodování je, že umožňují určitý stupeň neostrosti; takže můžete najít všechny řádky where name_score >= 90% . Drtivou nevýhodou je, že skóre jsou relativní, takže je nemůžete indexovat. Tento druh srovnání vás zabije při velkých objemech.

To znamená:

  1. Potřebujete kombinaci strategií. Žádný jediný algoritmus váš problém nevyřeší.
  2. Čištění dat je užitečné. Porovnejte skóre pro MARX vs. MRX a M4RX:odstranění čísel ze jmen zvyšuje míru návštěvnosti.
  3. Nemůžete získat velké množství jmen za běhu. Pokud můžete, použijte tokenizaci a předběžné hodnocení. Pokud nemáte hodně churn, použijte ukládání do mezipaměti. Pokud si to můžete dovolit, použijte dělení.
  4. Použijte Oracle Text (nebo podobný) k vytvoření tezauru přezdívek a variant.
  5. Oracle 11g zavedl do Oracle Text specifickou funkci vyhledávání jmen. Zjistěte více.
  6. Sestavte tabulku kanonických názvů pro hodnocení a propojte s ní skutečné datové záznamy.
  7. Použijte jiné hodnoty dat, zejména indexovatelné, jako je datum narození, k předběžnému filtrování velkého množství jmen nebo ke zvýšení spolehlivosti navrhovaných shod.
  8. Uvědomte si, že jiné hodnoty dat přicházejí s vlastními problémy:je někdo narozený 31. 1. 11 ve věku jedenácti měsíců nebo osmdesáti let?
  9. Pamatujte si, že jména jsou ošidná, zvláště když musíte vzít v úvahu jména, která byla přepsána do romanizace:existuje více než čtyři sta různých způsobů hláskování Moammara Khadaffiho (v římské abecedě) – a ani Google se nemůže shodnout na tom, která varianta je nejkanoničtější.

Podle mých zkušeností je zřetězení tokenů (křestní jméno, příjmení) smíšeným požehnáním. Řeší určité problémy (např. zda se název silnice objeví v adresním řádku 1 nebo v adresním řádku 2), ale způsobuje jiné problémy:zvažte bodování GRAHAM OLIVER vs OLIVER GRAHAM proti skórování OLIVER vs. OLIVER, GRAHAM vs GRAHAM, OLIVER vs GRAHAM a GRAHAM vs OLIVER .

Ať uděláte cokoli, stejně skončíte s falešně pozitivními výsledky a zmeškanými zásahy. Žádný algoritmus není odolný proti překlepům (ačkoli Jaro Winkler si poradil s MARX vs AMRX docela dobře).




  1. Jak provést aktualizaci + připojit se k PostgreSQL?

  2. Vyplnění zobrazené hodnoty položky na dotaz v Oracle Forms

  3. Prozkoumání MySQL Binlog Server – Ripple

  4. Naučte se importovat data aplikace Excel do databáze MySQL