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.

9 megjegyzés:

  1. Tisztelt Tófalvi Péter úr!

    Idén júniusban a következőket írtam az új döntéshozókhoz:

    Igen tisztelt Navracsics Tibor úr!

    Tisztelt Közigazgatási és Igazságügyi Miniszter úr!

    [...]

    20 éve szakfordítóként dolgozom, a szakfordítói vizsgámat az ELTE-n szereztem meg.

    Munkám során számtalan alkalommal szembesültem a pártállami idõkbõl itt maradt kövület, az Országos Fordító és Fordításhitelesítõ Iroda (OFFI Rt.), monopóliumával, mely vállalat tudtommal az Igazságügyi Minisztérium leányvállalata. Számos magyarországi intézmény (pl. önkormányzatok) csak az OFFI Rt. fordítását fogadja (fogadhatja) el. (Külföldön nincs ilyen problémánk, mert ott az ilyen monopólium ismeretlen.) Azaz hiteles fordítást Magyarországon csak egy vállalat, az OFFI Rt. végezhet.

    Azt hiszem, számos fordító kollégám nevében kérem arra, hogy vizsgálja felül ezt a monopóliumhelyzetet, amely jelentõs versenyhátrányt jelent nekünk, fordítóknak, számos ügyfelet kell visszautasítanunk azzal, hogy ezt vagy azt a fordítást csak az OFFI Rt.-tõl fogadja el a bizonyos hivatal. Május 1-tõl az OTP is bejelentette, hogy csak az OFFI Rt. fordításait fogadja el; ennyit a versenyszellemrõl.

    Irigykedve hallom szlovák kollégáimtól, hogy Szlovákia nem csak az euró bevezetésében jár elõl, mint volt szocialista ország, hanem például ott bevezették a nyugaton már régóta élõ intézményt, a bíróság elõtt felesketett fordítóét, aki jogosult hivatalos iratok hiteles fordítására. És persze ilyen rendszer mûködik Ausztriában, Németországban, USA-ban, egyszóval mindenütt. Kivéve hazánkat.

    Én, mint a szakmában 20 éve tevékenykedõ, szakfordítói vizsgával rendelkezõ, szakfordító, azt szeretném, ha szintén készíthetnék hiteles fordításokat, és a piacon az ár és a minõség szabná meg, hogy melyik cég miként boldogul.

    Nagyon köszönöm, hogy idõt szánt levelem elolvasására.

    Nagy tisztelettel:

    Lõrincz-Véger Gábor
    Sopron

    VálaszTörlés
  2. Hú! Az hatalmas munka lehetett! 266 alak egyetlen szónak? Nem is hittem volna, igaz, még sosem számoltam utána. :) Kész csoda, hogy ilyen jól meg tudjuk tanulni.

    VálaszTörlés
  3. Szia!
    A 266 toldalékos alak a főneveknél van. A mellékneveknek még több alakjuk van (mert fokozhatók). De ott vannak még az igék és a többi szófaj is. Tényleg komoly teljesítmény megtanulni magyarul, nem csoda, hogy "rááll" az agyunk a matematikára (ld.: kombinatorika). :-)

    VálaszTörlés
  4. No, én a szavakat elég jól forgatom, de matekból agyilag zokni vagyok. Az lehet, hogy van sok jó matematikusunk, meg programozónk, de szerintem ez nem függ össze a nyelvvel. Egyik humán, másik reál. Reálból sosem voltam jó. Matek, fizika, kémia... mindből bukdácsoltam. Énekből, rajzból, magyarból pedig kitűnő.

    Pedig egyik órára sem tanultam soha semmit! :D

    VálaszTörlés
  5. Nos, a matematikai érzéked egy olyan rejtett kincs, amelyet még fel kell fedezned magadban. :-)

    VálaszTörlés
  6. Helló, lehetne erről bővebben olvasni, vagy ez egy zárt forrású program? Kiváncsi lennék alapvetően hogyan lett megvalósítva nagy vonalakban a ragozás. Nem műhelytitkok érdekelnek én hobbi szinten írok C-ben ragozó függvényeket egy hobbi szöveges játékot fejlesztek.

    Elég nagy szenvedés nekem pld az alma szóból almát csinálni merthogy az eperből meg nem eperet hanem epret lesz. :-D

    Egyelőre ott tartok hogy ban-ben, ba-be, tól-től, nak-nek úgy ahogy működik.

    VálaszTörlés
  7. Szia Corda!

    A projektet tavaly fejeztem be, legalábbis az első részét, és remélem, hogy a nagy nemzetközi keresőcég folytatja, így még nem akarom nyilvánossá tenni a forráskódot.

    VálaszTörlés
  8. Értem. Én olyan függvényeket készítek ami egy szóból egy esetet ragoz. Ezután már lehet értelmes mondatokat generálni.

    Pár függvény példa: ACC("alma") = almát, SUB(szék) = székre, ELA(kabát) = kabátból.

    Ebből már lehet alkotni olyat hogy pld.:

    var1 = körte
    var2 = hátizsák
    var3 = asztal

    "Kiveszed a_az(var1) ACC(var1) a_az(var2) ELA(var2) és ráteszed a_az(var3) ACC(var3)."

    Ami azt eredményezi hogy: Kiveszed a körtét a hátizsákból és ráteszed az asztalra.

    :-D

    VálaszTörlés
  9. Szia!
    Nyilvánvaló, hogy függvényekkel kell generálni az egyes eseteket, másként nem is lehetne.

    VálaszTörlés

Írd be ide a megjegyzésed!