You are on page 1of 39

UNIVERZITA KOMENSKHO V BRATISLAVE FAKULTA MATEMATIKY, FYZIKY A INFORMATIKY

Pravidl na kontrolu slovenskej gramatiky

BAKALRSKA PRCA

tudijn program: Aplikovan informatika tudijn odbor: 9.2.9 Aplikovan informatika koliace pracovisko: Katedra aplikovanej informatiky kolite: Milo, rmek, prof. Ing. PhD.

Bratislava 2010 Lubo Lehotsk

Poakovanie

Chcem sa poakova svojmu koliteovi prof. Ing Miloovi rmekovi, PhD. za odborn a ochotn pomoc pri vypracovan tejto prce. Moje vek poakovanie patr aj Zdenkovi Podobnmu, na ktorho som sa mohol vdy obrti s technickmi otzkami. V neposlednom rade akujem aj vetkm, ktor mi vytvorili priestor a podporovali ma pri vypracovan prce. Rodine, priateom

akujem

estn prehlsenie

estne vyhlasujem, e zadanie bakalrskej prce som vypracoval pod odbornm vedenm svojho kolitea prof. Ing Miloa rmka, PhD. s pouitm citovanch zdrojov.

V Bratislave da:

Lubo Lehotsk

Abstrakt
Nzov prce: Pravidl na kontrolu slovenskej gramatiky Autor: Lubo Lehotsk Katedra: Katedra aplikovanej informatiky Fakulta: Fakulta matematiky, fyziky a informatiky Univerzita: Univerzita Komenskho v Bratislave Vedci prce: doc. Ing. Milo rmek PhD. Rozsah: 39 Miesto, rok: Bratislava, 2010 Tto bakalrska prca sa zaober gramatickm korektorom LanguageTool. Opisuje jeho truktru, technick architektru a praktick pouitie. Hlavnm cieom prce je vytvorenie pravidiel na kontrolu gramatiky slovenskho jazyka. Okrem toho je jej ambciou aj priblenie aplikcie potencilnym spolupracovnkom na tomto komunitnom open-source projekte. V tejto oblasti prca pribliuje zsady tvorby novch pravidiel, monosti vvojra, i spsob aktivcie pravidiel v pouvateovej verzii programu OpenOffice a v neposlednom rade sprstupnenie novej verzie pravidiel irokej verejnosti. Okrem toho prca obsahuje aj prklady vytvorench pravidiel s popisom monch gramatickch situcii, v ktorch spene aj nespene funguj. Kov slov: LanguageTool, OpenOffice, gramatick korektor, tagset slovnk

Abstract
This bachelor`s thesis deals with the grammar corrector LanguageTool. It describes its structure, technical architecture and practical use. The main aim of this paper is to create rules for checking the grammar of the Slovak language. Except of previous function, thesis's ambition is to bring the application closer to potential co-workers on this communitarian open-source project. In this area, the thesis tries to explain the principles of creating new rules, possibilities for developers and the method of ruler`s activation in the user version of OpenOffice. The last, but not the least point of this thesis is to make a new version of the rules available for the general public. In addition, the work includes examples of established rules with description of possible situations in which they operate successfully or unsuccessfully. Keywords: LanguageTool, OpenOffice, grammar corrector, tagset dictionary

Obsah
vod .................................................................................................................7 1. Ciele prce....................................................................................................8 2. Aplikcia LanguageTool ............................................................................9
2.1. Charakteristika.............................................................................................................9 2.2. Rozdelenie textu........................................................................................................10 2.3. Morfologick analyztory.........................................................................................10 2.4. Prstupy na kontrolu gramatiky.................................................................................12 2.4.1. Kontrola na zklade analzy syntaxe.................................................................12 2.4.2. Kontrola zaloen na tatistike a pravdepodobnosti..........................................13 2.4.3. Kontrola zaloen na pouit pravidiel. ............................................................14 2.5. Pouitie v praxi..........................................................................................................15 2.5.1 Samostatn aplikcia...........................................................................................16 2.5.2. Sas balka OpenOffice..................................................................................16

3. Vvoj slovenskej verzie.............................................................................17


3.1. Vchodisk................................................................................................................17 3.2. Tvorba pravidiel .......................................................................................................18 3.2.1. XML v skratke ...................................................................................................19 3.2.2. Zsady tvorby pravidiel .....................................................................................21 3.2.3. Sbor grammar.xml............................................................................................21 3.2.4 Pravidl v jazyku Java.........................................................................................29 3.2.5. Kompilcia.........................................................................................................31 3.2.6. Testovanie..........................................................................................................32 3.2.7. Aktivcia v sasnej verzii LT...........................................................................36 3.3. Popis vytvorench pravidiel......................................................................................36

Zver...............................................................................................................38 Pouit literatra...........................................................................................39

vod
V dnenej dobe existuje takmer v kadej oblasti niekoko druhov softvru, medzi ktorm si me ben pouvate slobodne vybra. Vina pouvateov vak asto siaha po najznmejej, no nie vdy najkvalitnejej verzii, a to najm v prpade, ke nie je finanne limitovan. Snaha vekch spolonost poskytn zkaznkovi kompletn rozsah softvru, pre ben pouitie v oblasti grafickch editorov, multimedilnych prehrvaov, i kancelrskych balkov, postupne vytvra zvislos zkaznka na tvorcovi. Finann motivcia je dnes pre vek mnostvo koncovch pouvateov jedinou cestou, ktorou sa dostvaj do kontaktu s produktmi s otvorenou licenciou. Ak teda autori tohto druhu aplikcii (zva vyvjanho na bze opensource licenci) chc oslovova pouvateov aj inou cestou ako je finann vhodnos, ostva im monos ponknu kvalitnejiu alternatvu ku korporatvnym produktom. Jednm z tchto produktov je aj kancelrsky balk OpenOffice, ktormu sa spene dar zskava si novch pouvateov na kor najznmejieho kancelrskeho softvru MS Office od spolonosti Microsoft. Dnes je OpenOffice jeho plnohodnotnou nhradou a mnostvo zanietench spoluautorov pracuje na jeho alom zdokonalen. OpenOffice obsahuje vek mnostvo prdavnch modulov, ktor roziruj jeho monosti, priom jednm z nich je aj LanguageTool (LT). Ide o aplikciu na kontrolu gramatiky pomocou preddefinovanch pravidiel. Dnes ponka komplexn podporu pre viacer jazyky a zlepenie stavu v oblasti sloveniny bolo mojou motivciou, preo som sa rozhodol zvoli si spoluprcu na tomto projekte ako sas mojej bakalrskej prce.

1. Ciele prce
Prvotnm a hlavnm cieom mojej prace bolo vytvorenie sady pravidiel na kontrolu slovenskej gramatiky pre spomnan program LanguageTool. Popisu asti z nich sa venujem v poslednej podkapitole prce, priom uvdzam aj prklady, v ktorch s tieto pravdil inn alebo neinn. Okrem toho si vak moja prca kladie za cie aj oboznmenie sa so samotnou aplikciu, jeho architektrou, spsobom kontroly a monosou pouitia v praxi. Tejto oblasti je venovan cel druh kapitola. Kee moja prca bola sasou vieho komunitnho projektu a nie je v schopnostiach jednotlivca pokry tak obsiahly problm ako je defincia a aplikcia vetkch jazykovch problmov v jazyku natoko morfologicky pestrom akm je slovenina, poslednm cieom, ktor je definovan v mojej prci, bolo ozrejmenie zkladov tvorby pravidiel, ich testovania, kompilcie a monosti zalenenia do novej verzie existujceho programu. V tejto oblasti sa prca tylizuje do pozcie akejsi prruky pre potencionlneho spoluautora, priom sa dan oblas vyskytuje v podkapitole 3.2.

2. Aplikcia LanguageTool

2.1. Charakteristika
Program LanguageTool bol vytvoren Danielom Naberom v jazyku Python ako jeho diplomov prca a neskr bol pretransformovan a rozren v jazyku Java. Daniel Naber je v sasnosti aj hlavnm sprvcom celej aplikcie. Okrem neho vak konkrtne pravidl pre jednotliv jazyky spravuj loklni vedci. LanguageTool bol vyvjan predovetkm pre projekt OpenOffice.org, avak me by pouit aj ako samostatn aplikcia alebo funguje na bze server-side procesu. Nov API korektra programu OpenOffice od verzie 3.0 bola uveden v zkej spoluprci s autorom a umouje hlbok integrciu LanguageTool do kancelrskeho balka. Je potrebn zdrazni, e niektor rozhodnutia v oblasti dizajnu projektu boli aplikovan s hlavnm ohadom na praktick rieenia. Naprklad, do vahy sa brali a ber len rieenia, ktor mu by ahko udriavan a zavdzan po malch krokoch. V oktbri 2008 zskal projekt LanguageTool ocenenie Gold Award spoloenstva pre inovciu OpenOffice (OpenOffice.org Community Innovation Program) sponzorovan spolonosou Sun Microsystem Inc. Na strnke rozren programu OpenOffice bolo zahjench asi 145 tisc uniktnych sahovan programu LanguageTool.

Podpora jazykov v sasnosti


