Az adattisztítás magyar nyelvi kérdései

Folytassuk a magyar nyelv különlegessége okozta problémák tárgyalását. Az előző heti cikkben megmutattam, hogy egy jelentéktelennek tűnő, hibás alapértelmezett SQL Server collation beállítás milyen helyrehozhatatlan problémát okozhat nekünk magyaroknak.

Gyűjtök egy kis erőt és a jövő héten megpróbálom megírni a tanulmány folytatását ahol bemutatom, hogy mit kell tennünk, ha nem mi, hanem a forrásrendszerek implementálói követték el ezt a konfigurációs hibát. Be fogom mutatni Önnek, hogy mi a teendő abban az esetben amikor olyan karakterekkel kell dolgoznunk, amelyek nem szerepelnek a magyar ábécében (például a kalapos és hullámos ő betűk)

Most azonban egy másik aspektusból, az adattisztítás oldaláról vizsgáljuk meg a magyar nyelvi sajátosságokat és az ékezetes betűket.

A magyar nyelvnek illetve a magyar földrajzi környezetnek számtalan sajátossága van. Ilyen például, hogy Budapestet írhatjuk Bp.-nek, Bpest-nek, vagy a József Attila utcát József A. utcának, de ugyanilyen sajátosság, hogy az ékezetes karaktereket tartalmazó neveket gyakran ékezet nélkül írjuk. A kérdés az, hogy az SQL Server adattisztítást segítő task-ja, a fuzzy lookup task támogatja-e az ékezetes szövegek tisztítását.

A fuzzy lookup task

A fuzzy lookup task segítségével lehetőségünk van arra, hogy az adatokat betöltés közben egy kicsit megtisztítsuk. Mondok egy példát. Képzeljük el, hogy ügyféladatokat (név, cím, telefon) töltünk az adattárházba, és mivel a cím (város) egy szabadszöveges mező a forrásrendszerben, ezért ennek következtében meglehetősen piszkos. Például Kőszeg előfordul, mint Köszeg, Koszeg vagy Koszg

A célunk az, hogy az adattárházba csak Kőszeg kerüljön be, tehát Koszeg és társai ne. Szerencsére van egy magyar várostörzsünk (lásd cikk vége), amivel ellenőrizhetjük, hogy a Koszeg egy létező város-e vagy sem. Amennyiben nem, úgy a betöltés során a rekordot befuttatjuk egy fuzzy lookup taskba, amely visszamegy a várostörzshöz és megkeresi, hogy Koszeg-höz melyik város passzol a legjobban.

Ha talál olyan várost, amely hasonlósági küszöbszáma magasabb egy általunk meghatározott értéknél, akkor Koszeget kicseréli a hozzá hasonló Kőszegre és visszaküldi az adatfolyamba, ahol csatlakozik a többi rekordhoz. Ha nem akkor hibalistára teszi, és nekünk kell eldöntenünk, vagy kiválasztanunk több lehetséges alternatíva közül, hogy melyik lesz a helyes város.

Egyszerűsített adattisztítási feladat a Fuzzy Lookup task felhasználásával

No de kanyarodjunk vissza az eredeti adattisztítási problémához, hiszen a kérdés arra keresi a választ, hogy a fuzzy lookup task számításba veszi-e, hogy az ékezetes és ékezet nélküli betűk hasonlóbbak egymáshoz, mint bármely más karakterhez.

Az idevonatkozó szakirodalom szerint nem: "...Because they are purely token-driven, Fuzzy Lookup and Fuzzy Grouping do not have a language-dependent component..."

Mindebből arra következtethetünk, hogy az adattisztításra használt fuzzy lookup task nem veszi figyelembe, hogy „a” és „á” hasonlóbb egymáshoz, mint „a” és „b”. Azaz a hasonlósági index számításakor a fuzzy lookup task számára Vác annyira hasonló Vac-hoz, mint Tác-hoz. (mind a kettő egy karakterben különbözik Vác-tól)

Itt véget is érhetne a cikk azzal a megállapítással, hogy a Fuzzy lookup task az adattisztítás során nem támogatja a magyar nyelvi sajátosságokat. De szerencsére ez nem teljesen igaz és rögvest meg is mutatom, hogy miért nem.

A fuzzy lookup task-nak ugyanis van egy teljesen logikus sajátossága miszerint az azonos alakú karakterek hasonlóbbak egymáshoz mint a nem azonos alakúak. Például az ő betűhöz hasonlóbbak az o, ö, ô, o betűk mint mondjuk az A betű.

Hogy kiderítsem mennyire hasonlóbbak egymáshoz az ékezetes és ékezet nélküli betűpárok készítettem egy tesztet. A teszt során Kőszeg második betűjét rendre kicseréltem a karaktertábla 256 karakterére és mértem, hogy az így kapott szavak mennyire hasonlóak a Kőszeg szóhoz. Az eredmény:

Adattisztítás eredménye a fuzzy lookup task-kal

Az eredmény összefoglalva:

  • Az o alakú karaktereket tartalmazó K*szeg szó hasonlósága a Kőszeg szóhoz: 0,9750
  • Az ABC egyéb betűit tartalmazó K*szeg szó hasonlósága a Kőszeg szóhoz: 0,8315
  • és a speciális karaktereket tartalmazó K*szeg szó hasonlósága a Kőszeg szóhoz: 0,3095.

S bár meg kell mondanom, hogy nem minden szóra (városra) kaptam ilyen szignifikáns különbséget az ABC betűi és az ékezetes betűk közti hasonlóság vizsgálatakor, de az minden esetben igaz volt, hogy az ékezetes betűk hasonlóbbak az azonos alakú ékezet nélküli betűpárjaikhoz mint az ABC egyéb karaktereihez.

Összefoglalás

Levonhatjuk tehát a következtetést, hogy az adattisztításra használt Fuzzy Lookup task direkt módon nem támogatja a magyar nyelvi adatok tisztítását, (hiszen Koszeg ugyanannyira hasonló Kőszeghez, mint Kószeghez és ez például Komló és Kömlő városaink esetén problémát jelenthet), de a hasonlósági index számításakor figyelembe veszi azt, hogy az ékezetes karakterek hasonlóbbak az ékezet nélküli párjaikhoz.

U.I.: A magyar várostörzs letölthető a posta honlapjáról. Belinkelni nem tudom mert tartalmaz dátumot ami időről időre változhat :-) , de könnyem megtalálja az interneten, ha rákeres a „Postai irányítószámok XLS formátumban” kifejezésre.

Kapcsolódó anyagok:

Kővári Attila - BI projekt

Új hozzászólás