scieee AI-readable full text Open interactive document viewer

Lietuvių kalbos morfologija atvirojo kodo „Hunspell“ platformoje

Virginijus Dadurkevičius

Full text

BENDRINĖ KALBA 90 (2017) www.bendrinekalba.lt ISSN 2351-7204 VIRGINIJUS DADURKEVIČIUS Vilniusi Egyetem A LITVÁN NYELV MORFOLÓGIÁJA NYÍLT FORRÁSKÓDÚ HUNSPELL PLATFORMON 1 KULCSSZAVAK: számítógépes nyelvészet, litván nyelv, grammatika, morfológia, morfológiai elemzés, helyesírás-ellenőrzés, szövegindexelés, keresés, nyílt forráskód, Hunspell. BEVEZETÉS Több mint 100 évvel ezelőtt Jono Jablonskis erőfeszítéseinek köszönhetően (1901, 1918, 1922) megkezdődött a litván nyelv normálása, és alkalmassá vált arra, hogy az államot egyesítő fő eszköz legyen. Már Jono Jablonskis Lietuviškos kalbos gramatikája (1901) formalizálta a litván nyelv fonetikáját, morfológiáját és szintaxisát: meghatározta az alapvető fogalmakat, valamint bemutatta a szóragozás és a mondatszerkezet szabályait (lásd az 1. ábrát). 1. ÁBRA Ištrauka iš Jono Jablonskio Lietuvių kalbos gramatikos, 1901 m. 2 Neįkainojamas Jono Jablonskio indėlis norminant lietuvių kalbos leksiką ir aiškinant semantinius žodžių ypatumus. Ilgą laiką to visiškai pakako mokiniams ir mokytojams, rašytojams ir skaitytojams, valdininkams ir mokslininkams. Atsiradus civilizaciją keičiančiai naujovei – kompiuteriams, – klasikinei gramatikai ir leksikai iškilo būtinybė „apsivilkti naują drabužį“ ir tapti visaverte naujųjų 1 Straipsnis parengtas pagal pranešimą Lietuvių kalbos gramatika atvirojo kodo pasaulyje, skaitytą 24-ojoje tarptautinėje Jono Jablonskio konferencijoje Skaitmeniniai kalbos ištekliai, jų plėtros kryptys ir panaudos galimybės (2017 09 29); ją organizavo Lietuvių kalbos instituto Bendrinės kalbos tyrimų centras ir Vilniaus universiteto Lietuvių kalbos katedra. 2 Paveikslas iš http://www.epaveldas.lt/vbspi/biRecord.do?biRecordId=25383. VIRGINIJUS DADURKEVIČIUS. A litván nyelv morfológiája a nyílt forráskódú Hunspell platformon |2 BENDRINĖ KALBA 90 (2017) www.bendrinekalba.lt ISSN 2351-7204 technológiai része. A nyelvi adatokra először a szöveg kódolásakor (a betűk számokká alakításakor), a bevitt szöveg hibáinak automatikus javításakor, valamint a kétoldali sorkizárású hasábok szövegének szótagolásakor volt szükség a számítógépekben. Valamivel később információkereséshez, a beszéd elemzéséhez és szintéziséhez, egyik nyelvről a másikra történő gépi fordításhoz, a tartalom automatikus megértéséhez, a szöveg „érzelmi” elemzéséhez stb. is felhasználták őket. A nyelvi adatokat aprólékosan formalizálni és más, a számítógépek számára érthető módon kellett rögzíteni. Ezek közül a legfontosabb a morfológia, mivel ez minden alaposabb számítógépes nyelvészeti munka (szintaxis, szemantikai elemzés és hasonlók) alapja. Az első ilyen munkát a századfordulón a „Bitas” kísérleti gyár programozója, Vytautas Zinkevičius végezte el (1996, 2000). Közel két évtizeden át ez volt a korszerű litvánnyelv-kutatás és a számítógépes alkalmazások nélkülözhetetlen és egyetlen eszköze. Ezt a rendszert sikeresen használták a helyesírási hibák felismerésére szövegszerkesztő programokban, valamint morfológiai elemzés és szintézis elvégzésére a Litván Nyelvi Intézet, a Vytautas Magnus Egyetem (ahol munkái a „Lemuoklis” nevet kapták) és a Vilniusi Egyetem tudományos és alkalmazott munkáiban. E rendszernek még egy, a régi litván nyelv elemzésére adaptált változatát is létrehozták (Gelumbeckaitė és mtsai 2012). A számítógépes nyelvészet igényeinek bővülésével azonban kezdtek kirajzolódni e rendszer hiányosságai: nem szabványos, nem dokumentált adatszerkezetek; zárt forráskód; a tulajdonnevek, az illatívusz, a duális, az elsődleges igék jövő idejének, valamint a megrövidült és ritka alakoknak a nem teljes körű megvalósítása. E rendszer további fejlesztését különösen a zárt forráskód akadályozta – az adatokat és az algoritmust gyakorlatilag csak maga a szerző módosíthatta. A korábban leírt hiányosságok kiküszöbölése és a litván nyelv új generációs számítógépes morfológiájának létrehozása érdekében a következő követelményeket fogalmazták meg: 1) kizárólag nyílt forráskódot kell használni és létrehozni; 2) specifikus litván nyelvi sajátosságokkal csak az adatok, nem pedig azok formája és értelmezése rendelkezhet; 3) minden programkódnak univerzálisnak kell lennie, és bármely más nyelvhez is alkalmasnak kell lennie; 4) a világ más nyelveihez sikeresen alkalmazott megoldások felhasználása. A fenti követelményeknek jól megfelel a Hunspell platform. Ezenkívül a nyelv ilyen módon történő 3 leírása után később könnyen ellenőrizhetők a helyesírási hibák számos (több mint 50) alkalmazásban (OpenOffice, LibreOffice, Firefox, Chrome, Safari, InDesign stb.), elvégezhető a szavak morfológiai elemzése és szintézise, végrehajtható a szöveges információk intelligens keresése és így tovább. 3 Prieiga internete: https://en.wikipedia.org/wiki/Hunspell. VIRGINIJUS DADURKEVIČIUS. A litván nyelv morfológiája a nyílt forráskódú Hunspell platformon |3 BENDRINĖ KALBA 90 (2017) www.bendrinekalba.lt ISSN 2351-7204 Jelen tanulmány a litván nyelv morfológiájának új, a Hunspell platformon alapuló megvalósítását tekinti át. A kapcsolódó problémákat és azok megoldási módjait tárgyalja, valamint a sikeres tesztelés és gyakorlati alkalmazás példáit mutatja be. 1. A LITVÁN NYELV HUNSPELL-FORMÁTUMBAN TÖRTÉNŐ LEÍRÁSÁNAK SAJÁTOSSÁGAI 1.1. A Hunspell platform létrejöttének előfeltételei és általános elvei A nyílt forráskódú Hunspell platform a legegyszerűbb helyesírás-ellenőrző eszközökből, az Ispellből, az Aspellből, a MySpellből és hasonlókból fejlődött ki. Fokozatos bonyolításuk és egyre 4 változatosabb nyelvekre (különösen agglutináló nyelvekre – finnre, magyarra, törökre és 5 hasonlókra) való alkalmazásuk révén lehetővé vált nemcsak a helyesírás-ellenőrzés, hanem a 6 morfológiai elemzés és szintézis feladatainak megoldása is. E világszerte rendkívül népszerű platform szerzői főként magyar származású tudósok és mérnök-programozók (Trón ir kt. 2005). Nem meglepő, hogy nevének első eleme, a „Hun-”, Magyarország angol elnevezésén alapul. A nyelv morfológiáját a Hunspell platformon két szöveges fájl írja le: a .aff kiterjesztésű fájlban a ragozási szabályokat rögzítik, míg a .dic kiterjesztésű fájlban a szóalakok szótárát rögzítik a kezdeti morfológiai információval és az egy vagy több ragozási szabálycsoportra való hivatkozásokkal, amelyek ezenkívül alkalmazhatók. Egy adott szabályt úgy képzelhetünk el, mint egy utasítást, amely meghatározza: 1) Mit mire lehet változtatni a szóalakok szótárában. Pl. az SFX 85 čias ty [^š]čias is:Masc_Sg_Voc szabályban az „SFX” azt jelöli, hogy a szóvégződés változik, és a „–čias” „–ty”-ra cserélhető. A „PFX” azt jelölné, hogy a szó eleje változik. A szó közepének változtatásai nincsenek előirányozva. 2) Annak a ragozási szabálycsoportnak a száma, amelyhez ez a szabály tartozik. A csoportot egy vagy több olyan szabály alkothatja, amelyeket mindig együtt alkalmaznak. Az előző példában a szabály ahhoz a csoporthoz tartozik, amelynek száma „85”. 3) Azok a feltételek, amelyek fennállása esetén a változtatás lehetséges (a reguláris kifejezések egy bizonyos formalizmusát alkalmazzák). Példánkban a változtatás csak azzal a feltétellel lehetséges, hogy a formaszótárban szereplő szó vége nem „–ščias” (pl. „vaikiščias”). 4) Az e változtatással kapcsolatos morfológiai információ. Példánkban a szó végének ilyen megváltoztatásához a „Masc_Sg_Voc” morfológiai jelölés kapcsolódik (hímnem, egyes szám, megszólító eset, pl. „svety”). 4 Prieiga internete: https://www.cs.hmc.edu/~geoff/ispell.html. 5 Prieiga internete: http://aspell.net. 6 Prieiga internete: https://code.google.com/archive/a/apache-extras.org/p/ooo-myspell. VIRGINIJUS DADURKEVIČIUS. A litván nyelv morfológiája a nyílt forráskódú Hunspell platformon BENDRINĖ KALBA 90 (2017) www.bendrinekalba.lt ISSN 2351-7204 |4 A Hunspell ragozási szabályai összeállításának és a morfológiai információk megadásának alapelveiről részletesebben e platform honlapján lehet tájékozódni, a különböző nyelvek 7 morfológiájának e platformon történő leírási lehetőségeit pedig Tommi A. Pirinen disszertációja (2014) meglehetősen alaposan vizsgálja. 1.2. A litván megvalósítás sajátos követelményei Ahhoz, hogy a nyelv ilyen formalizálása alkalmas legyen morfológiai elemzésre, szintézisre, szöveges információk indexelésére és keresésére, a következő két követelményt kell teljesíteni: 1) a szóalakok szótárába csak lemmák (címszóalakok) írhatók be; 2) a prefixumos, szuffixumos és visszaható képzésnek nem az .aff, hanem a .dic fájlban kell tükröződnie. Az első követelményt a litván nyelvben nem könnyű megvalósítani az igék ragozásának nagy változatossága miatt (mintegy 170 változat), de e probléma megoldását segítette, hogy a Hunspell platform lehetővé teszi, hogy az egyik ragozási szabályból egy másikat hívjunk meg. Bár az ilyen hívások „mélysége” csak eggyel lehet egyenlő, ez jelentősen csökkenti a ragozási szabályokat tartalmazó fájl méretét – több millió sorról néhány tízezer sorra. A második követelmény teljesítése némileg megnöveli a .dic fájl méretét, mivel például az „imti”, „paimti”, „suimti” és „nesiimti” azonos gyökből képzett előtagos–képzős–visszaható származékok külön sorokban lesznek rögzítve. És ez nem az egyetlen negatív következménye ennek a követelménynek – könnyen előfordulhat, hogy valamely ritkábban használt ige vagy melléknévi származék kimarad. Igaz, ez a probléma meglehetősen részletesen megoldható, ha a lemmákat elsősorban nem a kiadott szótárakból, hanem az összegyűjtött szövegkorpuszokból válogatjuk ki. 1.3. A litván .dic és .aff fájlok részletei (példák) Néhány litván nyelvi .dic fájl (szótár) részlete, a Jonas Jablonskis-féle példaszavak kiemelt megfelelőivel, a 2. ábrán látható. 7 Prieiga internete: https://github.com/hunspell/hunspell. VIRGINIJUS DADURKEVIČIUS. A litván nyelv morfológiája a nyílt forráskódú hunspell platformon BENDRINĖ KALBA 90 (2017) www.bendrinekalba.lt ISSN 2351-7204 |5 laukakmenis/118,122,132,137,141,145,157,159,9999 po:noun laukan po:adverb laukas/1,3,7,10,12,14,20,21,30,9999 po:noun Laukavičienė/738,740,745,9999 po:noun_family_name ... svečias/1467,1767,1775,1781,1784,1841,9999 po:adjective svečias/71,73,85,93,98,100,106,116,9999 po:noun svečiavimasis/1308,1310,1314,1315,1317,1319,9999 po:noun_reflexive Svečiulienė/738,740,745,9999 po:noun_family_name ... Gaidulis/118,122,132,141,145,157,9999 po:noun_family_name Gaidulytė/738,740,745,749,754,760,9999 po:noun_family_name gaidys/264,268,278,280,284,288,300,302,9999 po:noun Gaidys/264,268,278,284,288,300,9999 po:noun_family_name peilinis/2036,9999 po:adjective peilis/118,122,132,137,141,145,157,159,9999 po:noun peiliukas/1,3,8,10,12,14,20,21,30,9999 po:noun Peipus/444,446,452,9999 po:noun_geographic_name 2. ÁBRA. A ... szóalakok .dic fájljának részlete. A perjel utáni számok a címezhető ragozási szabálycsoportokra mutató hivatkozásokat jelölik. Piros színnel kiemelve láthatók a 3. ÁBRÁN bemutatott szabálycsoportokra mutató hivatkozások. A 3. ábra a litván nyelv ragozási szabályait tartalmazó .aff fájl néhány részletét mutatja be: SFX 21 Y 1 SFX 21 as uosna . is:Masc_Pl_Il ... SFX 98 Y 2 SFX 98 as ai . is:Masc_Pl_Nom SFX 98 as ų . is:Masc_Pl_Gen ... SFX 264 Y 6 SFX 264 is is . is:Masc_Sg_Nom SFX 264 ys ys . is:Férfi_Egy_Nom SFX 264 is žio . is:Férfi_Egy_Gen SFX 264 ys žio . is:Férfi_Egy_Gen SFX 264 ai ai . is:Férfi_Több_Nom SFX 264 ai ų . is:Masc_Pl_Gen ... SFX 145 Y 12 SFX 145 is iams . is:Masc_Pl_Dat SFX 145 ys iams . is:Masc_Pl_Dat SFX 145 is iam . is:Masc_Pl_Dat_short SFX 145 ys iam . is:Masc_Pl_Dat_short SFX 145 is ius . is:Masc_Pl_Acc SFX 145 ys ius . is:Masc_Pl_Acc SFX 145 is iais . is:Masc_Pl_Inst SFX 145 ys iais . is:Masc_Pl_Inst SFX 145 is iuose . is:Masc_Pl_Loc SFX 145 ys iuose . is:Masc_Pl_Loc SFX 145 is iuos . is:Masc_Pl_Loc_short SFX 145 ys iuos . is:Masc_Pl_Loc_short 3. ÁBRA A ragozási szabályok .aff fájlrészletei. Kiemelve néhány szabály, amelyeket a morfológiai elemzés szemléltetésére használunk a továbbiakban. VIRGINIJUS DADURKEVIČIUS. Lietuvių kalbos morfologija atvirojo kodo hunspell platformoje |6 BENDRINĖ KALBA 90 (2017) www.bendrinekalba.lt ISSN 2351-7204 A példákban megadott nyelvleírást és a szabványos (nyelvfüggetlen) Hunspell-elemzőeszközöket használva Jono Jablonskis mintaszavaira a következő választ kapnánk (lásd: 4. ábra. ). 4. ÁBRA A szavak morfológiai elemzésének példája 2. A MUNKA MENETE ÉS EREDMÉNYEI Amikor már elkészül egy teljes körű nyelvleírás Hunspell-formátumban (azaz létrejönnek a megfelelő .dic és .aff fájlok), gyakorlatilag korlátlan lehetőségek nyílnak a gyakorlati alkalmazásokra – a helyesírásvagy nyelvtan-ellenőrzéstől kezdve egészen az intelligens információkereső rendszerekig. A litván nyelv meglehetősen összetett morfológiája (sok szabály és szabálycsoport), valamint annak szükségessége miatt, hogy a lemmák jegyzékét a mai írott litván nyelv valós állapotát tükröző, nagy (több mint 1 milliárd szavas) korpuszokhoz igazítsák, az első próbálkozásoktól egy zökkenőmentesen működő morfológiai változat létrehozásáig körülbelül 5 évre volt szükség. A cikkben korábban bemutatott példák inkább szemléltető jellegűek, és csupán az ötlet megértését szolgálják; a valóságban a szabályok és csoportjaik sokkal összetettebbek, különösen azok, amelyek az igékhez kapcsolódnak. A morfológia létrehozási idejének lerövidítése és a több ezer szabály leírása, valamint a lemmákhoz való hozzárendelése során előforduló hibák elkerülése érdekében először egy a Hunspell-specifikációkban megköveteltnél absztraktabb kezdeti morfológialeírás készült (a szabályok – MS Excel-táblázatban, a lemmák és osztályozásuk – MS Access-adatbázisban). Emellett olyan programeszközök is készültek, amelyek ezeket a kezdeti, az ember számára könnyebben olvasható és egyszerűbben értelmezhető struktúrákat automatikusan .aff és .dic fájlokká, illetve az alkalmazás sajátosságai által meghatározott más 8 formátummá alakítják át. A litván .aff és .dic fájlok legújabb verziója a szerző GitHub-oldalán érhető el. A morfológia formalizálásának teljes folyamata során a következő fő forrásokat használták: 8 Prieiga internete: https://github.com/dadurka/hunspell_morphology_lt. VIRGINIJUS DADURKEVIČIUS. A litván nyelv morfológiája a nyílt forráskódú hunspell platformon BENDRINĖ KALBA 90 (2017) www.bendrinekalba.lt ISSN 2351-7204 |7 1) A kortárs litván nyelv grammatikája (DLKG 2006); 2) Vytauto Didžiojo universiteto (toliau – VDU) Dabartinės lietuvių kalbos tekstynas 9 – ~140 millió szó; 3) A Vilniusi Egyetem gépi fordítási 10 korpusza – ~800 millió szó, ~4 millió egyedi; 4) A Litván Köztársaság Seimasának (a 11 továbbiakban – LRS) dokumentumai – ~400 millió szó, ~1 millió. egyedi; 5) A jelenlegi litván nyelv szótára (DŽ 2006) – ~60 ezer címszó; 6) A litván nyelv szótára – 12 ~500 ezer szócikk; 7) A nemzetközi szavak szótára (VTŽŽe) – ~22 ezer címszó; 8) A litván vezetéknevek szótára (LPŽ) (~80 ezer vezetéknév). Összesen hozzávetőleg 5000 címezhető szabálycsoportot (18 000 egyedi szabályt) állítottak össze. Az 5. ábra mutatja be, hogyan oszlanak meg a szabálycsoportok a beszédrészek szerint. 5. ÁBRA A ragozási szabálycsoportok eloszlása szófajok szerint A .dic fájl (szótár) 171 000 lemmából állt. A lemmák szófajok szerinti megoszlását a 6. ábra szemlélteti. 9 Prieiga internete: http://tekstynas.vdu.lt/tekstynas/. 10 Prieiga internete: https://www.versti.eu/. 11 Prieiga internete: http://www.lrs.lt/. 12 Prieiga internete: http://www.lkz.lt/. Főnevek (370) Melléknevek (238) Számnevek (55) Névmások (64) Igék (4161) Határozószók (13) VIRGINIJUS DADURKEVIČIUS. A litván nyelv morfológiája a nyílt forráskódú Hunspell platformon |8 6. BENDRINĖ KALBA 90 (2017) www.bendrinekalba.lt ISSN 2351-7204 ÁBRA A lemmák szófajok szerinti megoszlása a hibás, nem litván, nem ajánlott, sértő, használaton Vykdant atranką buvo apsiribojama tiktai taisyklinga šiuolaikine lietuvių kalba ir vengiama kívüli szavak esetében. A tulajdonneveket további kategóriákba sorolták: vezetéknevek, keresztnevek, földrajzi nevek és egyéb esetek. Ez a kiválasztás megkönnyíti a létrehozott morfológia alkalmazását a helyesírás ellenőrzésére, és lehetővé teszi, hogy az elemzés eredményei könnyebben alkalmazhatók legyenek a szövegelemzés későbbi szakaszaiban (szintaxis, a megnevezett entitások felismerése, indexelés és keresés). Az újonnan létrehozott morfológiai elemző pontossága mintegy 98 százalék, vagyis a morfológiai elemző átlagosan 100 szóból 98-at helyesen értelmez (Kapočiūtė-Dzikienė és mtsai 2017). A fel nem ismert szavak fennmaradó 2 százalékát leggyakrabban helyesírási hibák, más nyelvek szavai (utónevek, vezetéknevek, idézett kifejezések stb.), nem ajánlott, nem normatív szavak, valamint olyan helyes szavak alkotják, amelyek nem kerültek be a lemmák jegyzékébe. 3. GYAKORLATI ALKALMAZÁS 3.1. A VDU szintaktikai-szemantikai elemzőrendszere Az újonnan létrehozott litván morfológiát a Hunspell platformon 2011–2015-ben a VDU szintaktikai-szemantikai elemzőrendszerében alkalmazták helyesírásés nyelvtan-ellenőrzésre, valamint morfológiai és szintaktikai 13 szövegelemzés elvégzésére (lásd a 7. ábrát). A morfológiai elemzést hibrid statisztikai-szabályalapú egyértelműsítéssel egészítették ki (rejtett Markov-modell, az arany standard alapján közelített trigramvalószínűségek, Viterbi-algoritmus, néhány kivétel). A morfológiai elemzésben alkalmazott egyértelműsítésről bővebben Jurgita Kapočiūtė-Dzikienė, Erika Rimkutė és Loïc Boizou publikációja ír (2017). 13 Online elérhető: http://semantika.lt/SyntaticAndSemanticAnalysis/Analysis. Főnevek (közszók) (41820) Főnevek (tulajdonnevek) (73697) Melléknevek (14552) Számnevek (153) Névmások (53) Igék (34662) Határozószók (3850) Egyéb (2290) VIRGINIJUS DADURKEVIČIUS. A litván nyelv morfológiája a nyílt forráskódú Hunspell platformon |9 7. ÁBRA BENDRINĖ KALBA 90 (2017) www.bendrinekalba.lt ISSN 2351-7204 A litván nyelv Hunspell morfológiájának alkalmazása a Vytautas Magnus Egyetem szintaktikai-szemantikai elemzőrendszerében 3.2. Az LRS jogszabály-nyilvántartás keresőrendszere 2011–2013-ban az új litván nyelvi morfológia létrehozásával párhuzamosan annak alkalmazása is zajlott az LRS Hivatal jogszabály-nyilvántartási keresőrendszerében. Általában ilyenkor az összes 14 dokumentum minden szavát a lemmájára cserélik, és megjegyzik, hogy hol melyik lemma szerepelt. A sistemose dar prieš vykdant pirmąją paiešką visi dokumentai yra indeksuojami lemuojant, t. y. keresési lekérdezés végrehajtása előtt annak szövegét is ugyanilyen módon lemmatizálják, ezért később nemcsak a lekérdezésben szereplő szóalak található meg, hanem az adott szó bármely más alakja is, amely a keresett dokumentumok között szerepel. Mivel ebben a rendszerben nem lehetett közvetlenül felhasználni a .dic, .aff adatokat, a rendszer számára szükséges eredeti formátumot (egy szövegfájlt, amelynek minden sora [lemma] [szófaj]  [alakok listája]) a korábban említett elsődleges morfológiai leírásból generálták. Bár ebből a leírásból mintegy 15 millió elméletileg lehetséges szóalak generálható, a keresőrendszer belső korlátozásai miatt ezek közül csak körülbelül 1 millió leggyakoribbat használták fel. Ez a megoldás bevált, a keresés meglehetősen zökkenőmentesen működik, és mindmáig használják (lásd a 8. ábrát). 14 Online elérhető: https://www.e-tar.l.t