LT v sasnosti podporuje 18 jazykov na rznych rovniach. Niekoko novch balkov je v poiatonej fze (slovenina, slovinina, vdina, islandina), zatia o niektor sa u dostali na vemi vysok rove (posk, taliansky, rusk, rumunsk, franczsky, holandsk, nemeck a anglick).

2.2. Rozdelenie textu


LanguageTool napsan v Jave implementuje nasledujci pracovn postup. Vstupn text je rozdelen (segmentovan) na jednotliv vety a slov. Vety bvaj oddelen niektormi pecifickmi interpunknmi znamienkami, ktor program rozpozn a nsledne rozdel text na konkrtne vety. Kee tento prstup nie je stopercentn je potrebn oetri mon vnimky ako naprklad to, e bodka, ktor sa najastejie pouva na oddelenie viet m v jazykoch aj in funkcie a vyskytuje sa aj v zpise skratiek i dtumov. alie znaky 9

primrne uren na ukonenie vety ako ? alebo !, sa v prpade, e ide o priamu re vyskytuj aj v strede a cel veta pokrauje alej. Na oetrenie tchto prpadov je nutn podrobnejia analza okolia tchto znakov, ktor je v LT implementovan. Oddeova slov Tokenizer jednoducho rozdel vstupn reazec na jednotliv slov na zklade rozpoznania medzery alebo interpunkcie (v niektorch jazykoch ako je naprklad holandina, apostrof, ak sa nevyskytuje spolu s medzerou neoddeuje 2 slov). Prstup k pomlkm sa v jednotlivch jazykoch li, v niektorch z nich je pomlka povaovan za as slova. Hoci takto zaobchdzanie so vstupnm textom je vemi jednoduch, pracuje rchlo a pre dan potreby je dostaujce. Je vhodn a potrebn podotkn, e architektra programu umouje poui in tokenizer pre in jazyk, ako je naprklad thajsk, ktor si vyaduje pouitie lexiknu pre rozdelenie textu na jednotliv slov.

2.3. Morfologick analyztory


Na alie spracovanie textu, u rozdelenho na jednotliv slov, sli tzv. morfologick analyztor. Ten prirad slovm slovn druhy a im prislchajce gramatick kategrie, ktor reprezentuje pecifickmi morfologickmi znakami. Samozrejme, e jednotliv znaky s prideovan na zklade danost konkrtneho jazyka. Niekedy analyztor nedoke rozpozna dan slovo. Tto situcia sa vyskytuje najm ak ide o slovo cudzieho pvodu, prpadne slangov i argotov vraz. Takmuto slovu nemono priradi zodpovedajcu znaku. Vtedy me analyztor slovu priradi przdnu znaku, ktor len informuje ostatn nstroje spracovania textu, e dan slovo nemono konkrtne uri. Inm druhom prstupu je snaha analyztora o pridelenie znaky nerozpoznanmu slovu na zklade jeho okolia alebo jeho vlastnost. Najefektvnejou cestou je kombincia oboch monost. LanguageTool v prpade neidentifikovanho slova pouva przdnu znaku.
POS Znakova (Pos Tagger)

Part-of-speech znakova je modul, ktor postupne prechdza jednotliv asti vety, ktor s oddelen interpunkciou alebo medzerami, a na zklade zhody so slovnkovm vrazom (POS tagset slovnk), im pridel konkrtne morfologick znaky.

10

Zdroje pre part-of-speech (POS tagset) slovnky pochdzaj z rznych open-source projektov. Vina z nich je nejakm spsobom odvoden z vone dostupnch vsledkov jazykovednho vskumu, o je aj prpad slovenskej verzie. Dta pre slovensk tagset slovnk, pouit v LT, pochdzaj z Jazykovednho stavu udovta tra Slovenskej akadmie vied. Rune vytvoren slovnky programu na kontrolu gramatiky ispell zvyajne vyjadrujce morfologick vlastnosti slov, s tie relatvne ahko prispsoben pre potreby POS tagset slovnkov (zkladn tvar lemma, je u definovan v ispell slovnku). Znaky pridelen taggerom zvisia od pouitho lexiknu. Inmi slovami, neexistuje iadny veobecn POS tagset slovnk, ktor by mohol by zdiean viacermi jazykmi. Spsob, akm s prideovan konkrtne znaky v slovenskom tagset slovnku, njdeme na adrese http://korpus.juls.savba.sk/files/tagset-www.pdf. Tmto rieenm sa autori vyhli nutnosti konverzie jednotlivch jazykovch systmov do spolonej tagsetu. Popri POS znakch, ktor s zaloen a prideovan na zklade jazykovej prslunosti, existuje ete niekoko pecilnych trukturlnych znaiek. Tie s pouvan automaticky pre vetky jazyky. Slia na oznaenie zaiatku (SEND_START) a konca vety (SEND_END), zaiatku (PARA_START) a konca odseku (PARA_END) a tie na oznaenie neznmeho slova (UNKNOWN). Naprklad, slovu chlap prirad tagger pouitm slovenskho tagset slovnka nasledujce znaky: SSms1.
Disambiguator

Pre jazyky s bohatou morfolgiou ako je slovenina, je priradenie sprvnych slovnch druhov zvyajne jednoduchie ako naprklad pre anglitinu, kde rovnak slov mu vystupova v lohe slovies, podstatnch mien a prdavnch mien. V slovenine je takto nejasnos skr zriedkavosou. Tto nedokonalos riei zjednocovacie rozhranie, ktorm sa budeme zaobera neskr. Disambiguator alebo zjednocova dostva na vstup zoznam slov interpretovanch morfologickmi znakami. Jeho lohou je odstrnenie nesprvnych alebo zbytonch morfologickch znaiek. V slovenskom jazyku je najastejie potrebn pri zhode tvaru viacerch slovnch druhov. Prkladom je slovo vrchn, ktor me by interpretovan ako prdavn, ale aj podstatn meno. Vsledkom jeho innosti je kompletne pripraven zanalyzovan veta, na ktor je mono uplatni konkrtne pravidl.

11

Obrzok 1.1: Schma architektry LanguageTool

2.4. Prstupy na kontrolu gramatiky


V sasnosti existuj tri spsoby ako vykona kontrolu gramatiky:

2.4.1. Kontrola na zklade analzy syntaxe


Analyztor sa v tomto prpade sna k vete pristupova z jazykovednho hadiska a poka sa vytvori syntaktick strom. Ak sa to spene podar, ozna vetu za gramaticky korektn. V prpade, e sa strom z nejakho dvodu nepodarilo zostavi, vyhlsi vetu za chybn. Vhodou tohto postupu je skutonos, e potencilne me zachyti gramatick chyby, ktor nie s pecifick uritou postupnosou slov vo vete. Na druhej strane vytvorenie plnho formlneho popisu uritho jazyka je vemi nron loha. (Liko, 2007, str. 10)

2.4.2. Kontrola zaloen na tatistike a pravdepodobnosti.


Tto metda priamo svis s pouitm tatistickch metd v morfologickej analze. Vychdza z toho, e postupnosti uritch morfologickch znaiek s vemi ast. Naopak in s tak zriedkav, a tak takto postupnosti slov mono oznai ako chybu. Jej spenos je zrejm naprklad v anglitine a inch jazykoch, kde sa mono spoahn na pevn truktru vety a ustlen slovn spojenia. (Liko, 2007, str. 10) tatistick korektra me ma pozitvny aj negatvny druh prstupu. Pozitvny prstup had vzory asti rei alebo slov, ktor boli asto zaznamenan v chybovom slovnku. 12

Negatvne pristupujci spsob had reazce, ktor spolu nemu navzjom vytvra vzory slovnch spojen alebo tatistick anca na ich vytvorenie je vemi nzka. Jazykov modely pouvan na dan ely musia by komplexn a relatvne bez chb. Monos relne pouitenej kontroly gramatiky zaloenej na pozitvnom tatistickom prstupe si vyaduje vybudovanie vekho a reprezentatvneho sboru chybovch textov (korpus) pre dan jazyk. Pre vinu jazykov boli vydan len menie vzorky v rznych obdobiach, nie vak samostatn korpus. Je samozrejme vhodn, aby takto chybov korpus vznikol. Je mon, e niektor, na webe zaloen metdy samovzdelvania, by mohli by na tento el pouit. V poslednej dobe bola vyvinut nov metda pre spracovanie vone dostupnch zdrojov, ako je naprklad revidovanie histrie Wikipdie a vpisy chb z nej. Experimenty vak oskoro preukzali, e aj vek revzie histrie obsahuj pomerne obmedzen informcie o chybch. Dvodom je, e ani kompletn chybov korpus, ktor vznikol z pouvania internetu nie je dostatone komplexn na to, aby mohol v plnom rozsahu zastupova sbor najastejch chb v jazyku. Naprklad, cel revzia poskej Wikipdie v rozsahu niekokch gigabajtov, mala za vsledok len niekoko sto dostatone zdokumentovanch chb, zva preklepov. (Milkowski, 2009, str. 2) Inou monosou na vytvorenie programu na kontrolu gramatiky je negatvny tatistick prstup. Avak na tento prstup je potrebn text bez chb. Vzhadom na obmedzenia, ktor vyplvaj z autorskch prv, nrodn jazykov korpusy (vyvjan ttnymi intitciami predovetkm s vedeckm elom) s len zriedka dostupn vo forme benho textu, o prakticky znamen, e ich nie je mon optovne vyui na potreby strojovho uenia. Z tohto dvodu je potrebn vybudova presn korpus z nechrnench sborov. Navye nrodn korpusy vinou nie s presnm odrazom sasne pouvanho jazyka. Okrem toho overenie, i texty v nrodnch korpusoch s korektn, vyaduje manulnu kontrolu (t je vak nkladn) alebo existujci rozsiahly program na kontrolu gramatiky (m sa nm vytvoril zaarovan kruh). Obecne by tto metda mohla by vhodn pre jazyky, kde vek s k dispozcii vek, korektn a vone dostupn daje. Jednm z tchto jazykov je anglitina, a to vaka elektronickej kninici ako je Projekt Gutenberg, kde tisce dobrovonkov skutone denne kontroluj a istia dta. Dta pre ostatn jazyky vak ete dan projekt nezaha. Tto metda si teda vyaduje prli vea prce, a to len na prpravu zdrojov.(Milkowski, 2009, str. 3) 13

