V práci jsem narazil na jméno package, který jsem neznal – UTL_MATCH. Přehlížet něco, co neznám bez snahy si doplnit informace je přirozené – člověk není schopen (a ani ochoten) pokrýt všechny informace ze všech oborů, ale u některých vybraných by se asi měla razit strategie: neznám=doplním/doučím. U PL/SQL se o to alespoň snažím, ač při 250 000 stránkové dokumentace to jde velmi těžko
Takže pro mou psa nový balík UTL_MATCH :
High-level: Obsahuje funkce pro porovnání dvou stringů, konkrétně funkce:
- EDIT_DISTANCE - počet nutných změn v prvním parametru, aby se získal parametr druhý:
select utl_match.edit_distance('aaaB','aaaa') from dual; -- 1 (změna B na a)
select utl_match.edit_distance('111a','aaaa') from dual; -- 3 (změny 1 na a)
- EDIT_DISTANCE _SIMILARITY – počet nutných změn v prvním parametru, aby se získal parametr druhý, ale v normalizované formě <0,100> . Tedy jak moc jsou si podobné:
select utl_match.edit_distance_similarity('1111111111','2222222221') from dual;
-- výsledek je 10, 9 z 10 znaků je špatně, tedy podobnost je 10%*
select utl_match.edit_distance_similarity('2222222221','2222222221') from dual;
-- výsledek je 90, 9 z 10 znaků je totožných, tedy podobnost je 90%
select utl_match.edit_distance_similarity('22222','2222222221') from dual;
-- výsledek je 50, 50%* ze druhého stringu
* – píši %, protože to tak z výpočtu i logiky plyne, ač Oracle to specifikuje pouze jako interval <0,100>
- JARO_WINKLER a JARO_WINKLER_SIMILARITY – podobně jako předchozí funkce počítají hodnotu mezi dvěma parametry, JARO_WINKLER v surové podobě *_SIMILARITY v normalizované formě opět v intervalu <0,100>. Výpočet distance pomocí JARO_WINKLER lze nalézt zde na Wikipedii a jak tak na to koukám, tak bez příkladu s výpočtem – v jednu ráno to počítat asi nebudu
Fajn věcička, budu na ní myslet, až budu hledat v all_objects nějakej pitomej objekt o kterém přesně nevím, jak se jmenuje či jak přesně se to píše: