CZPJ -
Centrum zpracování přirozeného jazyka MUNI
Cíl projektu
Vytvořit a nabídnout s volnou licencí nástroje pro analýzu češtiny
- samostatný multiplatformní program
- doplněk pro OpenOffice.org
Původní zadání
- Liberix připraví kostru rozšíření, do kterého půjde implementovat Ajka. Použije se Java nebo Python. NENÍ HOTOVO.
- CZPJ připraví Ajku jako program v textovém režimu a dokončí rozšíření (implementuje knihovnu) tak, aby šlo použít v aktuální verzi OpenOffice.org. HOTOVO.
- CZPJ stanoví podmínky použití svých webových nástrojů a umožní implementaci do stránek openoffice.cz (vstupní řádka, zobrazení výsledků na stránce oo.cz)
- Spolupráce bude pokračovat směrem k vývoji rozšíření pro kontrolu jazyka z hlediska překlepů a z hlediska hledání gramatických chyb (interpunkčních a dalších). Bude existovat paralelně vedle stávajícího doplňku založeného na ispellu.
Kusé informace k vývoji
Na zapojenie ajky postačuje funkciu, ktorá bude mať ako argument slovo a mi vrátime, či je dané slovo platné alebo nie.
napr. boolean checkAjka ( String word )
Pre veci, ktoré sa už dotýkajú gramatiky potrebujeme aj slová, ktoré sú
pred/za daným slovom. A možnosť upraviť tieto slová, neviem aký je bežný
štandard v OO na toto, takže ako by mohla vyzerať naša funkcia.
Príkladom nech je vokalizácia predložiek, kde potrebujeme vedieť, ktoré
slovo je za predložkou - a v prípade potreby navrhnúť zmenu predložky.
napr. String checkContext ( String[] pre, String word, String[] post )
Popis gramatických kategórií (niektoré veci sa jemne menili):
http://nlp.fi.muni.cz/projekty/ajka/tags.pdf
Predstava je knižnica/framework (aj keď to sú silné slová), kde bude
funkcia do ktorej si mi dopíšeme funkcionalitu. Ideálne to už bude
obsahovať nejaké volanie ajky, tak aby to vyhovovalo vašim štandardom.
Okrem slova samotného potrebujeme aj kontext (tj. X slov pred/za; X
závisí od aplikácie).
v podstate úvodná funkcia by vyzera +/- takto:
boolean checkWord(pre[], word, post[]) {
if (ajka.accept(word)) {
return true
} else {
return false
}
}
Ideálne možno návratová hodnota nie boolean, ale pole s možnými opravami.
Příklad
vstup bolo slovo "testuj", výstup som dostal "testovat:k5eAaImRp2nS"
vstup bolo slovo "netestuj", výstup som dostal "netestovat:k5eNaImRp2nS"
Co mají nástroje umět? K čemu je bude možné používat?
Je určená na morfologickú analýzu tj. pre dané slovo dostaneme tvar a
gramatické kategórie - z tej značky je vidno, že je to sloveso v 2.
osobe rozkazovací sposob, afirmácia/negácia. V úvodnej fáze sa
ajka využije na zistenie, či dané slovo existuje alebo nie.
Ajka pozná rádovo viac slov než slovník, ktorý sa aktuálne používa v OO. Hneď v ďalšej fáze je možné vďaka gramatickým značkám napr. kontrolovať
vokalizáciu predložiek (s/so) a použitie predložiek so správnym pádom
(s/z).
Souhrn
MUNI nám nabídla know how v oblasti morfologické analýzy jazyka. Mají k dispozici software
Ajka, který dokáže analyzovat český text a výsledek analýzy vrátí formou hashe. Jde např o určení mluvnických kategorií:
vstup slovo "testuj", výstup "testovat:k5eAaImRp2nS"
Vrácený hash znamená, že je to sloveso v 2. osobě, rozkazovací způsob, afirmace/negace. Úkolem, který chceme vyřešit, je prezentovat tyto informace uživateli v dialogovém okně, tj. rozepsat kategorie pomocí běžně používané terminologie.
Tento příklad je jen začátek a náznak toho, jaké know how máme k dispozici. Konečným cílem je vytvořit program a doplněk, který
- bude použitelný v OOo (=multiplatformně); program také (Java, Python apod.)
- analyzuje větu a do jisté míry rozpozná 'chybu'
- doplní nezlomitelné mezery za jednoslabičné předložky
- vytvoří schéma věty podle větných členů
- ...
- bude použitelný ve škole (!!!)
Na MUNI se tomu věnuje Marek Grác (
xgrac@aurora.fi.muni.cz), navrhuje tento postup:
* Vokalizácia predložiek
* potrebujeme slovo + ďalšie slovo
* na základe jednoduchých pravidiel
(asi dodáme rovno v Jave, nech s tým nie je problém)
* Správnosť predložiek
* potrebuje slovo + ďalšie slovo a ich gramatické značky
* test na zhodu pádu (číslica za 'c') a slovný druh ('k'), keďže
za predložkou smie byť príslovka
V ďalšej časti by sme zrejme mohli využiť pár komplikovanejších vecí. K dispozícii máme korektor čiarok, alebo rozpoznávanie menných fráz (tj. zhoda medzi prídavnými menami a podstatnými, ak patria dokopy).
K tomuto všemu potřebujeme uživatelské rozhraní.
Z diskuze
V této fázi nepřipravujeme nástroj, který označí chyby, nýbrž nástroj, který "pozná" tvar slova. Bude to základní pomůcka pro následné funkce:
- skloňování, časování
- syntaktický kontrolor
- morfologický kontrolor
- dělení slov
- mnoho dalších funkcí, které dnes nemáme a možná ani nevíme, že jsou potřeba ;-)
Ajka nie je špeciálne pre češtinu a funguje aj
na iných systémoch, máme v nej aj iné jazyky aj keď samozrejme nie až
tak pokryté. Istým problémom je, že ajka nemalé
množstvo slov generuje a jej formalizmus je výrazne silnejší ako mal
ispell/aspell (a ak viem, tak toto sa výrazne nemenilo).
Náš syntaktický analyzátor má stovky meta-pravidiel na ktorých sa
pracuje posledných 15 rokov a stále sa ani neblíži 100% pokrytiu. Tam,
kde očakávame, že nebude potrebné robiť veľké úpravy, tak samozrejme
majú štandardné riešenia svoje miesto (napr. spellchecker pre Esperanto
do OO, ktorý vznikol ako bakalárska práca u nás).
Čo sa týka projektu, už som na niečom začal robiť - testoval som Ajku (ako externý program v Mandrive) - volal som ju z OO.o s posledným slovom a do OO.o som naspäť vložil hash. Tým to skončilo, pretože analýzu hashu som nemal čas už robiť, ale nie je to problém dorobiť.
Čo sa týka vkladania nezalomiteľných medzier počas písania, táto časť projektu je z veľkej časti vyriešená - okrem nezalomiteľných medzier za jednoznakové predložky dokážem vkladať nezalomiteľné medzery za a aj pred ľubovoľné slovo (tu ma inšpirovala definícia slov pre nezalomiteľné medzery v Scribuse), čím sú jeho možnosti oveľa širšie, ako je to v MS Worde (viď http://www.openoffice.cz/doplnky/vkladanie-nezalomitelnych-medzier-pocas-pisania ). Je potrebné ešte doriešiť nastaviteľnú možnosť automatického spúšťania tohto rozšírenia počas otvárania súboru. Rozšírenie pre vkladanie nezalomiteľných medzier sa dá zároveň použiť aj pre volanie Ajky s posledným slovom (aj dvomi - nie je problém ho v tomto smere upraviť).
Pre riešenie projektu je momentálne potrebné vyriešiť spoluprácu s OO.o vo smere označovania nesprávnych slov - teda previazať Ajku s tým, ako hľadá slová OO.o. V tomto vidím väčší problém, pretože sa musí ponechať možnosť vkladania používateľských slovníkov, čiže sa v OO.o musí ponechať aj pôvodný systém pre kontrolu slov a zároveň sa musí do neho implementovať aj volanie Ajky tak, aby OO.o potom už nekontroloval to, čo Ajka označila ako správne slovo (to je vtedy správne, ak vráti hash, inak vráti prázdnby reťazec). Tak isto treba vyriešiť možnosť označovania slov modrou vlnovkou pri nesprávnej gramatike. Toto vie robiť rozšírenie LanguageTool, ja však nepoznám Javu, aby som mohol analyzovať jeho spoluprácu s OO.o a previazanosť na spoločné tlačidlo F7 - v odseku sa najprv kontrolujú slová, potom gramatika a takto to pokračuje v celom súbore.
Okrem toho Ajka síce umožňuje kontrolu dvoch slov, ale na druhej strane nemá také možnosti, aké má LanguageTool (používam ho v slovenčine) - označí nespárované úvodzovky, zátvory, dvojité medzery, nesprávne malé písmeno na začiatku vety, dve rovnaké slová za sebou ... s tým, že pri kontrole dokonca vypisuje, prečo označené veci považuje za nesprávne a navrhuje aj opravu. Preto, hoci sa zdá, že je veľká časť vyriešená, nie je to tak - programátorskej práce je viac než dosť a tak isto v oblasti gramatiky sú v Ajke vyriešené iba niektoré veci a bude potrebné nájsť niekoho, kto by sa venoval aj projektu LanguageTool (celý projekt, ktorý riešime, vznikol vlastne ako odozva na výzvu hľadania riešiteľov pre projekt LanguageTool) a vo výsledku bude nutné previazať až tri veci - Ajka+LanguageTool+OO.o.
Z uvedeného sa ako programátor pýtam, či nie je schodnejšia cesta transformácie slovníkov z Ajky do štandardných slovníkov OO.o a do nástroja LanguageTool, hoci sa tomuto smeru p. Grác bráni. Týmto by sme totiž mali vyriešené všetky problematické programátorské časti - automatické previazanie s OO.o, možnosť používania používateľských slovníkov, označovanie nesprávnej gramatiky modrou vlnovkou... Pravdaže, využitie Ajky ako nástroja pre školy (analýza hashu, vytvorenie schémy vety) je výborná myšlienka, ktorá si zasluhuje osobitné riešenie.