Poslednm variantom vyuvajcim tatistick metdy je ten, ktor opakovane vyuva na kontrolu frekvencie vskytu vrazov internet pomocou vyhadvaa (napr.: Google). Tto metda nie je vhodn na kadodenn kontrolu bene pouvanch jazykovch vrazov. Be toti vemi pomaly me ignorova niektor ast chyby, ktor doku na svojou frekvenciou vskytu na internete previ niektor vrazy, najm ak ide o ojedinel slov. Dan metda je vhodn prevane na skmanie monch slovnch spojen.

2.4.3. Kontrola zaloen na pouit pravidiel.


V tomto prpade sa slovm vo vete pridelia o najpresnejie morfologick znaky. Potom s na vety aplikovan pravidl. Na rozdiel od predchdzajceho spsobu, pravidl s vytvran rune a mono v nich vyjadri skuton gramatick pravidl pre dan jazyk. (Liko, 2007, str. 11) Aj gramatick korektor zaloen na pouit pravidiel m pozitvny a negatvny prstup. Pri negatvnom prstupe je potrebn zavies formlnu gramatiku vyjadren v pravidlch alebo vzoroch. Doteraz mnostvu jazykov chba kompletn formlna gramatika. Pozitvne pristupujce metdy s zaloen na intuitvnom poat gramatiky a tylistickch chb. V praxi pouva rune vybran pravidl na zklade priemernho jazyka uvatea, jeho intucie, jazykovej terie i slovnkovej analzy. Vaka tomu me pozitvne pristupujci korektor gramatiky inne poukazova na najzvanejie a najastejie na vyskytujce chyby. LanguageTool vyuva prve tto metdu. Jednm z dvodov, preo s tatistick prstupy pre open-source projekty ako LT menej vhodn je, e pre neprofesionlov je udriavanie tatisticky postavench zdrojov a zbieranie korektnch slovnkovch dt aie, ako psanie deklaratvnych pravidiel. Rozhodnutie o nezaraden tatistickch ast bolo jednm z hlavnch pri vytvran dizajnu systmu, v zsade by vak mohli by tatistick nstroje rovnako inn alebo dokonca lepie ako systm zaloen na pravidlch. Kee v sasnosti chba truktra, ktor by podporila rozvoj tatistickch metd, autori sa rozhodli nezaradi ich. Toto by sa vak mohlo v budcnosti zmeni, v prpade, ak bude k dispozcii dostatone jednoduch nstroj na pouitie neprofesionlmi. V architektre LanguageTool nie je ni, o by zabrnilo pridaniu tatistickch zdrojov alebo formlnej gramatiky, ktor by mohli by jednoducho pouvan v schme inch pravidiel.

14

2.5. Pouitie v praxi


Program LanguageTool je vone k dispozcii na adrese: http://www.languagetool.org/download/LanguageTool-1.0.0.oxt. V prpade, ak u mme naintalovan kancelrsky balk OpenOffice a pouvame operan systm MS Windows, sta klikn na ikonu a program sa sm naintaluje ako zsuvn modul kancelrskeho balka. V prpade, ak pouvame operan systm Unix, v niektorej jeho distribcii a jednoduch kliknutie na intalciu nepostauje, je potrebn spusti program OpenOffice a zvoli menu Nstroje/Sprva rozren. Nsledne kliknime na tlaidlo Prida a zvolme dan .oxt sbor. Po intalcii je potrebn OpenOffice retartova. LanguageTool je vak mon spusti aj ako samostatn aplikciu s vlastnm grafickm rozhranm, a to bu kliknutm na sbor LanguageToolGUI.jar (ten zskame rozbalenm .oxt) alebo cez prkaz: java -jar LanguageToolGUI.jar.

2.5.1 Samostatn aplikcia


Spomnan verzia LanguageTool ako samostatnej aplikcie poskytuje pouvateovi monos korekcie gramatiky bez potreby intalcie akhokovek alieho softvru. Vhodou samostatnej aplikcie je taktie intuitvne ovldanie a kompaktnos a v neposlednom rade aj neprtomnos obmedzen tkajcich sa rozhrania kancelrskeho balka. Hlavnou nevhodou je vak strata prslunosti k znmemu kancelrskemu balku a s tm spojen niia monos jeho distribcie a uplatnenia. Samotn LT vyuva dva druhy pravidiel : XML a Java. Z hadiska vvoja XML pravidiel je nespornou vhodou samostatnej verzie aj to, e na zalenenie novch pravidiel sta prepsa extern XML sbor, nachdzajci sa v prieinku rules/xx kde xx oznauje skratku konkrtneho jazyka, v prpade sloveniny je to teda sbor rules/sk/grammar.xml. Takto jednoducho prepsan sbor je u aplikciou priamo pouvan a nov pravidl s okamite k dispozcii. Pokia ide o Java pravidl, na pridanie novej verzie je nutn prava prslunho java sboru alebo vytvorenie novho sboru (ak ide o nov uniktne pravidlo) a nsledn kompilcia. Podrobnm popisom programu z pohadu vvojra sa budem zaobera neskr v kapitole Zsady tvorby.

15

2.5.2. Sas balka OpenOffice


OpenOffice.org je vone dostupn a riten kancelrsky balk, ktor je preloen do viac ako 30-tich jazykov a dostupn na vetkch hlavnch potaovch platformch (Microsoft Windows, Mac OS X, GNU/Linux, Solaris). Dnes ho pouvaj desiatky milinov pouvateov na celom svete. OpenOffice je kompatibiln s mnohmi inm kancelrskymi balkmi. Medzi ne patri aj najrozrenej balk od firmy Microsoft, Microsoft Office a tak je v om mon pracova aj so sbormi, ktor boli vytvoren spomnanm programom. Dokumenty vytvoren v rmci balka OpenOffice sa daj uloi v OpenDocument formte, ktor je novm medzinrodnm ISO tandardom pre kancelrske balky. Intalcia jednotlivch ast balka je jednoduch a intuitvna, prebieha prebieha poda zvyklost v danom operanom systme. Kee je vyvjan ako Open Source program, je ho mon pouva a vone ri zadarmo. Od verzie 2.0 obsahuje balk 6 sast a to : textov editor Writer, tabukov procesor Calc, kresliaci nstroj Draw, program na tvorbu prezentcii Impress, program na prcu s databzou Base a program na spracovanie matematickch vzorcov a opercii Math. Vaka monosti poui LanguageTool ako zsuvnh modul OpenOffice sa predovetkm zvila anca na jeho vyuitie, ktor bude pravdepodobne rs vzhadom na stpajcu popularitu Open Source kancelrskeho balka. Pouvate LanguageTool tak zskava monos vyui prostriedky OpenOffice a prvotn pouvate OpenOffice zasa aliu monos skvalitnenia sluieb balka. Obmedzujcim z hadiska LanguageTool je, e rozhranie kancelrskeho balka nemus implementova vetky monosti LT. V prpade, ke pouvate chce striktne vyui len sluby gramatickho korektora, nie je spojenie s kancelrskym balkom vhodn, pretoe nti pouvatea k intalcii inho, v tomto prpade nie nevyhnutnho softvru, m me djs k neiaducemu ovplyvneniu operanho systmu, i u vyuitm miesta na disku alebo zvenm prevdzkovch nrokov. Z hadiska vvoja a testovania novch pravidiel nie je pre potencilneho vvojra spojenie s kancelrskym balkom nevyhnutnosou, existuj vak aj objektvne priny preo je dan forma vyuitia LaguageTool vhodn. Bliie v kapitole Zsady tvorby.

16

3. Vvoj slovenskej verzie

