2010. július 6., kedd

Magyar ragozó program

Nemrég fejeztem be egy projektet, amelynek keretében kb. 40 ezer főnév és 4500 melléknév ragozott alakját állítottam elő egy C++ nyelven írt programmal. Az algoritmusok kidolgozása után, a program megírásában nagy segítségemre volt Lakatos Ferenc informatika szakos egyetemi hallgató. Ezúton is köszönet neki!

A magyar nyelv, mint tudjuk, erősen ragozós (agglutináló) nyelv, a szavakhoz háromféle toldalék járulhat: képző, jel vagy rag.
  • A képzők megváltoztatják a szó jelentését, gyakran szófaját is. A képzőkkel igéből igét, névszóból igét, igéből névszót és névszóból névszót tudunk alkotni. A szótárakban ezek általában önálló bejegyzésként szerepelnek, a projekt keretében ezekkel nem foglalkoztam. 
  • A ragok a szó mondatban betöltött szerepét jelölik, a jelentését nem módosítják, tehát nem alkotnak új szót. Példák: birtokos rag, tárgyrag, határozói ragok...
  • A jelek sem alkotnak új szót, sőt, a szó mondatbeli szerepét sem változtatják meg. Példa a jelekre: többesszám jele, birtokos jel...
A jelen nyelvészeti munka során a két utolsó csoporttal dolgoztam. Megszámoltam: a magyar főneveknek 266 ragozott és jelekkel módosított alakjuk van, ezekből én 56 főnévi alakot és 20 melléknévi alakot dolgoztam fel a jelenlegi projektben. Az 56 főnévi alak ebben a táblázatban tekinthető meg (angolul). A "transitive" forma szokatlan lehet: én így jelöltem azt, amikor egy birtokos esetben lévő szó birtokos jelet is kap. Például: házamé.

Egy ragozó program természetesen nem tud minden magyar főnevet és melléknevet helyesen ragozni, ugyanis rengeteg a kivétel, amelyeket külön kell kezelni. Ráadásul, a kivételek alól is vannak kivételek! A szavaknak nem csak a formáját kell figyelni, hanem a jelentését is, ehhez pedig emberi intelligencia kell. Például: a főnév töbesszáma tavak, de a kilátó többesszáma nem kilátavak, hanem kilátók. A kivételek és a kivételek kivételeinek kezelése után is akad még javítgatnivaló.

A projekt keretében én egészen pontosan 38.084 főnévvel és 4771 melléknévvel dolgoztam, amelyeket akapvetően az on-line magyar-román szótáramból exportáltam, majd ellenőriztem. A korrektúra tehát 38084x56 + 4771x20 = 2 228 124 szóalak ellenőrzését jelentette, amely önmagában is egy hatalmas munka. Ebben 2 munkatárs segített, akik ennek a mennyiségnek kb. 5%-át ellenőrizték, a többi 95%  az én feladatom maradt.

A munka egy nagy internetes keresőszolgáltatónak készült, a projekt végső célja az internetes keresés optimalizálása (SEO). Konkrétabban: amikor a keresőben beírjuk például a „ház” szót, a keresés eredményei között ennek a szónak ragozott alakjai is (házam, házad, háza, házak stb.) jelenjenek meg. [Megj.: Ez a példa talán nem is a legjobb, hisz a „ház” kulcsszóra könnyű megtalálni a „házak” szót is, de például a „szerelem” szó esetében ez nem ilyen könnyű, mert többesszáma ”szerelmek”.] Tehát, aki mostantól az interneten keres, annak elvileg több és pontosabb találat adódik.
Részemről a munka menete a következő volt:
  • a feladat felmérése, munkaterv kidolgozása: kb. 2 hét;
  • szoftverfejlesztés: kb. 1 hónap;
  • korrektúra: kb. 3 hét.
Hasonló projekten a Morphologic Kft. dolgozhatott, amikor elkészítette a Microsoft Word helyesírás-ellenőrzőjét. Persze az ő emberi, pénzügyi és más erőforrásaik az enyémeket nagyságrendekkel meghaladják.

A projektért kapott díjazás természetesen nem fedezi a befektetett energiát, de ennek ellenére élveztem ezt a munkát, és szívesen dolgoznék a folytatásán. Ugyanis a 266 szóalaknak a negyede sem készült el.