3.1. Vchodisk
Slovenina ako jeden so slovanskch jazykov predstavuje jednu z vekch vziev pre programy na kontrolu gramatiky. Vina korektorov bola toti vyvinut pre anglick jazyk. Hlavnou rtou slovenskho jazyka je predovetkm bohat morfolgia. Inou pecifickou rtou sloveniny je aj pomerne von poradie slov vo vetch a taktie nedostatok pomcok, ktor by mohli bliie pecifikova jednotliv slovn druhy. V dnenej podobe sa tvar a vlastnosti ohybnch slovnch druhov uruje len pomocnou morfologickch informcii ako s slo, rod i pd a naprklad pri podstatnch a prdavnch mench absentuje prslunos k uritmu vzoru. Vzhadom na spomenut znaky, softvr na spracovanie prirodzenho slovenskho jazyka, ak m zvlda aj oznaovanie frz, mus obsahova aj znakova alebo slovnk so zkladnmi formami slov, ktor doku rozpozna vetky skloovan formy a asti frz. Tieto vak nesm by definovan ako nesvisiace zloky, ktor s pomerne vhodn a spen pri gramatickej korektre anglickho jazyka. Pre sprvnu analzu je vhodou disponova slovnkom obsahujcim gramatick kategrie a mon vzjomn vzby slov. Najdleitejie zmeny v LanguageTool boli vykonan z dvodu pecifickch poiadaviek pri vvoji pravidiel pre posk jazyk. Jedinou vnimkou je francztina, ktor vyadovala pridanie zjednocovacieho rozhrania. Disambiguation (zjednocova) bol zaveden s cieom umoni usmerovanie franczskych pravidiel, ktor vyvjala Agnes Souque na zklade sboru pripravench Myriam Lechelt pre open-source program Gramadoir. Zavedenie alch jazykov u nevyaduje vek zmeny v kde aj ke jednotliv sprvcovia pravidiel navrhli vea monch prav. Uiton nvrhy dostali autori hlavne od autora holandskch pravidiel Ruud Baarsa. (Milkowski, 2009, str. 4) Ako bolo spomenut v predchdzajcej asti, hlbok analzy a pln lingvistick analzy nie s potrebn pre spen korektry. Ovea jednoduchie heuristick pravidl na zklade astch a stabilnch foriem jazykovch chb pracuj vemi dobre. Sloveninu a in slovansk jazyky mono povaova ako osobitne komplikovan prpady, alie jazyky by sa mali do existujcej formy programu jednoducho zapracova. truktra programu zatia nebola pouit pre neeurpske jazyky, take je predasn hovori, i LanguageTool me

17

zahrn akkovek dnes pouvan jazyk, avak autori dfaj, e pre absoltnu vinu jazykov to mon bude. (Milkowski, 2009)

3.2. Tvorba pravidiel


Dnes LanguageTool vyuva na tvorbu pravidiel dva jazyky, a to XML a Java. Java pravidl s definovan v samostatnch sboroch s koncovkou .java. Ide vlastne o jednotliv triedy, ktor pouva hlavn as programu. Niektor Java pravidl s spolon pre vetky jazyky, kee poukazuj na veobecn tylistick chyby, ako je naprklad dvojit medzera i mal psmeno na zaiatku vety. Drviv vina pravidiel je vak pecifikovan ako vzor benho jazyka v XML formte. Na jednej strane, pravidl vyvjan v jazyku Java poskytuj viu flexibilitu, vyaduj si vak hlbie znalosti v oblasti programovania. Na druhej strane, deklaratvne XML pravidl, vyvjan najm v prostred pecializovanch XML editorov, poskytuj neporovnatene lepie monosti na pouvatesk pravy. Jednm z cieov projektu bolo aj rozri komunitu pracujcu na pravidlch a tak sa autori projektu rozhodli pre obohatenie funknosti najm v rozmedz deklaratvnych pravidiel. Toto kontrukn rieenie sa ukzalo ako vemi vhodn: niektor jazyky podporujce LanguageTool disponuj stovkami pravidiel napsanch v XML a nem ani jedno Java pravidlo (franczsky a holandsk jazyk). Vetky XML pravidl s pouvan modulmi vytvorenmi v Jave, ktor porovnvaj jednotliv neprzdne asti vstupnho textu s konkrtnymi vzormi. Cel proces prebieha slovo po slove. V prpade potreby sa uplatuj konkrtne zkladn formy, regulrne vrazy i konkrtne slovn spojenia. Ak sa chce autor vyhn zhode slova a vzoru, me definova vnimku, ktor systm nsledne ako vyhovujcu neidentifikuje. Zhoda slova a prslunho vzoru deklarovanho v XML pravidle je v sasnej dobe zaloen na naivnom linernom prehadvan truktry prvkov v zozname slov konkrtnej vety. Tvorcovia LanguageTool nechc zavdza predasn optimalizciu pred dokonenm funknosti XML pravidiel. Zloitejie prehadvacie postupy s obvykle efektvnejie pri dlhch vstupnch reazcoch. V prirodzench jazykoch sa vak vety s dkou nad 30 slov objavuj zriedka. Porovnvanie textu a vzorov dnes pouvanm spsobom je zd sa uspokojiv, pokia ide o as, a to aj v prpade prce s tisckami pravidiel (ako je to pre francztinu). Schopnos preskoi urit vstupn asti textu, ktorou sa budeme neskr bliie zaobera, znemouje niektor jednoduch optimalizcie naivnho vyhadvacieho 18

algoritmu, ako je naprklad kontrola prvho a poslednho elementu.

V nasledujcich

podkapitolch sa poksime pribli problematiku vvoja pravidiel z pohadu autora tak, aby prpadne mohla tto as prce sli ako mon nvod pre potencilneho pokraovatea i spolupracovnka v tomto komunitnom projekte.

3.2.1. XML v skratke


XML znamen eXtensible Markup Language, v preklade rozriten znakovac jazyk. Bol vyvinut a tandardizovan konzorciom W3C ako pokraovanie jazyka SGML a HTML. Umouje jednoduch vytvranie konkrtnych znakovacch jazykov na rzne ely a irok spektrum rznych typov dajov. Jazyk je uren predovetkm na vmenu dajov medzi aplikciami a na publikovanie dokumentov. (XML slovnk pojmov, 19.5.2010) Zkladnm znakom XML dokumentu je jeho stromov truktra s jednm koreovm prvkom (root element). Samotn dokument sa sklad niekokch vzjomne prepojench prvkov, ktor s zapsan pomocou vznamovch znaiek tagov. Tag je znaka, ktor umouje truktrovanie dokumentu. Tagy s uzatvoren do ostch ztvoriek, priom rozliujeme zaiaton a koncov tag. Element je povaovan za zkladn prvok XML dokumentu. Elementy s ohranien tagmi, na rozdiel od HTML s striktne vyadovan zaiaton aj koncov tagy. Elementy musia by korektne uzatvoren a musia by plne vnoren do inho elementu. Atribty definuj dodaton vlastnosti elementu a zapisuj sa vdy v poiatonej znake element. Jeden element me ma viacero atribtov. Komentre mu by sasou dokumentu, zapisuj sa do ztvoriek < a >. Pouvaj sa na vloenie akejkovek poznmky. Tie mu sli na skrytie asti textu. Pri spracovan dokumentu s ignorovan. (Valentov, 2006, str. 16) Prklad jednoduchho zpisu v XML: <?xml version="1.0"?>
<!DOCTYPE PARTS SYSTEM "parts.dtd"> <?xml-stylesheet type="text/css" href="xmlpartsstyle.css"?> <PARTS> <TITLE>Computer Parts</TITLE> <PART> <ITEM>Motherboard</ITEM> <MANUFACTURER>ASUS</MANUFACTURER> <MODEL>P3B-F</MODEL> <COST> 123.00</COST> </PART> </PARTS>

19

XML je v podstate sbor pravidiel tvorby textovch formtov, ktor umouj truktrova dta. XML takto uahuje potau tvori, ta a zapisova dta a zaisti jednoznanos truktry dt. Za jeho hlavn vhody mono povaova rozritenos, nezvislos na platforme a podporu lokalizcie. Taktie plne vyhovuje tandardu Unicode. Textov formt, v ktorom XML zapisuje truktrovan dta na disk, uahuje vvojrom ladenie programu a umouje udom nahliadnu na dta v textovom editore. Tieto vhody prinaj so sebou zven nroky na vekos sboru. Kompresn programy ako zip alebo gzip vak doku tto nevhodu zmierni. XML dovouje definova nov formt kombinciou a optovnm pouitm inch formtov. Pri ich kombinovan si vak musme dva pozor na monos definovania rovnakch nzvov elementov alebo atribtov. Vobou XML za zklad projektu zska autor prstup k obsiahlej skupine nstrojov a odbornkov so sksenosami v tejto technolgii. Voba XML je nieo podobn ako ke si zvolme SQL pre databzu: musme sce vytvori vlastn databzu a programy na jej obsluhu, ale existuje mnoho nstrojov a ud, ktor nm mu pomc. Kee XML je k dispozcii bez obmedzujcich licennch podmienok, meme vytvori vlastn software pracujci x XML bez toho, aby sme nieo niekomu platili. Rastca podpora a vek poet vvojrov mm navye dva istotu, e sa nemusme viaza k jedinmu vrobcovi softvru. Tto a ale aj predchdzajce spomenut vlastnosti jazyka XML viedla autorov LanguageTool prve k pouitiu XML na tvorbu viny pravidiel, s ktormi pracuje architektra samotnho projektu naprogramovanho v jazyku Java.

3.2.2. Zsady tvorby pravidiel


Zkladn recept na tvorbu pravidiel nartol u samotn autor LanguageTool Daniel Naber takto: 1. Njdi a konkretizuj chybu, ktorou ete nie je oetren v gramatickom korektori. 2. Poui chybn slov alebo slov s celho kontextu na tvorbu pravidla 3. Ak je to mon zoveobecni pravidlo. Poui POS tagov znaky slova namiesto konkrtnych slov. 4. Skontroluj i sa vzor pravidla me vyskytova aj v sprvnej vete. V prpade vekho mnostvo falonm poplachov zru krok 3 a sks to znova. (Naber, 2003, str. 32)

20

Samotn vvoj pravidiel pre slovensk verziu je u len otzkou konkretizcie jazykovho problmu, ktor autor plnuje oetri, a jeho implementcie v XML alebo Jave. Vetky potrebn slovnky i jednotliv Java triedy pracujce so sbormi slovenskch pravidiel s u toti pripraven.

3.2.3. Sbor grammar.xml


Potencilny vvojr tak me siahnu po sbore grammar.xml. V om sa u nachdzaj pravidl vytvoren inmi autormi. Samotn sbor sa nachdza v prieinku rules/sk/. Tento sbor me pouvate upravova, prpadne si vytvori vlastn grammar.xml, a tak me pracova s pomerne malm sborom pravidiel, bez ohadu na poet u preddefinovanch pravidiel. Taktie me nov autor pravidiel porovna innos rznych prstupov k jednmu jazykovmu problmu. Poslednou zretenou vhodou pouitia vlastnho sboru s vlastnmi pravidlami je to, e samotn kontrola gramatiky prebehne pri menom sbore rchlejie, hlavne v prpade, ak pvodn u obsahuje niekoko stoviek pravidiel. Zkladn truktru XML sboru sa poksime pribli sa konkrtnom prpade, priom nasledujci kd je kompletn sbor grammar.xml s jednm pravidlom.
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="../print.xsl" ?> <?xml-stylesheet type="text/css" href="../rules.css" title="Easy editing stylesheet" ?> <rules lang="sk" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../rules.xsd"> <category name="Typografia"> <rulegroup id="POMLCKA_SPOJOVNIK_1" name="Zamete spojovnk pomlkou 1"> <rule> <pattern> <token>-</token> </pattern> <message>Poda pravidiel slovenskho pravopisu spojovnk nem by oddelen medzerou. Pouite namiesto neho pomlku (<suggestion></suggestion>), alebo odstrte medzery. </message> <short>Typografick chyba</short> <example correction="" type="incorrect">Toto je test <marker>-</marker> alebo aj nie. </example> <example type="correct">Toto je test alebo aj nie.</example> </rule> </rulegroup> </category> </rules>

Prv tyri riadky s hlavika XML dokumentu a upresuj kdovanie a spsob zobrazenia dokumentu internetovm prehliadaom. Hlavnm elementom celho sboru je element rules, priom v jeho atribtoch je konkretizovan lokalizcia jazyka, v naom prpade

21

lang="sk". alie atribty elementu nie s pre vvojra prli podstatn, zhoduj sa vo vetkch podporovanch jazykoch a tak nie je vhodn experimentova s nimi. Prvm elementom, pri ktorom sa vvojr rozhoduje medzi viacermi monosami je category. V dnenej podobe LangugeTool je pre sloveninu vytvorench niekoko kategrii pravidiel: gramatika, kapitalizacia, typografia, rzne, predloky a slovky. V naom prpade dan pravidlo patr do kategrie Typografia. Samotn element category sli na sprehadnenie pravidiel pri zobrazen XML dokumentu vo webovom prehliadai ale najm pri konfigurcii pravidiel v samotnom OpenOffice, ktor je dostupn cez menu Nstroje/Gramatika LanguageTool/Konfigurcia. Nov kategrie mono prida jednoducho pouitm elementu category atribtom name. Jazykovm problmom ako takm sa zaober element rulegroup. Jeho atribt id sli len na identifikciu a vyaduje si ho architektra systmu. Atribt name m aj praktick pouitie, jeho text sa zobraz tak pri GUI verzii ako aj pri pouit v LangageTool v OpenOffice, konkrtne pri konfigurcii pravidiel pouvateom, preto by mal o najlepie opisova ak problm pravidlo, i skupina pravidiel rieia. s uniktnym

Obrzok 3.1: Konfigurcia pravidiel so zobrazenm mien a kategrii pravidiel Element rule ohraniuje jedno konkrtne pravidlo, v jednom rulegroup ich me by viacero. V praxi tto situcia nastva ak je potrebn oetri niekoko rznych podb rovnakho jazykovho problmu. V tomto prpade vak bolo pravidlo len jedno. Element pattern umouje systmu porovnvanie vstupnho textu so vzorom, ktor definuje autor pravidla. Vzor sa me sklada s viacerch ast, tie konkretizuj elementy

22

token, priom ich poet uruje z kokch ast sa vzor sklad. Jeden token prislcha bu jednmu slovu alebo ubovonej interpunkcii. Medzery s ignorovan, avak prpade, ke autor chce do vzoru zakomponova medzeru je mon poui atribt tokenu spacebefore="yes", ktor uruje i sa pred monou asou textu m nachdza medzera. Element token m ete niekoko monch atribtov, ktormi sa budem zaobera neskr. Element message ohraniuje text, ktor sa vype pouvateovi pri njden chyby. Ak ide o samostatn aplikciu, text sa zobraz automaticky, v prpade prdavnho modulu OpenOffice sa text zobraz v menu kontroly gramatiky pri vobe tlaidla Vysvetli.

Obrzok 3.2: Dialgov okno kontroly gramatiky V OpenOffice so zobrazenm textu elementu message Znaky, prpadne text v elemente suggestion symbolizuj korektn formu textu. Suggestion mus by sasou elementu message. Pouije sa ako nvrh na oprav, priom cel element message sa pouije pri vysvetlen chyby. Element short pouvateovi OpenOffice verzie bliie pribliuje o ak chybu ide. Najvhodnejou verziou tohto elementu je spojenie kategrie a mena chyby, hoci v tomto prpade bola pouit len kategria. Posledn pouit element example sa vyuva len pri zobrazen XML sboru v internetovom prehliadai. Popisuje nesprvne prpady rieenia jazykovho problmu. Sprvny prklad rieenia je vsostne orientan a nezobrazuje sa ani v prehliadai.

23

Teraz sa poksime zamera len na nevyhnutn asti pravidla. Vetky nepovinn elementy a atribty, ktor slia na k zlepeniu orientcie konenho pouvatea vynechme. Absoltne najjednoduchou formou je nasledujca:
<pattern> <token>-</token> </pattern> <message> <suggestion></suggestion> </message>

V tomto prpade je vzorom len spojovnk, priom ho v nvrhu sprvnej gramatickej formy nahrdzame pomlkou. O nieo zloitej postup ilustruje nasledujci prklad:
<pattern > <token>.</token> <token>.</token> <token>.</token> </pattern> <message> <suggestion></suggestion> </message>

V tomto prpade nahrdzame vzor zloen z troch blokov textu jedinm. Tri bodky teda nahradme trojbodkou. V nasledujcich pravidlch nebudeme uvdza cel kd, ale obmedzme ho len na kov asti, hoci spomenieme aj nepovinn elementy aatribty. Nasledujce pravidlo upozoruje na nesprvne pouit vodzovky po skratke tzv. Zaujmavm atribtom tohto pravidla je atribt regexp, symbolizuje zpis hadanho tokenu pomocou regulrnych vrazov. Tie hovoria o viacerm monch hadanch tvaroch konkrtneho slova, i v tomto prpade interpunkcie. V praxi sa pouva najm symbol |, ktor predstavuje alebo. Viac o regulrnych vrazoch njdete na adrese http://www.regularnivyrazy.info/regularni-vyrazyzaklady.html. V prpade, e ide o viacer rzne tvary interpunkcie je mon hadan znaky zapsa v hranatch ztvorkch alebo ich oddeli znakom |. Takto teda meme zabezpei zhodu naprklad s vrazmi: tzv. prkladnm ale aj tzv. "prkladnm"
<pattern mark_from="2"> <token>tzv</token> <token>.</token> <token regexp="yes">["]</token> <token skip="-1" ></token> <token regexp="yes" >["]</token> </pattern>

Ete zaujmavejm atribtom, s ktorm sme sa doteraz nestretli, je atribt tokenu skip. Pouva sa na preskoenie tch ast vstupnho textu, ktor nevyhovuj deklarovanmu vzoru, priom vzorov slovo sa nsledne porovn s nasledujcim slovom vstupnho textu. 24

Tmto spsobom je mon sprvne rozpozna slovn spojenia i asti textu, v ktorch sa nachdza aj nekonkretizovan slovo. Hodnota atribtu skip je slo, oznaujce koko slov sa m pri porovnvan vstupnho a vzorovho testu preskoi. V prpade, e je hodnota zporn, znamen to, e vzorov token, nasledujci po tokene s atribtom skip je porovnvan so vetkmi slovami vety, ktor nasleduj po poslednom spene porovnanom slove. V tomto prpade je pre ns zaujmav aj atribt vzoru mark_from="2". Ten uruje, od ktorho slova bude program znakova vstupn text. Vzor me ma aj atribt mark_to, ktor uruje posledn znakovan token. tandardn hodnota 0 prislcha oznaeniu vetkch ast vstupnho textu, ktor je porovnvan so vzorom. Hodnota -1 zasa ur, e posledn slovo alebo interpunkcia sa nebude znakova. Podobne to plat aj pre in zporn hodnoty. Znakovanie za zklade tchto atribtov je vlastne len oznaenie chybnej asti vety. V praxi sa in hodnoty ako 0 pouvaj v prpadoch, ke hadme frzu zloen s viacerch slov, priom chybn je len jej urit as. Prklad: Hadme frzu tzv. prklad, priom sprvna forma m podobu tzv. prklad. Atribt

mark_from="2" zabezpe, e sa bude nahrdza len as vzoru po prvch dvoch tokenoch (tzv.). Prklad mierne komplikovanejieho pravidla, v ktorom sa skma viacero slov, sleduje pouitie slova jedny s pomnonmi podstatnmi menami.
<pattern mark_from="0"> <token>jedni</token> <token postag_regexp="yes" postag="S.(i|f|n)(p|o)."></token> </pattern> <message>Slovo jedni m v spojen s podstatnmi menami tvar <suggestion>jedny <match no="2"> </match> </suggestion>.

Pre ns zaujmavm atribtom je atribt tokenu postag_regexp="yes". Ten hovor o tom, e hadan slovo v tagset slovnku je zadan pomocou regulrneho vrazu teda viacermi rznymi postupnosami znakov. Hadan vraz je v naom prpade zadan atribtom postag="S.(i|f|n)(p|o).". Ten symbolizuje podstatn meno (prv znak S) s ubovonou paradigmou (druh znak .) muskho neivotnho alebo enskho alebo strednho rodu (tret znak i|f|n), mnonho alebo neuritho sla (tvrt znak p|o), v ubovonom pde (piaty znak .). Prislchajce znakov sady sa lia 25

vzhadom na slovn druh, ktor uruj. Podrobn opis prideovania znakov slovnm druhom a ich gramatickm kategrim njdeme na adrese http://korpus.juls.savba.sk/files/tagset-www.pdf. Posledn element z tohto pravidla, ktorm sa budeme zaobera je match a jeho atribty. Atribt no="2" oznauje poradie slova, ktor chceme zahrn do sprvneho nvrhu. Tentoraz to bolo druh slovo. alie atribty urujce prslun slovo maj rovnak vlastnosti a lohy ako v elemente token. In atribty jednotlivch elementov uplatuje nasledujce pravidlo. To sli na sprvne pouitie vekch psmen v nzvoch pamtnch dn, konkrtne v prpade Da matiek i Da zeme.
<pattern case_sensitive="yes" mark_from="0"> <token><exception postag="SENT_START"></exception></token> <token regexp="yes">de|da|du|dni|dom|dn|doch|dami <exception case_conversion="startupper"></exception></token> <token regexp="yes">matiek|zeme|Zeme</token> </pattern> <message>Pri pamtnch doch pouite vek zaiaton psmeno: <suggestion> <match no="1"></match> <match case_conversion="startupper" no="2"></match> <match no="3"></match> </suggestion>. </message>

Prvm novm atribtom je case_sensitive urujci dleitos vekosti psmen v deklarovanom vzore. Ovea zaujmavejou novinkou je element exception. Ten toti patr medzi vemi asto pouvan a sli na deklarovanie monost, v ktorch nechceme s danm slovom pracova, hoci spa poadovan vlastnosti. Atribt postag="SENT_START" uruje, e tto konkrtna vnimka plat pre zaiaton slov vety. V tomto prpade sme pouili prv token na oetrenie prpadu, ke by veta aj slovn spojenie zanali nesprvnym malm psmenom a spsobovali by dve rzne chybov hlky s rovnakm rieenm. Zbytone by tak nastala nejednoznan situcia. Poslednm doteraz nespomenutm atribtom je case_conversion, s monmi hodnotami startupper a startlower prislchajcim jednotlivm vekostiam zaiatonch psmen. Ten zabezpe jednoduchm spsobom sprvnu vekos prvho psmena tokenu. Jednoduchm prkladom ilustrujcim alie mon atribty tokenov je pravidlo upozorujce na sprvne tvar slova xkrt, kde x je slovka.
<pattern mark_from="0"> <token postag_regexp="yes" postag="N.*"></token> <token spacebefore="yes">krt</token> </pattern

26

Tvar

hodnoty

atribtu

postag="N.*"

symbolizuje

slovku

s ubovonmi

vlastnosami. Zpis .* teda nahrdza ...., kee slovky s charakterizovan znakovou sadou s dkou 5. Atribt spacebefore oznauje medzeru, ktor sa mus nachdza pred slovom krt. Inou monosou na zpis tejto podmienky by bolo pridanie przdneho tokenu medzi u existujce. Nasleduje pravidlo, ktor upozoruje na nesprvne pouitie opytovacieho zmena koho na mieste, kde je sprvne poui privlastovacie zmeno ia.
<pattern mark_from="0"> <token skip="-1">koho</token> <token postag_regexp="yes" postag="S.f.1"> <exception scope="previous">,</exception> </token> </pattern>

Na

tomto

prklade

z pohadu

vvoja

pravidiel

zaujmav

atribt

vnimky

scope="previous". Zkladnm nastavenm atribtu je current a poslednou monou hodnotou je next. Pouitie scope je uiton v prpade potreby identifikcie rznych vnimiek, ktor by mohli vies k falonm poplachom. V naom prpade sa jeho pouitm podarilo odstrni mon poplachy, v ktorch sa podstatn meno enskho rodu v nominatve nachdza za iarkou a teda je zjavn, e zmeno koho sa k nemu nevzahuje. In spsob ako vyli tieto prpady by bol omnoho komplikovanej. Pre ilustrciu nasledujcich monost poslia asti kdu, ktor nie s pouit v iadnom slovenskom pravidle. Je vak pravdepodobn, e pre tvorbu novch verzii LT s npomocn.
<patterm case_sensitive="yes"> <unify feature="case_sensitivity" type="startupper"> <token/> <token>Boca</token> </unify> </patter>

Takto deklarovanmu vzoru vyhovuj vetky slovn spojenia, kde prv slovo zana vekm psmenom. Kee prv token je przdny, zaha vetky slov, i interpunkcie. V prpade, e chceme definova pravidlo pre slovn spojenia obsahujce slov s rovnakmi zaiatonmi psmenami nezvisle na ich skutonej vekosti, sta ke zo zpisu vynechme type a v tomto konkrtnom prpade zmenme druh token za przdny. Trochu komplikovanejiu verziu symbolizuje nasledujci kd:
<patterm case_sensitive="yes"> <unify negate="yes" feature="case_sensitivity" type="startupper"> <token/> <token regexp="yes">[bB]oca</token> </unify>

27

</patter>

Tento vzor sa nezhoduje s vrazmi Vyn Boca, ale s vrazmi vyn boca, vyn Boca a Vyn boca. Atribt negate uruje, e postupnos slov neme obsahova len slov s uritou vekosou prvho psmena. V tomto prpade teda vyhovuje akkovek sria slov, kde nie s vetky prv psmen vek. Pretoe druh token obsahuje regulrny vraz, podmienkam vyhovuje obe verzie, boca aj Boca. Poslednm nstrojom, s ktorm sa oboznmime je zahrnutie preskoenej asti vety do nvrhu. V praxi sa pouva v prpadoch, kde sa medzi hadanmi slovami me vyskytova jeden, i viac vrazov. Tie je potrebn zahrn aj do nvrhu sprvneho rieenia, inak by som mohli pri pouit korektora v rmci OpenOffice strati. Nasledujce pravidlo skma nesprvne pouitie slova mimo v spojen s prdavnm menom v 4. pde. Kovm atribtom je include_skipped="all", ten zabezpe spomnan celistvos nvrhu sprvneho rieenia.
<pattern mark_from="0"> <token skip="-1">mimo</token> <token postag_regexp="yes" postag="A...4."></token> </pattern> <message>Predloku mimo nahrate vrazom <suggestion>okrem <match no="2" postag_regexp="yes" postag="A...4." include_skipped="all"/> </suggestion>. </message>

3.2.4 Pravidl v jazyku Java


Monm doplnenm odporania Daniela Nabera z vodu predchdzajcej kapitoly je azda rozrenie testovania novho pravidla v rznych situcich (bod 4) a taktie rozhodnutie, v akom vvojom prostred pravidlo implementova. Do procesu rozhodovania v tejto otzke vstupuje viacero faktorov. Do vahy je potrebn zobra programtorsk schopnosti tvorcu, nronej proces pridania novho pravidla do loklnej verzie LanguageTool, i u v podobe samostatnej aplikcie alebo sasti OpenOffice a v neposlednom rade monos prav irokm spektrom potencilnych pouvateov zva programtorskch laikov. Z tohto zoznamu objektvnych faktov nm ako jasn voba pripad XML a je realitou, e aj samotn autori i sprvcovia jednotlivch jazykovch pravidiel preferuj tto monos, priom priznvaj, e v XML je mon implementova takmer vetky doterajie pravidl. Jednm z dvodov preo sa rozhodli aj pre JAVA formu je to, e viacer pravidl sa vyskytuj vo vetkch jazykoch, a tak je pohodlnejie ich zrealizovanie v samostatnch .java sboroch ako v kadom XML sbore prislchajcom konkrtnemu jazyku. Navye, 28

tieto zkladn pravidl s skryt pred benm pouvateom. Z praktickho hadiska sa teda, pri zanedban objektvnych vhod XML formy, jav ako jedin vhoda JAVA prostredia efektivita z pohadu prce tvorcu samotnch pravidiel. Z mojich praktickch sksenost mem poveda, e idelnych prpadom na mon java pravidlo je tak, ktor obsahuje o mono najviac samostatnch foriem. Prkladom vhodnm na prepis z XML je pravidlo, ktor kontroluje sprvne pouitie vodzoviek. Jeho autor Zdenko Podobn na implementciu musel toti poui a 4 rzne formy (4 samostatn elementy rule v jednom Rulegroup). Z programtorskho hadiska je teda efektvnejou formou vyuitie java nstrojov ako viacnsobn opakovanie vemi podobnho XML zpisu. V prpade, e sa autor rozhodne pre JAVU je proces tvorby pravidla ovea zloitej. Autor sa toti v prvom rade mus dosta ku kompletnm zdrojovm kdom aplikcie, nesta mu teda len bene dostupn .oxt i .zip verzia, ktor obsahuje vetky XML pravidl. Kee vak ide o open-source, k CVS verzii sa mono dosta pouitm nasledujcich prkazov: cvs -d:pserver:anonymous@languagetool.cvs.sourceforge.net:/cvsroot/languagetool login cvs -z3 -d:pserver:anonymous@languagetool.cvs.sourceforge.net:/cvsroot/languagetool co -P JLanguageTool Na ich sprvne vykonanie je potrebn pecializovan CVS software. V prostred Windows odporam WinCVS. V operanch systmoch zaloench na Unix sta naintalova nstroj CVS a prkazy zada do prkazovho riadku. Po stiahnut kompletnej verzie m vvojr monos zasahova do vetkch jej ast a jednotlivch nstrojov. Dleitm z pohadu tvorby slovenskch pravidiel je priestor v adresri JLanguageTool\src\java\de\danielnaber\languagetool\rules\sk. Tu sa nachdzaj vetky pravidl vytvoren v JAVE uren vhradne pre slovensk jazyk. Nasledujci postup je u zrejm. Je potrebn vytvori nov sbor formtu .java. V om samotnom je treba vytvori niekoko nevyhnutch metd. V prvom rade je potrebn prida na zaiatok sboru nasledujci riadok:
package de.danielnaber.languagetool.rules.sk;

Ten zabezpe sprvnu prslunos k slovenine. Okrem neho mus sbor obsahova aj hlavn triedu:
public class PokusRule extends SlovakRule { }

so tyrmi kovmi metdami: 29

public PokusRule(final ResourceBundle messages) { if (messages != null) { super.setCategory(new Category(messages.getString("category_misc"))); } setDefaultOff(); }

ktor tto zabezpe kontrukciu pravidla a prslunos ku konkrtnej kategrii,


public final String getId() { return "SK_POKUS"; }

ktor je nevyhnutn pre aktivciu pravidla a o ktorej bude ete zmienka


public final String getDescription() { return "Nzvy obc, v ktorch je Ves"; }

ktor zobrazuje sa pri konfigurcii pravidiel samotnm pouvateom s atribtom name v XML a napokon
public final RuleMatch[] match(final AnalyzedSentence text) { ... }

ktor uruje vzor pravidla a spsob detekcie chyby. Sli taktie na nvrh sprvneho rieenia. Kee je pomerne obsiahla, nebudeme jej obsah konkretizova ale odporame preskmanie vetkch definovanch java pravidiel na ilustrciu monost implementcie Po spenom vytvoren spomenutch metd je potrebn pravidlo prida medzi ostatn sloveninou pouvan pravidl. Na tento el je potrebn zmeni obsah sboru Slovak.java, ktor sa nachdza v adresri: JlanguageTool\src\java\de\danielnaber\languagetool\language. V sbore samotnom sta prida identifiktor (SK_POKUS) sboru s novm pravidlom do metdy:
public Set<String> getRelevantRuleIDs() { Set<String> ids = new HashSet<String>(); .add("COMMA_PARENTHESIS_WHITESPACE"); ids.add("DOUBLE_PUNCTUATION"); ids.add("UNPAIRED_BRACKETS"); ids.add("UPPERCASE_SENTENCE_START"); ids.add("WORD_REPEAT_RULE"); ids.add("WHITESPACE_RULE"); ids.add("SK_COMPOUNDS"); ids.add("SK_POKUS"); return ids; }

Po uloen oboch sborov je pravidlo spene deklarovan. Na jeho aktivciu i testovanie s vak potrebn alie kroky.

30

3.2.5. Kompilcia
Takto pripraven pravidl je ete nutn zapracova do novovytvorenej .oxt verzie. T vznikne kompilciou vetkch zdrojovch sborov. Na tento el posli softvrov aplikcia Apache Ant, Ktor je vone dostupn na adrese: http://ant.apache.org/bindownload.cgi. Samotn intalcia nie je prve trivilna, a tak pre pouvateom linuxovch systmov odporam riadi sa nasledujcim manulom: http://ant.apache.org/manual/install.html. V operanch systmoch Windows je to obdobne zloit, je potrebnch aj niekoko prav systmovch nastaven. Na internetovom portli youtube vak existuje vemi intuitvny tutoril: http://www.youtube.com/watch? v=XJmndRfb1TU.Po spenom rozbehnut softvru Ant nasleduj v kompilcii alie kroky. V terminli command line sa presunieme do preinka JLanguageTool a nov verziu vytvorme cez prkaz ant build. spen kompilcia pod systmom Windows vyzer asi takto:

Obrzok 3.3: Kompilcia vo Windows pouitm prkazu ant build Jej vsledkom je niekoko sborov a prieinkov, ktor sa objavia v prieinku JLanguageTool\dist. Z nich je mon vytvori intalan oxt balk. Sta do archvu zabali prikzom zip prieinky images, META-INF, resource a rules

a taktie vetky samostatn sbory z adresra. Nsledne zmeni koncovku sboru na .oxt. Takto pripraven intalan balk je nhradou vone dostupnho z internetu. Jeho intalcia je teda plne rovnak, ako t s ktorou sme sa u zaoberali. Po jej intalcii meme modifikovan a vylepen verziu pouva ako sas OpenOffice alebo v samostatnom GUI prostred.

31

3.2.6. Testovanie
Prvotn testovanie novovytvorenho pravidla spravidla prebieha v jednoduchom grafickom prostred, ktor doke odhali prpadn nepresnosti, i u v nvrhu sprvneho rieenia alebo v oznaen chybnej asti vety. Obrzok ilustruje prklad tohto jednoduchho testu:

Obrzok 3.4: Testovanie pravidla pomocou LanguageToolGUI.jar

Nespornou vhodou tejto formy testovania pravidiel na rznych tvaroch pravdepodobne chybnej asti je jej rchlos a v prpade tvorby XML pravidiel aj okamit dostupnos bez nutnosti vytvorenia a intalcie plne novej .oxt verzie. Tento spsob vak nedoke preveri vetky monosti, ktor dobre definovan pravidlo m poskytova pouvateovi. Tie je potrebn otestova v prostred OpenOffice. Najdleitejie je otestova sprvne nahradenie chybnho textu ponkanm rieenm. Niekedy toti GUI interpretuje na pohad sprvny nvrh ale pri testovan v OpenOffice sa objav chyba. asto pritom ide o medzeru navye alebo in chybu vo vzahu k interpunkcii, ktor v grafickom prostred samotnho LangugeTool nepostrehneme. Ponuka alternatvneho textu, ktor sa zobraz po kliknutm pravm tlaidlom myi a chybn as textu je na obrzku.

32

Obrzok 3.5: Dialgov okno v OpenOffice zobrazen po kliknut pravm tlaidlom na chybn as textu. Inou monosou na zobrazenie monch chb je spustenie kontroly cez ponuku Nstroje LanguageTool Kontrola dokumentu. Tto monos taktie obsahuje monos jednoduchho nahradenie pvodnho textu jeho korektnou formou. alou monosou testovania, tentoraz skr formlnej truktry ako samotnej innosti korekcie je aj kompilcia pomocou ant build. V nej sa toti zobrazuj chyby a varovania v jednotlivch pravidlch spolu so strunm popisom. Prkladom je tto screenshot:

33

Obrzok 3.6: Kompilcia cez ant aj s vpisom warningov Posledn spsob na testovanie sborov s pravidlami bol primrne na to aj vyvinut. Ide o script testrules.bat alebo testrules.sh v zvislosti od operanho systmu. Jeho efektivita oproti pouitiu ant build je vyia v prpade testovania XML pravidiel. Ponka vak pomerne ako pochopiten oznaenie nevyhovujcich ast pravidiel. spen test by skoni asi takto:

Obrzok 3.7: Vpis po testovan pravidiel cez testovac script Po spenom zbehnut vetkch spomenutch testov je nov verzia pravidiel pripraven na jej zalenenie do existujceho balka dostupnho na oficilnej strnke projektu.

34

3.2.7. Aktivcia v sasnej verzii LT


Za najlepiu cestu, ako dosta svoje pravidl k irokej uvateskej verejnosti, povaujeme kontaktova sprvcu slovenskej verzie LanguageTool Zdenka Podobnho. Strnka vetkch projektov, ktorm sa v sasnosti venuje je http://www.sk-spell.sk.cx/. Alternatvou je monos zapoji sa priamo do vvoja LanguageTool a da o sebe vedie na internetovom fre http://sourceforge.net/mailarchive/forum.php? forum_name=languagetool-devel, kde sa stretva vina spolupracovnkov, ktor rieia mon problmy, i budci vvoj. Frum je vone dostupn na tanie. V prpade zujmu o aktvnu komunikciu je nutn sa zaregistrova na adrese https://lists.sourceforge.net/lists/listinfo/languagetool-devel. Na tomto fre asto radia aj hlavn predstavitelia projektu ako Daniel Naber a Marcin Milkowski, priom prve druh spomenut m pod patrontom vvoj pravidiel v jednotlivch jazykoch. Po spenom zalenen sa do tejto komunity je mon pravidl vyvja pomocou CVS verzie a nov formy posiela priamo na server, kde sa nachdzaj vetky doterajie vvojrske verzie programu. Tto monos je pravdepodobne vhodn v prpade vvoja asti samotnej architektry LanguageTool alebo implementcie vieho potu pravidiel v JAVE. Ak vak ide o XML pravidl, tu povaujeme sprstupnenie novej verzie cez Zdenka Podobnho za prospenejie, najm v prpade novho spolupracovnka.

3.3. Popis vytvorench pravidiel


V tejto asti sa budeme zaobera asou z vytvorench pravidiel. Pre ely jednoduchieho testovania a tie prepisu pravidiel do textovej podoby sme vytvorili sbor konverzia.xsl. Vaka nemu sa vo webovom prehliadai zobrazia len urit asti XML kdu s jednoduchmi nadpismi. Na jeho pouitie sta v sbore grammar.xml nahradi druh riadok nasledujcim kdom: <?xml-stylesheet

type="text/xsl" href="../konverzia.xsl" ?>. Postupne prejdeme niekoko pravidiel, priom sa sstredme na nzov pravidla a prklady situcii, v ktorch s inn. Dajte iarku za citoslovce Nesprvny text: Joj vyhrali sme. Sprvny text: Joj, vyhrali sme.

35

Nedokonalos tohto pravidla zvis predovetkm od nekonenej rozmanitosti citosloviec, ktor me pouvate testova. Je teda pochopiten, e tagset slovnk nie je schopn zachyti vetky. Vaka tomu patria medzi spen prpady s nasledujcimi citoslovcami: tralala, fha, bc, bums, dokelu, ahoj, cveng, plesk. Nespech pravidlo dosiahne pri pouit: hur, ech, jej Zmete x na znak nsobenia Nesprvny text: Rozlenie obrazovky 800x600 Sprvny text: Rozlenie obrazovky 800600 Nesprvny text: Rozlenie obrazovky 800x600x400 Sprvny text: Rozlenie obrazovky 800600400 spenos tohto pravidla je podmienen potom sel. Sprvne upozorn na chybu v prpade vskytu 2 i 3 sel. Ak je vak aplikovan na poetnejie reazce, stva sa neinnm. Cti sa sa spja s 1. pdom Nesprvny text: Ctim sa uitonm. Sprvny text: Ctim sa uiton. Problm tohto pravidla je v nepokryt vetkch tvarov odvodench od slova cti. spene pokrva len niektor: cti, ctim, ctia, ctime, cti, cti, ctite. In, aj ke pravdepodobne gramaticky menej vhodn formy pokry nedoke. Rovnako nespen je v prpadoch, ke sa pred hadanm prdavnm menom v 7. pde nachdzaj ete nejak vrazy: Ctim sa vemi uitonm. Zmeno koho nahrate zmenom Nesprvny text: Nevedel, koho dom kpil. Sprvny text: Nevedel, dom kpil. Nesprvny text: Nevedel, koho je t noha. Sprvny text: Nevedel, ia je t noha. Nesprvny text: Nevedel, koho auto si poial. Sprvny text: Nevedel, ie auto si poial. Ide o podobn prpad ako predchdzajci, taktie nedoke odhali chybu ak sa medzi zmenom koho a podstatnm menom v prvom pde nachdzaj in vrazy. Tto nedokonalos sa sme sa nepokali riei hlavne z dvodu vekej pravdepodobnosti

36

vskytu podstatnch mien v prvom pde, a teda relatvne znanmu riziku falonch poplachov. Prklad: Nevedel, koho bol ten dom, ktor kpil. Druhm rokom tudova je nespisovn Nesprvny text: Chcel u druhm rokom tudova politolgiu. Sprvny text: Chcel u druh rok tudova politolgiu. V tomto prpade pravidlo dobre zachytva vetky hadan monosti. Negatvom je vak prpadn nchylnos k falonm poplachom. Toto riziko sme vak povaovali za prijaten. Falon poplach spsobuj vetky vrazy zloen z slovky v 7. pde, podstatnho mena v 7. pde a ubovonho slovesa. Teoreticky tak chybu spsob aj vraz: tretm perom psa. Tu sa vak prejav jedna z hlavnch vhod LanguageTool, a to monos pravidlo ignorova, poprpade dokonca zakza kontrolu tmto pravidlom. Pravidl, ktormi sme sa zaoberali slia len na ilustrciu monch nedokonalost, kee opisom vetkch vytvorench pravidiel sa prca s pochopitench dvodom zaobera neme. Nepresnostiam sa vak poas vvoja ned stopercentne vyhn a autor mus asto zvi mieru rizika monch nedokonalost i falonch poplachov.

37

Zver
Vaka nstrojom na vvoj pravidiel v XML, s ktormi sme sa oboznmili, je mon pomerne presne a inne oetri vek mnostvo jazykovch nepresnost vyskytujcich sa v benej textovej komunikcii. Existuje vak mnoho prpadov, kde aj napriek vekej snahe dnes dostupn prostriedky nedoku vvojrovi vytvori prostredie, v ktorom by dokzal presne aplikova pravidlo na akkovek jazykov problm. Za jeden z najvch nedostatkov povaujem nemonos identifikova vetn leny vo vete a taktie absenciu monosti priradi podstatn men k ich vzoru. spenm vyrieenm tchto nedostatkov by sa sprstupnil pomerne vek priestor na vvoj alch pravidiel na kontrolu slovenskej gramatiky. V rmci tejto prce sa mi podarilo navrhn zkladn mnoinu 50 pravidiel na kontrolu slovenskej gramatiky pre program LanguageTool. Sasou prce je ich popis a prpady spenho pouitia, priom aplikcia ponka kadmu pouvateovi monos vypn kontrolu uritm pravidlom. Na vytvorenie pravidiel som pouil extern XML sbor a tie som jedno vzorov pravidlo implementoval s jazyku JAVA. Cel postup prce a charakterizcia truktry autorskej komunity spolu tvoria potencionlny tudijn materil pre alch zujemcov o pokraovanie v projekte. Vytvoril som stylesheet na konverziu XML sboru do html, ktor je npomocn pri tvorbe zkladnch testovacch textov. Prca m ambciu spopularizova samotn program LanguageTool a taktie aj kancelrsky balk OpenOffice. V budcnosti by sa mohla sta pomckou pre vetkch, ktor sa chc zastni tvorby slovenskej verzie. Pre sloveninu je potrebn vytvorenie alch pravidiel tak, aby sa jej podpora mohla porovnva s inm slovanskm a morfologicky rozmanitm jazykom, ktorm je potina a jej viac ako 1000 pravidiel. Okrem toho je potrebn zlepi segmentciu slovenskch vrazov. Osobne som odhodlan naalej pokraova vo vvoji v oblasti pravidiel a dfam, e moja bakalrska prca prispeje k rchlosti a kvalite tohto procesu.

38

Pouit literatra
LIKO, J. 2007. Jednoduch gramatick korektor pro etinu do OpenOffice: Bakalrska prca. Brno: Vysok technick uen v Brn, 2007. 27 s. NABER, D. 2003. A rule-based style and grammar checker: Diplomov prca. Bielefeld: Universitt Bielefled. 2003. 57 s. KAALA, J. A kol.: 2000 Pravidl slovenskho pravopisu. 3. vyd. Bratislava : Veda, 2000. Gbri, M. Slovensk jazyk do vrecka. [online]. Radoina: [cit. 2010.04.12.] Dostupn na internete: http://www.slovencina.vselico.com/priamarec.html pireng, P. 2006. Morfologick anotcia textov Slovenskho nrodnho korpusu. [online]. Koice: Dostupn na internete: http://korpus.juls.savba.sk/files/tagset-www.pdf Jazykovedn stav udovta tra SAV. Slovensk slovnky. [online]. Bratislava: SAV 2010.04.22. Dostupn na internete: http://slovniky.juls.savba.sk/?d=sss Soursceforge. LanguageTool development. [online]. Dostupn na internete:

http://sourceforge.net/mailarchive/forum.php?forum_name=languagetool-devel Milkovski, M. Developing a grammar checker. Varava: 2008. 29 s. LanguageTool wiki [online]. 2010.5.16. Dostupn na internete:

http://languagetool.wikidot.com/

Valentov, Z. 2006. Tvorba a publikcia matematicekj terminolgie pomocou XML: Diplomov prca. Bratislava: Univerzita Komenskho, 2007. 54 s.

39