UNICORN COLLEGE
Katedra informačních technologií
BAKALÁŘSKÁ PRÁCE
Vytvoření appletu umožňujícího kontrolu pravopisu pro data uložená v Unicorn Universe Autor BP: Pavel Bibr Vedoucí BP: RNDr. Ondřej Kučera 2014 Praha
Čestné prohlášení Prohlašuji, že jsem svou bakalářskou práci na téma Vytvoření appletu umožňujícího kontrolu pravopisu pro data uložená v Unicorn Universe vypracoval samostatně pod vedením vedoucího bakalářské práce a s použitím výhradně odborné literatury a dalších informačních zdrojů, které jsou v práci citovány a jsou také uvedeny v seznamu literatury a použitých zdrojů. Jako autor této bakalářské práce dále prohlašuji, že v souvislosti s jejím vytvořením jsem neporušil autorská práva třetích osob a jsem si plně vědom následků porušení ustanovení
§ 11 a následujícího au-
torského zákona č. 121/2000 Sb. V Praze dne 9. ledna 2014
….............
Poděkování Děkuji vedoucímu bakalářské práce RNDr. Ondřeji Kučerovi za účinnou metodickou, pedagogickou a odbornou pomoc a další cenné rady při zpracování mé bakalářské práce.
Vytvoření appletu umožňujícího kontrolu pravopisu pro data uložená v Unicorn Universe Creation of an applet providing a spell checking functionality for data stored in Unicorn Universe
6
Abstrakt Bakalářská práce si klade za cíl sestavit přehled na trhu dostupných nekomerčních open source komponent sloužících ke slovníkové kontrole pravopisu a následně implementovat vybranou komponentu v samostatném Java appletu. Komponenty budou posuzovány z hlediska integrovatelnosti s programy psanými v jazyce Java, výkonu, licenční politiky, podpory a dostupnosti slovníků v různých jazycích. Pro implementační část práce je nezbytné, aby k dané komponentě byl k dispozici přinejmenším slovník český, anglický, slovenský, španělský a ruský. Applet bude na vyžádání ze systému Unicorn Universe stahovat obsah, který uživateli zobrazí, provede kontrolu textu, navrhne opravy a případný opravený obsah umožní nahrát zpět do systému. Komunikace se systémem bude probíhat prostřednictvím Unicorn ES API. Applet dále uživateli umožní opravovat návrhy a přidávat nové výrazy. Klíčová slova: kontrola pravopisu, Java, applet, Unicorn Universe, Unicorn ES API
7
Abstract The thesis aims to assemble a list of non-commercial and open sourced spell check components available on the market and to incorporate a suitable one into a Java applet. The components will be evaluated based on their ability to integrate with programs written in the Java programming language, performance, license, available support, and availability of dictionaries in various languages. The programming part of the thesis requires that at least Czech, English, Slovak, Spanish, and Russian dictionaries are available. The applet will be able to download content from Unicorn Universe on demand, which it will then display to the user, check the spelling of the text, suggest corrections, and offer uploading the modified content back to the system. The communication between the applet and Unicorn Universe will utilize Unicorn ES API. The applet will also allow the user to modify suggested correc tions and to add new words into the dictionary. Keywords: spell check, Java, applet, Unicorn Universe, Unicorn ES API
8
Obsah 1.Úvod..................................................................................................................................11 2.Analýza problematiky.......................................................................................................13 2.1.Kontrola pravopisu.......................................................................................................13 2.2.Java applet....................................................................................................................14 2.3.Unicorn Universe.........................................................................................................16 2.4.SOAP............................................................................................................................17 3.FURPS+ analýza...............................................................................................................19 4.Analýza případů užití........................................................................................................19 4.1.Specifikace případů užití..............................................................................................19 4.1.1.UC1 – Přihlášení.....................................................................................................19 4.1.2.UC2 – Stažení textu.................................................................................................23 4.1.3.UC3 – Kontrola textu..............................................................................................24 4.1.4.UC4 – Uložení textu................................................................................................25 4.1.5.UC5 – Odemčení listu.............................................................................................26 4.2.Diagram případů užití...................................................................................................27 5.Jazykové komponenty.......................................................................................................28 5.1.Identifikace...................................................................................................................28 5.2.google-api-spelling-java...............................................................................................29 5.3.JaSpell..........................................................................................................................30 5.4.JOrtho...........................................................................................................................30 5.5.Jazzy.............................................................................................................................31 5.6.HunspellJNA................................................................................................................31 5.7.LanguageTool...............................................................................................................32 5.8.Porovnání a výběr.........................................................................................................32 6.Realizace...........................................................................................................................37 6.1.Přehled architektury.....................................................................................................38 6.2.Interní komponenty......................................................................................................39 6.2.1.Gui...........................................................................................................................41 6.2.2.UESDocumentHandler............................................................................................42 6.2.3.DocumentNode........................................................................................................43 9
6.2.4.SpellChecker...........................................................................................................43 6.2.5.UESLogin................................................................................................................44 6.3.Externí komponenty.....................................................................................................44 6.3.1.HunspellJNA...........................................................................................................45 6.3.2.Unicorn ES API.......................................................................................................46 6.4.Applet...........................................................................................................................47 6.4.1.Spouštění.................................................................................................................47 6.4.2.Ukázka použití.........................................................................................................48 6.4.3.Systémové požadavky.............................................................................................54 6.4.4.Další úpravy a rozšíření...........................................................................................54 7.Závěr..................................................................................................................................57 8.Conclusion.........................................................................................................................58 9.Seznam použitých zdrojů..................................................................................................59 10.Seznam obrázků..............................................................................................................62 11.Seznam tabulek................................................................................................................63 12.Seznam příloh..................................................................................................................64 12.1.Příloha 1 – Testovací text...........................................................................................65 12.2.Příloha 2 – CD-ROM.................................................................................................66 12.3.Příloha 3 – UXML......................................................................................................67
10
1.
Úvod
Pravopisem, neboli ortografií, rozumíme soubor obecně přijímaných a kodifikovaných pravidel záznamu jazyka písemnými prostředky. Nedodržování těchto pravidel může vést ke snížení srozumitelnosti psaného textu a vyžadování většího úsilí na straně čtenáře. V některých situacích může být porušování pravopisu vnímáno přinejmenším jako společensky nevhodné, v oficiálních písemnostech je pak přímo vyžadováno použití spisovného jazyka, a tedy i přísné dodržování pravidel pravopisu. Dodržování pravopisu je tedy obecně vnímáno jako společensky žádoucí jev, ovšem jako každé dodržování určitého standardu i zde to typicky znamená potřebu zvýšeného vynaložení úsilí na straně producenta, v našem případě pisatele. Kontrola pravopisu je v dnešní době vcelku běžnou součástí textových procesorů. Šetří uživatelům čas a práci tím, že dokáže odhalit v textu alespoň část pravopisných chyb a překlepů. Jejím smyslem je tedy zvýšení kvality psaných textů po pravopisné stránce, přičemž zároveň typicky zvyšuje uživatelský komfort provádění oprav poskytováním návrhů. Uživatel tak není nucen nahlížet do slovníku, pokud si například není zcela jist správnou formou daného slova. [1] Informační systém Unicorn Universe slouží mimo jiné ke správě dokumentů obsahujících text, a je proto vybaven vlastním textovým procesorem, díky kterému je lze vytvářet a editovat. Uvedený procesor však funkci kontroly pravopisu v době psaní této práce nenabízí. Tato práce tedy zároveň vzniká jako studie dané problematiky pro společnost Unicorn Solutions a jejím záměrem je prakticky ověřit jedno z možných řešení této situace. Dle zadání Unicorn Solutions je cíl této práce dvojí, a to: 1. „Průzkum trhu dostupných spell check komponent se zaměřením na následující oblasti: 1. Kvalita, výkon 2. Lokalizace a dostupnost slovníků min. pro češtinu, angličtinu, slovenštinu, španělštinu a ruštinu 3. Integrovatelnost do Java ekosystému 4. Open source, podpora, komunita 5. Licenční politika (komponenta, slovníky) - nelze komerční licence a GPL 11
2. Vytvoření aplikace (primárně applet) integrující vybranou spell check komponentu a využívající Unicorn ES API pro práci s popisem: 1. Applet bude na vyžádání stahovat ze systému Unicorn Universe obsah ke kontrole pravopisu, provede kontrolu a navrhne změny, přičemž data zobrazí (v rozumné formě při zachování elementární struktury dat), a na vyžádání opravený obsah uloží zpět do Unicorn Universe. 2. Applet bude umět pracovat s dostupnými slovníky a bude se umět učit (opravy návrhů uživatelem atd.) 3. Applet bude integrovaný do samostatné webové aplikace, bude komunikovat výhradně prostředky UES API (SOAP či REST verze)“ [2]
12
2.
Analýza problematiky
Přibližme si nyní jednotlivé oblasti a prvky, se kterými se bude v této práci operovat. Nejprve se seznámíme s principy provádění kontroly pravopisu pomocí počítačů a jaká omezení se na ně vztahují. Dále pohovoříme o tom, co je to Java applet, který byl zmíněn v zadání práce. Nakonec si v této kapitole popíšeme informační systém Unicorn Universe, se kterým má cílový applet interagovat, a popíšeme protokol SOAP, který bude komunikaci s Unicorn Universe zprostředkovávat.
2.1.
Kontrola pravopisu
Počítačová kontrola pravopisu se zabývá automatizovaným vyhodnocováním chyb v textu a navrhováním oprav. S použitím informací z [1] si přibližme možné členění algoritmů pro vyhledávání chyb dle jejich komplexity a přístupu k řešení dané otázky. Jako příklad jednoduchého a jazykově nezávislého algoritmu pro vyhledávání chyb lze uvést analýzu trigramů. Daný text se rozdělí na všechny souvislé trojice písmen (tedy například slovo „trojice“ se zaznamená jako tro, roj, oji, jic a ice) a zaznamená se jejich četnost. Uživatel je poté upozorněn na slova obsahující nejvzácnější trigramy, protože taková mohou snadno vzniknout právě například nezamýšleným stiskem několika kláves (např. trojixce). Neobsahuje-li však slovo takové neobvyklé trigramy, projde i s hrubými pravopisnými chybami kontrolou bez povšimnutí. Proto se algoritmy vyhodnocování chyb typicky opírají o práci se slovníkem daného jazyka. Triviální algoritmy pracující se slovníkem lze postavit na vyhledávání ve slovníku obsahujícím všechna slova a jejich tvary. Takové řešení je však nesmírně náročné na paměť a u jazyků, které mají složitou morfologii nebo jejichž slovotvorba dovoluje tvořit slova spojováním*, ani nemusí být reálně možné takový úplný slovník vytvořit. Proto se zpravidla kombinuje slovník obsahující jen určitý počet nejčastějších slov či slovních kořenů spolu s pravidly tvoření a ohýbání slov. Takto obohacené algoritmy již mohou být schopny zachytit prakticky veškerá nespisovná slova a překlepy. Text však přesto může zůstat plný pravopisných chyb, jako je špatný slovosled či záměna výslovnostních homonym *
Např. německé slovo „Rindfleischetikettierungsüberwachungsaufgabenübertragungsgesetz“.
13
(být a bít). Takovéto chyby gramatického a syntaktického charakteru nedokáže odhalit sebelepší algoritmus pracující se slovy izolovaně, neboť správný tvar slova lze v takovém případě zjistit pouze z kontextu. Tím se zabývá další skupina algoritmů, která se s ohledem na odlišné zaměření někdy označuje jako kontrola gramatiky (grammar checker). Aby takové algoritmy dokázaly nacházet gramatické chyby, musejí pracovat se vzájemnými vztahy mezi slovy. Jednou metodou je statistická analýza, která na základě informací načerpaných z rozsáhlých textů určí pravděpodobnost výskytu určitých slov u sebe. Například, napíše-li uživatel, že někdo „bil pozván“, měl by algoritmus poukázat na nepravděpodobnost takového slovního spojení a nabídnout změnu na „byl“. Další rozšíření se již zakládají na schopnostech počítačů provádět sémantickou analýzu, což je například jednodušší pro určitá předem definovaná témata, nebo přísnější pravidla syntaxe, aby byla množina řešení co nejlépe omezena. Přesto se však jedná o nesmírně náročnou disciplínu a algoritmy této kategorie jsou proto mnohem vzácnější, než dříve zmíněný typ kontrolující samostatná slova proti slovníku.
2.2.
Java applet
Java applet je druh programu psaného v programovacím jazyce Java, který může být vložen na webovou stránku. Webový prohlížeč podporující applety umí tento typ programu stáhnout a spustit v běhovém prostředí Java Virtual Machine (JVM) na lokálním počítači, je-li toto prostředí přítomno. Existuje větší množství implementací běhového prostředí jazyka Java. Majitelem obchodního označení Java a přidružených technologií je v současnosti společnost Oracle Corporation. Ta je též primárním vývojářem této platformy a na internetových stránkách
poskytuje ke stažení svou implementaci tohoto prostředí, kterou budeme pro jednoduchost dále označovat jako Oracle Java. Vedle zmíněné a de facto oficiální implementace od společnosti Oracle byla při vyhotovování této práce použita použita ještě implementace alternativní, nazývaná OpenJDK. Ta se odlišuje především tím, že je poskytována pod modifikovanou licencí GNU General Public License (GNU GPL) a dává k dispozici svůj zdrojový kód. Je proto populární zejména
14
v prostředí hnutí svobodného softwaru a typicky je nabízena jako výchozí varianta v operačních systémech typu GNU/Linux a na dalších unixových platformách. Applet se obvykle vykresluje v rámci prostoru vymezeného na dané webové stránce a jeho životní cyklus je řízen komponentou zodpovědnou za práci s applety v samotném webovém prohlížeči. Applety jsou určené k tvorbě grafických prvků, ať už pasivních či interaktivních, a v rámci zdrojového kódu musí být třída implementující applet potomkem třídy java.applet.Applet, či javax.swing.JApplet [3][4, s. 227]. Druhá zmíněná třída umožňuje využívat grafických prvků knihovny Swing a tato knihovna byla použita i při realizaci cílového appletu této práce. Příklad jednoduchého appletu zobrazujícího jen pohyblivou grafiku je například na stránkách dokumentace a tutoriálů Java od společnosti Oracle:
. Složitější applety, provádějící fyzikální simulace a poskytující interaktivní řízení jsou například k dispozici na této stránce . V rámci HTML kódu dané stránky jsou applety a jejich parametry umisťovány pomocí tagů *, nebo <embed>. Různé webové prohlížeče historicky zacházely s těmito tagy rozdílně, proto může být třeba použít JavaScript k přizpůsobení kódu stránky dle použitého prohlížeče, aby byla zachována multiplatformnost [7]. Za tímto účelem existuje oficiální skript, Deployment Toolkit, poskytovaný společností Oracle [8]. Další alternativu pak představuje použití protokolu Java Network Launch Protocol, který pomocí konfiguračního souboru uloženého na serveru provede spuštění appletu (či jiné aplikace psané v Javě) v cílovém počítači přímo. Tento protokol umožňuje jemnější konfiguraci práce s appletem a poskytuje takto spuštěnému programu různá přídavná rozhraní [9]. Applety jsou z bezpečnostních důvodů spouštěny v omezeném prostředí (tzv. sandbox), které jim brání vykonávat určité činnosti, například přistupovat k souborovému systému lokálního počítače. Výjimku z těchto omezení smí získat jen applet, který je podepsán certifikátem, a uživatel musí udělení výjimky explicitně povolit [4, s. 227]. Historicky byly applety prvkem, který se významně podílel na popularitě jazyka Java a jeho běhového prostředí [4, s. 227]. Zdá se však, že se postupem času přesunuly spí*
Tento tag je však dle specifikace HTML 4.01 označen za opouštěný (deprecated) [5, kap. 13.4] a v současném návrhu HTML5 je již opuštěn (obsolete) [6, kap. 11.3.1].
15
še na okraj zájmu [10, s. 22]. Operační systémy populární na mobilních platformách (například BlackBerry, iOS, Windows Phone, Windows RT, Android) již z různých důvodů cíleně nepodporují běhové prostředí Java Virtual Machine a nedovolují tak ani spouštění appletů. Blokování appletů již také proniká do sféry stolních počítačů, kdy například webový prohlížeč Internet Explorer běžící v operačním systému Microsoft Windows 8 v rámci nového grafického rozhraní (dříve pracovně nazývaného Metro) applety nepodporuje. Ve verzi původního rozhraní však zatím podporovány jsou [11].
2.3.
Unicorn Universe
„Unicorn Universe je komplexní internetová služba pro podporu řízení, komunikace a spolupráce“ [12]. Předmětem této služby je informační systém, který uživatelům umožňuje efektivní spravování informací a informačních toků. Základním nosičem informací je dokument, který se v rámci Unicorn Universe nazývá artefakt. Artefakt je objekt, který navíc vedle vlastního obsahu sestávajícího ze stránek formátovaného textu obsahuje přílohy (například oskenované smlouvy, obrazové záznamy z přednášek apod.), popis životního cyklu tohoto dokumentu (jeho různé stavy charakterizující například fáze rozpracovanosti či aktuálnosti), rozšiřující vlastnosti (což mohou být například proměnné údaje, odkazované uvnitř textu) a kompetentní osobu, která má daný dokument na starost. Systém poskytuje nástroje pro tvorbu, upravování a správu těchto artefaktů, například editor (textový procesor), systém verzování a řízení přístupových práv [13]. Dále lze v rámci životního cyklu artefaktu a systémových skriptů definovat různé logické podmínky a prvky chování (aby například nastavení jistého stavu daného artefaktu informovalo nadřazenou pracovní roli) pro lepší automatizaci úkonů a vymezení možných scénářů spolu s paletou jejich řešení. Uživatelům je systém zpřístupněn formou webové aplikace a vyžaduje jen použití dostatečně moderního webového prohlížeče s povoleným interpretem jazyku JavaScript, s výjimkou zmíněného editoru, který je implementován jako Java applet. Systém Unicorn Universe (UU) byl původně vyvinut pro interní použití ve společnosti Unicorn. Jeho přednosti však zaujaly její partnery i klienty, a tak byl systém přepracován, aby mohl být nabízen jako internetová služba, což se stalo v roce 2008. 16
Provozovatelem služby je společnost VIG Net a. s., která vznikla v roce 2008 oddělením od Unicornu. Unicorn Universe je postaven na platformě Unicorn Enterprise System (UES), která slouží jako základ pro tvorbu moderních komplexních informačních systémů [13][14]. Vedle přímé práce se systémem prostřednictvím internetového prohlížeče je možné se systémem komunikovat pomocí UES API, neboli Application Programming Interface (rozhraní UES pro programování aplikací). Klientská knihovna tohoto rozhraní je napsána v programovacím jazyce Java a je ji proto možné použít v kombinaci s jazyky kompatibilními s Java Virtual Machine, což je vedle vlastní Javy například JRuby * aj. Komunikace se systémem Unicorn Universe, kterou tato knihovna zajišťuje, je založena na protokolu SOAP, který blíže popisuje příští kapitola. Dokumentace této knihovny je ve formátu JavaDoc veřejně dostupná na webové adrese: . Alternativním prostředkem komunikace se systémem je přímé volání příkazů pomocí HTTP, které se inspirovalo architekturou REST [15][16]. Spouštění příkazů UES API kterýmkoliv způsobem je podmíněno zadáním přístupových údajů a podléhá uživatelským právům spojeným s daným účtem.
2.4.
SOAP
SOAP je označení pro protokol zaměřený na výměnu strukturovaných informací v decentralizovaném a distribuovaném prostředí. Na základě technologií XML definuje rozšiřitelný komunikační framework, který stanovuje strukturu zpráv přenositelných v rámci různých obalujících protokolů. Tento framework byl navržen tak, aby nebyl závislý na konkrétním způsobu programování nebo jiných implementačních specifikách [17]. SOAP se užívá jako médium komunikačního provozu webových služeb mezi jejich klienty a poskytovateli. Jednou z jeho předností v této oblasti je, že může být posílán pomocí protokolu HTTP, díky čemuž cesta typicky nevyžaduje žádnou zvláštní konfiguraci firewallů, na rozdíl od konkurenčních komunikačních systému, jako je například CORBA.
*
JRuby je odnož programovacího jazyka Ruby využívající běhové prostředí Javy. Tento jazyk je hojně užíván pro psaní skriptů pracujících se systémem Unicorn Universe.
17
V souladu s vytyčenou definicí však není na protokolu HTTP závislý a může být po síti předáván i za pomoci jiných přenosových mechanizmů, například SMTP. Protokol SOAP nejčastěji slouží ke vzdálenému volání procedur, kdy jeden počítač pošle zprávu druhému, ten vykoná patřičnou akci a její výsledek pošle v další zprávě zpět prvnímu počítači. Vlastní zpráva je jednoduchým XML dokumentem, ve kterém se přenáší informace o volané funkci a její případné atributy, nebo naopak návratové hodnoty [18, kap. 4]. Příklad takové zprávy je uveden v [17, kap.1.4]: <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"> <env:Header> 1 2001-06-22T14:00:00-05:00 <env:Body> <m:alert xmlns:m="http://example.org/alert"> <m:msg>Pick up Mary at school at 2pm Základ představuje kořenový element Envelope, který v sobě dále obsahuje nepovinný element Header, v němž lze přenášet například metadata, a povinný element Body, obsahující vlastní parametry vzdáleného požadavku.
18
3.
FURPS+ analýza
Formalizujme nyní jednotlivé prvky zadání dle metody FURPS+. Tento klasifikační sytém formuloval Robert Grady ze společnosti Hewlett-Packard v roce 1992 ve své knize Practical Software Metrics for Project Management and Process Improvement [19]. Představuje kategorizaci jednotlivých architektonických požadavků do následujících skupin: •
Functionality (funkčnost) – aktivní činnosti programu, typicky přímo ovládané uživatelem, například provedení matematické operace nad zadanými vstupními daty a zobrazení výsledku
•
Usability (použitelnost) – pasivní části aplikace ovlivňující uživatele a jeho schopnosti s aplikací pracovat, jako například estetika a ergonomie uživatelského rozhraní, jeho konzistence a dokumentace
•
Reliability (spolehlivost) – zahrnuje oblasti jako celková časová dostupnost aplikace, přesnost, odolnost vůči různým chybám a schopnost zotavení se z chybových stavů
•
Performance (výkonnost) – parametry programu v oblasti doby odezvy či reakce, množství zpracovaných dat za časovou jednotku apod.
•
Supportability (udržovatelnost) – charakterizace možností aplikaci například spravovat, instalovat, doplňovat, testovat
•
„+“ – univerzální kategorie pro další významné prvky a omezení, které se do předchozích kategorií nehodí, jako je například stanovení programovacího jazyka, v jakém má být program implementován, či typ databáze, který má být použit
Roztřídění požadavků zadavatele touto metodou pak může vypadat následovně:
19
Tabulka 1: Požadavky dle FURPS+ Kód
Typ
Popis
R01
F
Přihlášení do systému Unicorn Universe
R02
F
Stahování dat ze systému Unicorn Universe
R03
F
Provádění kontroly pravopisu na staženém textu
R04
F
Navrhování oprav textu
R05
F
Učení se nových slov
R06
F
Možnost nahrání změněných dat zpět do systému Unicorn Universe
R07
U
Zobrazení textu zachovávající jeho elementární strukturu
R08
S
R09
+
R10
+
R11
+
Schopnost podpory více jazyků, minimálně češtiny, angličtiny, slovenštiny, španělštiny a ruštiny Realizace ve formě Java Appletu Komunikace se systémem Unicorn Universe výhradně prostředky UES API Licence integrované jazykové komponenty nemůže být komerční nebo GPL Zdroj: Vlastní zpracování
Zadání nespecifikovalo formu procesu přihlašování, které je implicitně obsaženo v požadavcích na komunikaci se systémem Unicorn Universe. Tento prvek bude implementován jako vlastní funkčnost související se spuštěním appletu a byl proto přidán do tabulky jako požadavek R01.
20
4.
Analýza případů užití
Případ užití (anglicky use-case) představuje scénář akcí programu, které vedou k jistému očekávanému výsledku a které plynou z interakce s tzv. aktéry. Jedná se tedy o popis funkčností systému, které jsou iniciovány aktivními aktéry (typicky uživatelé, ale aktivním aktérem může být například i čas) a jejichž specifikace se zaměřuje na chování systému (co se má udělat), ale nezabývá se již vlastní implementací (jak se to má udělat). Vedle aktivních aktérů se mohou objevovat i pasivní aktéři, což jsou například další systémy, s nimiž je v rámci scénáře případu užití vedena interakce, ale které danou funkčnost nevyvolaly [20].
4.1.
Specifikace případů užití
Jelikož jsou případy užití popisem funkčností, souvisí velmi úzce s funkčními požadavky FURPS+ analýzy a je tak možné je podle nich modelovat, aby chování programu plně pokrylo zadání. Identifikované případy užití požadované aplikace ukazuje tabulka 2.
Tabulka 2: Případy užití Kód
Název
UC1
Přihlášení
UC2
Stažení textu
UC3
Kontrola textu
UC4
Uložení textu
UC5
Odemčení listu
Popis Uživatel při spuštění aplikace zadá přihlašovací údaje do systému Unicorn Universe a dojde k jeho přihlášení Uživateli je na vyžádání stažen požadovaný text ze systému UU a uzamkne se Uživatel spustí průchod textem s pomocí zvoleného slovníku a jsou mu nabízeny možnosti opravy Uživatel nahraje změněný text zpět do systému UU a odemkne jej Uživatel odemkne načtený list v systému UU, aniž by jej měnil Zdroj: Vlastní zpracování 21
Následující tabulka pak ukazuje, které funkční požadavky jsou pokryty kterými případy užití: Tabulka 3: Přiřazení případů užití k požadavkům UC1 R01
UC2
UC3
UC4
UC5
X
X
X
R02
X
R03
X
R04
X
R05
X
R06 Zdroj: Vlastní zpracování
4.1.1.
UC1 – Přihlášení
Popis: Uživatel zadá přihlašovací údaje a aplikace vytvoří sezení pro komunikaci se systémem Unicorn Universe. Vstupní podmínky: •
Aplikace byla řádně spuštěna a má přístup na Internet
•
Služba Unicorn Universe je v provozu
•
Uživatel má platné přístupové údaje do systému UU
Základní tok: 1. Uživatel vyplní přihlašovací údaje 2. Aplikace se dle vložených údajů autentizuje v systému Unicorn Universe Alternativní tok A1 – navazuje na základní tok v bodě 2: 1. Jestliže systém Unicorn Universe přihlašovací údaje odmítne, zobrazí se o tom uživateli hlášení 22
2. Alternativní tok A1 končí a vrací se do základního toku v bodě 1 4.1.2.
UC2 – Stažení textu
Popis: Uživatel zadá kód artefaktu a zvolí na něm list, se kterým chce pracovat. List se ze systému UU stáhne, uzamkne se proti úpravám jinými uživateli a jeho obsah se zobrazí uživateli. Vstupní podmínky: •
Aplikace je přihlášena do systému Unicorn Universe
•
Uživatel zná kód artefaktu, se kterým chce pracovat
•
Uživatel má právo požadovaný list upravovat
Základní tok: 1. Uživatel zadá kód artefaktu 2. Aplikace ze systému UU načte seznam názvů listů daného artefaktu a předloží jej uživateli k volbě 3. Uživatel si zvolí list k úpravě 4. Aplikace stáhne požadovaný list, uzamkne jej proti úpravám ostatními uživateli v systému a zobrazí jeho obsah Alternativní tok A1 – navazuje na základní tok v bodě 2: 1. Jestliže je zadaný kód artefaktu neplatný, zobrazí se o tom uživateli hlášení 2. Alternativní tok A1 končí a vrací se do základního toku v bodě 1 Alternativní tok A2 – navazuje na základní tok v bodě 4: 1. Jestliže uživatel nemá právo daný list upravovat, nebo je již uzamčen, zobrazí se o tom hlášení a k načtení ani uzamčení nedojde 2. Alternativní tok A2 končí a vrací se do základního toku v bodě 3
23
4.1.3.
UC3 – Kontrola textu
Popis: Uživatel zvolí jazyk, ve kterém pak probíhá kontrola pravopisu. Aplikace uživatele upozorňuje na možné chyby a dává mu možnosti tyto chyby opravovat. Vstupní podmínky: •
V aplikaci je načtený text listu, se kterým se má pracovat
•
Text je psán v jazycích, pro něž má aplikace slovníky
Základní tok: 1. Uživatel zvolí požadovaný jazyk a spustí kontrolu textu 2. Aplikace provede kontrolu textu pomocí zvoleného jazykového slovníku a slovníku uživatelských slov 3. Aplikace dá uživateli najevo, že kontrola skončila Alternativní tok A1 – navazuje na základní tok v bodě 2: 1. Jestliže kontrola narazí na neznámé slovo, zastaví se 2. Aplikace načte seznam možných oprav a zobrazí jej uživateli k výběru 3. Uživatel zvolí náhradní slovo ze seznamu 4. Aplikace nahradí slovo v textu zvolenou opravou 5. Alternativní tok A1 končí a vrací se do základního toku v bodě 2 Alternativní tok A2 – navazuje na alternativní tok A1 v bodě 2: 1. Jestliže uživateli žádné z nabízených slov nevyhovuje, zadá vlastní slovo k opravě 2. Aplikace uloží zadané slovo do slovníku uživatelských slov 3. Alternativní tok A2 končí a vrací se do alternativního toku A1 v bodě 4 Alternativní tok A3 – navazuje na alternativní tok A1 v bodě 2: 1. Jestliže uživatel nechce se slovem nic dělat, provede jeho přeskočení 2. Alternativní tok A3 končí a vrací se do alternativního toku A1 v bodě 5 24
Alternativní tok A4 – navazuje na alternativní tok A1 v bodě 2: 1. Jestliže uživatel chce, aby bylo slovo považováno za správné, označí jej tak 2. Aplikace uloží dané slovo do slovníku uživatelských slov 3. Alternativní tok A4 končí a vrací se do alternativního toku A1 v bodě 5 Alternativní tok A5 – navazuje na alternativní tok A1 v bodě 2: 1. Jestliže je slovo označeno za chybné, protože je z jiného jazyka, zvolí uživatel příslušný jazyk v nabídce 2. Alternativní tok A5 končí a vrací se do alternativního toku A1 v bodě 5 4.1.4.
UC4 – Uložení textu
Popis: Aplikace na uživatelovo vyžádání nahraje obsah listu zpět do systému, odemkne jej a vymaže text z paměti, aby jej uživatel dále neupravoval. Vstupní podmínky: •
Aplikace je přihlášena do systému Unicorn Universe
•
V aplikaci je načtený list
•
Text listu byl upraven
Základní tok: 1. Uživatel zvolí uložení textu 2. Aplikace text nahraje zpět do systému Unicorn Universe a odemkne list pro úpravy ostatními uživateli 3. Aplikace smaže zobrazovaný text z obrazovky a z paměti 4. Aplikace uživatele informuje o úspěšném uložení listu
25
4.1.5.
UC5 – Odemčení listu
Popis: Aplikace na uživatelovo vyžádání list v systému Unicorn Universe odemkne a vymaže jeho obsah z paměti, aby jej uživatel dále neupravoval. Vstupní podmínky: •
Aplikace je přihlášena do systému Unicorn Universe
•
V aplikaci je načtený list
Základní tok: 1. Uživatel zvolí odemčení listu 2. Aplikace v systému Unicorn Universe načtený list odemkne pro úpravy ostatními uživateli 3. Aplikace smaže zobrazovaný text z obrazovky a z paměti
26
4.2.
Diagram případů užití Obrázek 1: Diagram případů užití
Zdroj: Vlastní zpracování Obrázek 1 pro přehlednost doplňuje analýzu případů užití z předchozích kapitol. Jak je ze specifikace patrné, vystupují v činnosti našeho programu dva aktéři: uživatel a systém Unicorn Universe. Aktivní roli zaujímá uživatel, protože spouští jednotlivé případy užití, a dle konvence je tak v diagramu zakreslen vlevo. Systém Unicorn Universe naopak jen reaguje na přicházející požadavky a jedná se tedy o roli pasivní, která se znázorňuje na pravé straně diagramu.
27
5.
Jazykové komponenty
V této kapitole se věnujme softwaru, který bude plnit roli jazykové kontrolní komponenty v našem appletu. Nejdříve si popíšeme, jak byl tento software hledán a jaká kritéria musel splnit. Přiblížíme si jednotlivé projekty, které se ukáží jako potenciálně užitečné a porovnáme je dle kvantifikovatelných parametrů.
5.1.
Identifikace
Jelikož byla jedním z kritérií dostupnost kódu hledané jazykové komponenty, probíhal průzkum ve veřejně přístupných úložištích otevřeného softwaru. Seznam těchto úložišť byl převzat z anglické Wikipedie [21] a obsahoval následující servery: •
Alioth
•
Assembla
•
BerliOS
•
Betavine
•
Bitbucket
•
BountySource
•
CodePlex
•
Freepository
•
GitHub
•
Gitorious
•
GNU Savannah
•
Google Code
•
java.net
•
JavaForge
•
KnowledgeForge
•
Launchpad
•
OSOR.eu 28
•
OW2 Consortium
•
Project Kenai
•
SEUL.org
•
SourceForge
•
Tigris.org
Pokud daný server umožňoval prohledávání uložených projektů, bylo tak činěno kombinováním klíčových slov: java, spell, spelling, spellcheck, spellchecker, spellchecking, spell-check, spell-checker, spell-checking. Vzhledem k velkému množství výsledků byly vyřazeny všechny projekty, které neměly jasně specifikovanou licenci, nebo v jejichž popisu či dokumentaci nebyla explicitně zmíněna integrace s programem napsaným v Javě. Takto byly identifikovány následující projekty jako kandidáti pro implementaci v rámci appletu: •
google-api-spelling-java
•
JaSpell
•
JOrtho
•
Jazzy
•
HunspellJNA
Bylo provedeno ještě doplňující hledání pomocí internetového vyhledávače Google, aby bylo možné identifikovat i projekt, který nevyužívá některého ze zmíněných úložišť. Výsledkem tohoto hledání bylo rozšíření listiny kandidátů o projekt LanguageTool, jehož domovskou stránkou je . Představme si nyní jednotlivé kandidáty podrobněji.
5.2.
google-api-spelling-java
Aplikace google-api-spelling-java neprovádí kontrolu pravopisu sama o sobě, ale využívá rozhraní vyhledávače Google. Vlastní program je napsaný v jazyce Java a je uvolněn pod licencí Apache License 2.0. V době psaní této části (červenec 2013) je aplikace zřejmě ne29
funkční.
Pokouší
se
volat
na
adresu
lang=en&hl=en>, ale blok volání skončí výjimkou java.io.FileNotFoundException. Jelikož pochází jediný dostupný kód aplikace z období března 2010, lze se domnívat, že je tento způsob volání Google API již neplatný. Této situaci nasvědčují problémy uživatelů s používáním aplikací využívajících tuto neoficiální vlastnost Google API, jako například u editoru TinyMCE .
5.3.
JaSpell
Tento projekt implementuje svůj vlastní algoritmus vyhledávání chyb a návrhů. Je napsaný pouze v Javě a je dostupný pod BSD 2-Clause License. Zdrojový kód byl aktualizován naposledy 29. 3. 2005. K dispozici jsou slovníky brazilské portugalštiny, angličtiny, italštiny, evropské portugalštiny a španělštiny. Slovníky jsou prosté textové soubory, jejichž obsah je strukturován jako asociativní pole, kde se k jednotlivým slovům přiřazuje číselně vyjádřená hodnota pravděpodobnosti použití. Algoritmus programu je silně přizpůsoben portugalskému a anglickému jazyku a zahrnuje v sobě pravidla fonetiky a vzdálenost jednotlivých písmen na klávesnici QWERTY s portugalskými znaky, aby co nejlépe vyhodnotil zamýšlené slovo. Ačkoliv by tedy bylo vcelku snadné vytvořit slovník pro další jazyk, využití těchto pokročilejších vyhledávacích metod by se neobešlo bez významného zásahu do původního zdrojového kódu.
5.4.
JOrtho
JOrtho je aplikací, která se specificky zaměřuje na integraci do Java programů založených na grafické knihovně Swing. Vyžaduje pro své fungování komponentu třídy JTextComponent nebo jejího potomka, tedy například JTextPane, JEditorPane, nebo JTextArea. Kontrolu provádí vlastním algoritmem a v grafické komponentě, ke které je zaregistrována, provádí během vlastní kontroly textu zvýrazňování chybně napsaných slov. Také zajišťuje kontextové menu na pravém tlačítku myši, kde vypisuje návrhy oprav a umožňuje dané slovo uložit do uživatelského slovníku. K dispozici jsou slovníky pro angličtinu, němčinu, francouzštinu, ruštinu, polštinu, arabštinu, španělštinu, italštinu a nizozemštinu. Slovníky 30
vytváří autor, společnost i-net software, z dat projektu Wiktionary a zohledňují ohýbání slov v daném jazyce. Program je napsán v jazyce Java a je zveřejněn pod licencí GPL, je však možné od výrobce zakoupit i licenci komerční. Zdrojový kód aplikace byl na serveru SourceForge naposledy aktualizován 11. března 2013.
5.5.
Jazzy
Projekt Jazzy je další, který implementuje vlastní algoritmus kontroly pravopisu. Dokumentace zmiňuje jen tolik, že se podobá algoritmu používanému v knihovně GNU Aspell. V porovnání s předchozími kandidáty je přizpůsoben pro práci s grafickým i textovým rozhraním. V případě grafického rozhraní opět pracuje s třídou JTextComponent, volí však jiný přístup než předchozí aplikace JOrtho. Obsah prochází sekvenčně a na každém slově, které vyhodnotí jako nesprávné, vytvoří dialog, skrz který přijímá pokyny od uživatele. K dispozici je pouze anglický slovník, který je prostým seznamem slov v různých tvarech, což svědčí o absenci používání jakýchkoliv gramatických pravidel při hledání chyb či návrhů. Slovníkové třídy zjevně předpokládají možnost použití doplňujícího fonetického slovníku, který se však ve zveřejněných balíčcích nenachází. Kód byl naposledy aktualizován koncem listopadu 2005 a zdá se, že další vývoj od té doby neprobíhá. Celá aplikace je psána pouze v Javě a je uvolněna pod licencí LGPL.
5.6.
HunspellJNA
HunspellJNA je projekt, jehož cílem není přímo vytvoření programu na kontrolu pravopisu, ale umožnit v aplikacích v jazyce Java k tomuto účelu použít populární knihovnu Hunspell, která je napsána v jazyce C++. Toho je docíleno využitím knihovny Java Native Access (JNA), která slouží právě k práci s nativními knihovnami [22]. HunspellJNA v sobě obě tyto knihovny spojuje a poskytuje programátorovi jednoduché rozhraní pro provádění kontroly pravopisu a získávání návrhů v Javě. Knihovna Hunspell je široce užívaná knihovna, kterou je možno nalézt v řadě programů, jako je například LibreOffice, Mozilla Firefox, Google Chrome a Mac OS X [23]. Díky její popularitě pro ni existují slovníky velkého množství jazyků a lze ji považovat za spolehlivě prověřenou lety, neboť nahradila 31
řadu jiných knihoven, které se používaly předtím. Knihovna Hunspell je vydána pod trojím licencováním GPL/LGPL/Mozilla Public License a stejně tak je i projekt HunspellJNA. Knihovna JNA má dvojí licencování, a to LGPL a Apache License 2.0. Použití nativní knihovny je samozřejmě poněkud omezující, neboť předpokládá přítomnost knihovny zkompilované pro danou platformu v systému, kde má být použita. Vývoj knihovny Hunspell se zřejmě zpomalil, poslední verze byla vydána v roce 2011, ale autor stále reaguje na hlášení o chybách. JNA je velmi živý projekt a vlastní aplikace HunspellJNA se příliš nevyvíjí, nicméně funkčně je zcela závislá na zmíněných knihovnách, takže s výjimkou řešení případných chyb nelze příliš změny očekávat.
5.7.
LanguageTool
Program LanguageTool se od ostatních zmíněných projektů odlišuje zejména tím, že se zaměřuje i na kontrolu gramatiky. Úroveň podpory pro jednotlivé jazyky je však různá a podpora češtiny momentálně schází úplně. Aplikace může pracovat samostatně, nebo být integrována do jiné aplikace psané v jazyce Java. K tomuto poskytuje bohatou dokumentaci ve formátu Javadoc na adrese . Vedle toho jsou již vytvořeny zásuvné moduly do programů OpenOffice, LibreOffice a Mozilla Firefox, na které se vývojáři specificky zaměřují. Vlastní aplikace je dostupná pod licencí LGPL, ovšem využívá ke svému fungování řadu komponent, které jsou pod různými open-source licencemi. Mezi nimi je také knihovna Hunspell, která slouží jako doplňková kontrola překlepů pro některé jazyky. Mimo nativní knihovny Hunspell je však celá aplikace psána v Javě. Vývoj probíhá aktivně a je publikováno kolem čtyř stabilních verzí ročně.
5.8.
Porovnání a výběr
Výběr jazykové komponenty se zakládal na kritériích uvedených v zadání. Těmito kritérii byla kvalita (přesnost) jazykové korekce, výkonnost, dostupnost slovníků pro různé jazyky, integrovatelnost do aplikací psaných v Javě, otevřený zdrojový kód a vhodná licence. Kritéria otevřeného zdrojového kódu a uplatnitelnosti v rámci programů tvořených v Javě byla
32
jako klíčová užita již při výběru komponent jako kandidátů vhodných pro integraci do cílového appletu. Další kritérium v pořadí významnosti je možnost kontroly v různých jazycích, minimálně pak v češtině, angličtině, slovenštině, španělštině a ruštině. Toto kritérium by teoreticky mohla částečně oslabit možnost snadno kontrolu nového jazyka přidat, ovšem zejména s ohledem na flektivní jazyky, mezi které patří i čeština, se jedná o netriviální úkol, pro který je třeba množství kvalifikované práce, jelikož není v praxi řešitelný automatizací. Dalším velmi významným kritériem je použitá licence. Vzhledem k vývoji appletu v rámci této práce a možné další aplikace v rámci systému Unicorn Universe není žádoucí taková licence, která by například omezovala použití pro nekomerční účely, nebo vázala možnost použití programu na nákup licenčního klíče apod. Stejně tak by byla problematická licence typu GNU GPL, která by vynucovala uvolnění zdrojových kódů programu, který danou komponentu integruje, jelikož Unicorn Universe je proprietární systém bez otevřeného zdrojového kódu. Kritérium přesnosti ve vyhledávání chyb a poskytování návrhů přímo reflektuje komfort a užitečnost z pohledu uživatele. Jeho závažnost lze považovat za nižší než v předchozích případech, neboť poskytuje-li daná komponenta alespoň prosté slovníkové vyhledávání pro daný jazyk, pak se vždy může učit a rozšiřovat tak svou užitečnost v čase, přinejmenším v rámci určitých mezí. Nakonec je třeba přihlédnout i k výkonnosti aplikace. Automatizovaná kontrola pravopisu, která by trvala déle, než je čas potřebný k napsání daného textu, by zřejmě nebyla z pohledu uživatele příliš užitečná a pravděpodobně by byla zároveň náročná na zdroje. Pro porovnání rychlosti a přesnosti jednotlivých kandidátních programů byl použit vzorek anglického textu (Příloha 1 – Testovací text), protože pouze angličtina byla dostupná u všech sledovaných aplikací a dávala tedy možnost jistého porovnání. Pro získání většího objemu byl vlastní text desetkrát zopakován, celkem měl tedy testovací text 3870 slov. Rychlost byla vyhodnocována tak, že se měřila doba běhu metody zodpovědné za projití celého textu a vytipování chyb. V případě programu HunspellJNA bylo třeba nejprve takovou metodu vytvořit, k čemuž byla použita třída BreakIterator. Dále byla v aplikaci Jazzy metoda výpočtu návrhů vyřazena z běhu nahrazením prázdným seznamem, jelikož ostatní testované aplikace také implicitně neprováděly hledání návrhů spolu s hledáním chyb. Toto měření bylo desetkrát opakováno a aritmeticky zprůměrováno pro omezení velikosti chyby vlivem fluktuace výpočetního výkonu počítače kvůli činnosti ji33
ných programů na pozadí. Pro zjištění doby běhu zkoumané metody byla použita systémová metoda System.nanoTime(), ovšem pro větší přehlednost byl výsledný průměr zaokrouhlen na milisekundy. Následoval jeden průchod neopakujícím se textem, který byl upraven takto: Na začátku textu bylo slovo „mastery“ změněno na „mmastery“ a slovo „Modern“ na „Moderning“. Tato slova měla sloužit jako kontrolní chyby, jelikož původní text zřejmě žádné neobsahoval, přičemž první slovo bylo míněno jako demonstrativní překlep a druhé by mohlo potenciálně potlačit vyvolání chyby, bylo-li by analyzováno primitivním morfologickým algoritmem. Následně byla v rámci průchodu daného textu programem vypsána identifikovaná chybná slova spolu s návrhy oprav. Výsledek ukazuje tabulka 3:
34
Tabulka 4: Měření rychlosti a porovnání výstupů Program
Průměrná doba běhu [ms]
Nalezené chyby (opravné návrhy) mmastery (plastery)
JaSpell
105 851
Moderning (governing) scholiasts (-) mmastery (mastery, mattery, mystery, maskery, roastery, Eastery, monstery, master, maltery, lastery, mistery, measter, monastery, masterly, masters)
JOrtho
22 765
Moderning (Governing, Hodening, Derning, Sodering, Moderating, Modelling, Moldering, Mourning, Morning, Moidering, Modernize, Modernism, Modernise, Modeling, Modernity) mmastery (mastery) Moderning (-) a (ah, pa, ad, at, as, ha, an, am, ax, QA) tenacity (density)
Jazzy
573 017
memorizing (-) memorize (memories) scholiast (-) refiners (refines, refiner, definers) rhetoricians (-) mmastery (mastery, m mastery, masterly, Master, master)
HunspellJNA
29 799
Moderning (Modernizing, Modernizer, Modernize, Modernism) scholiasts (scholastics, scholastic) mmastery (mastery)
LanguageTool
793 656
Moderning (-) scholiasts (-) Zdroj: Vlastní zpracování 35
Jak můžeme vidět, není použití nativní knihovny přes zvláštní interface pro program HunspellJNA nijak handicapující, co se poměrného výkonu vůči aplikacím psaným pouze v Javě týče. Dále je patrné, že slovník dodávaný k programu Jazzy má nejomezenější slovní zásobu. Velmi podivuhodné je u tohoto programu mylné vyhodnocení malých a, ačkoliv se jedná o zásadní prvek anglického jazyka a velké A za chybu označeno nebylo. Celkově co do přesnosti i rychlosti triumfoval projekt JOrtho. Po zvážení všech kritérií a na základě doporučení zadavatele [24] byla za komponentu do výsledné praktické ukázky zvolena aplikace HunspellJNA. Jejími největšími přednostmi jsou dostupnost slovníků pro velké množství jazyků, mezi nimiž byla významná zejména již hotová a funkční podpora češtiny, kterou žádný jiný projekt nenabídl. Nezanedbatelnou je též reference v podobě rozšířenosti použití knihovny Hunspell a významnou výhodou proti aplikaci JOrtho je také přístupnější licencování pod LGPL.
36
6.
Realizace
Nyní již známe hlavní prvky, které jsou použity v praktické části, a můžeme přistoupit k popisu výsledného appletu, který byl pracovně pojmenován jako Spell Checker for Unicorn Universe (dále jen SCUU). Aplikace byla vytvořena v programovacím jazyce Java a sleduje objektově orientované paradigma programování. Základem je modulární architektura, která umožňuje některé prvky nahrazovat a měnit bez ovlivňování těch ostatních. Vzhledem k tomu, že se však jedná jen o demonstrativní program, jehož některé rysy byly jasně definovány (grafický applet, práce s dokumenty v Unicorn Universe atd.), nebyly principy modularity uplatňovány tam, kde by vedly ke znepřehledňování výsledného kódu a celkového řešení. Následující podkapitoly představují popis hlavních rysů a důležitých činností uvnitř programu, jelikož vyčerpávající popis je již ztělesněn v samotném zdrojovém kódu. Ten byl psán s důrazem na čitelnost a je doplněn komentáři v místech, kde by nemusely být dané vazby na první pohled zřejmé. Doporučuje se tedy nahlížet do zdrojového kódu programu na přiloženém CD (příloha 2) a použít tuto kapitolu jako průvodce a rozšiřující komentář k jednotlivým použitým prvkům a algoritmům.
37
6.1.
Přehled architektury Obrázek 2: Náhled architektury
Zdroj: Vlastní zpracování Jak ilustruje obrázek 2, celá aplikace se sestává z několika modulů, mezi které se dělí výsledná funkčnost. Šipky na obrázku naznačují způsob volání jedné komponenty z druhé. Jednotlivé součásti vlastního kódu SCUU jsou zároveň třídami nesoucími stejné pojmenování a všechny jsou součástí jednoho balíku. Komponenta HunspellJNA je přiložena jako externí balík a komponenta Unicorn ES API je ve skutečnosti množinou 116 externích archivů, které jsou vzhledem ke své provázanosti importovány jako celek.
38
6.2.
Interní komponenty
Interními komponentami míníme všechny třídy, které jsou součástí vlastního balíčku aplikace, zvaného scuu. Obrázek 3 ukazuje diagram tříd tohoto balíčku v grafické notaci podobné UML (Unified Modelling Language). Třída Gui, obstarávající grafické rozhraní a inicializaci appletu, obsahuje množství vnořených tříd, které slouží jednoúčelově k vykonávání akcí nad tlačítky. Pomocná třída UESLogin řeší přihlašování do systému Unicorn Universe. Třída UESDocumentHandler nese většinu negrafických funkcí, neboť obstarává veškerou manipulaci s dokumenty z UU. Navazuje na ni třída SpellChecker, která slouží jako adaptér pro práci s HunspellJNA. Třída DocumentNode je pomocná datová struktura pro manipulaci s obsahem artefaktů.
39
Obrázek 3: Diagram tříd
Zdroj: Vlastní zpracování 40
6.2.1.
Gui
Třída scuu.Gui představuje vlastní základ appletu, neboť je potomkem třídy javax.swing.JApplet a dochází v ní tedy k inicializaci celého appletu. Její hlavní náplní je poskytovat celé aplikaci grafické uživatelské rozhraní. Obrázek 4: Výchozí vzhled GUI
Zdroj: Vlastní zpracování
41
Obrázek 4 demonstruje vzhled aplikace při jejích výchozích rozměrech (640 × 640 pixelů). Největší plochu zabírá komponenta JTextPane, do které se vykresluje vlastní textový obsah artefaktů, respektive jejich listů. Následuje ovládací panel v pravé části, jehož prvky jsou uživateli zpřístupňovány v závislosti na možnostech uživatelské interakce při různých stavech aplikace. Poslední je stavový řádek s textem v levém dolním rohu. Jeho úkolem je informovat uživatele o stavu aplikace, např. zda právě probíhá pravopisná kontrola textu, nebo se čeká na vstup od uživatele. Jak nastínil již obrázek 3, třída dále obsahuje množství vnořených privátních tříd. Každá z těchto tříd implementuje rozhraní ActionListener a sleduje své vlastní tlačítko ovládacího panelu, kromě třídy ActionLanguages, která sleduje rozbalovací menu (combo box) s výběrem jazyka. Tato třída má v rámci scuu přímou návaznost jen na třídu UESDocumentHandler, kterou inicializuje a jejíž metody volá v reakci na vstup od uživatele. Také umožňuje ostatním třídám v balíčku zobrazovat hlášení pomocí metod showError, showWarning a showNotification. 6.2.2.
UESDocumentHandler
Toto je třída zodpovědná za celý cyklus manipulace s artefakty UU, tedy jejich vyhledávání, parsování, zobrazování, průchod při kontrole pravopisu, modifikaci a uložení zpět do systému Unicorn Universe. Požadovaný list artefaktu je stažen ve formátu UXML, tedy interním formátu UU pro uchovávání formátovaného dokumentu. Příloha 3 dává příklad struktury takového dokumentu. Třída javax.xml.parsers.DocumentBuilder zpracovává tento dokument na XML strom, který třída UESDocumentHandler prochází a identifikuje v něm významné elementy,
jmenovitě
,
,
a . Odkazy na tyto elementy jsou spolu s dalšími parametry ukládány v seznamu objektů typu DocumentNode, o kterém pojednává příští kapitola. Formátovaný textový obsah plynoucí z těchto elementů je vykreslen v komponentě JTextPane třídy Gui. Formátování se momentálně týká zvýraznění textu nadpisů tučným písmem a odřádkování odstavců a nadpisů. Pro vlastní kontrolu pravopisu je text v neformátované podobě 42
z JTextPane extrahován a pomocí třídy java.text.BreakIterator rozdělen na jednotlivá slova, která jsou prostřednictvím třídy SpellChecker kontrolována. Úpravy v textu jsou vedle modifikace obsahu JTextPane promítány zpět do patřičných UXML elementů. Jejich struktura, počet i parametry však zůstávají nezměněny, čímž se předchází narušení původního formátování dokumentu. Třída UESDocumentHandler volá třídy Gui a SpellChecker, na které si udržuje stálé odkazy. Zároveň dělá těmto třídám prostředníka a tím je od sebe odstiňuje, což v principu dovoluje upravovat jejich implementaci bez vzájemného ovlivňování. Modularitu celého řešení mírně omezuje to, že UESDocumentHandler manipuluje s JTextPane komponentou třídy Gui přímo a vyžaduje tak její přítomnost, ovšem pro demonstraci funkčnosti je to v rámci situace vymezené zadáním dostačující. 6.2.3.
DocumentNode
Třída scuu.DocumentNode je pomocnou datovou třídou pro ukládání informací při zpracovávání UXML dokumentů třídou UESDocumentHandler. Uchovává v sobě tři položky: První je odkaz na příslušný org.w3c.dom.Node element UXML dokumentu, druhá je číselná pozice posledního písmena textového obsahu tohoto elementu v rámci textu z JTextPane, což slouží k mapování pozice kurzoru mezi tímto souvislým textem a jednotlivými elementy, a třetí je informace o grafickém formátování daného elementu pomocí třídy javax.swing.text.SimpleAttributeSet. Instance DocumentNode jsou zakládány ve třídě UESDocumentHandler, která si na ně uchovává odkazy ve spojovém seznamu. 6.2.4.
SpellChecker
Třída scuu.SpellChecker má na starost práci s knihovnou HunspellJNA, nativními knihovnami a slovníky. Slovníky a zkompilované knihovny ukládá do domovské složky uživatele do adresáře .scuu, přičemž pro platformní nezávislost je domovská složka identifikována systémovou proměnou běhového prostředí Java zvanou „user.home“. Pokud ještě neexistuje, založí prázdný slovník uživatelských slov, kam poté nová slova ukládá. 43
Soubory se nikdy nepřepisují, pouze se vytvoří vždy, když soubor daného jména dosud neexistuje. Je tak možné například soubor s uživatelským slovníkem kopírovat z jednoho počítače do druhého a SCUU bude s jeho obsahem pracovat stejně, jako kdyby na daném počítači teprve vznikl. Všechny odkazy na HunspellJNA soustředí v sobě a třídu UESDocumentHandler tak zcela odstiňuje od vlastní knihovny kontroly pravopisu. To umožňuje tuto knihovnu nahradit jinou s podobnou funkčností, aniž by to jakkoliv ovlivnilo ostatní třídy. 6.2.5.
UESLogin
Pomocná třída scuu.UESLogin řeší přihlášení uživatele do systému Unicorn Universe. Obslužné knihovny UES API vyžadují v lokálním počítači přítomnost několika konfiguračních souborů, bez kterých se nepodaří navázat s UU spojení. Tyto soubory se ukládají v uživatelské složce do adresáře .ues a třída UESLogin tyto soubory nainstaluje, pokud již v počítači nejsou. Tuto třídu inicializuje třída Gui v rámci své vlastní inicializace, čímž vyvolá autentizační proces, kdy je vytvořeno vyskakovací okno pro vložení přihlašovacích údajů do UU. Tento dialog je zcela mimo kontrolu SCUU, protože je spravován přímo UES API knihovnami. Autentizační proces je obslužnými knihovnami automaticky vyvolán vždy, když dojde k jejich použití a uživatel dosud autentizován není. Pro přehlednější postup práce s appletem byla zvolena vynucená autentizace při jeho spuštění, aby k ní nedocházelo až když uživatel zadá kód artefaktu ke stažení, což by mohlo být matoucí.
6.3.
Externí komponenty
Program SCUU se přímo opírá o dvě externí komponenty. HunspellJNA poskytuje rozhraní pro kontrolu pravopisu a UES API je rozhraním pro práci se systémem Unicorn Universe.
44
6.3.1.
HunspellJNA
Knihovna HunspellJNA poskytuje rozhraní pro provádění kontroly pravopisu nativní knihovnou Hunspell. Ke své činnosti dále vyžaduje knihovnu JNA. HunspellJNA byla z dostupného zdrojového kódu zkompilována do archivu HunspellJNA.jar, který je importován do pracovního prostoru appletu. Stejně tak je připojen i archiv jna.jar, který byl již přiložen ke zdrojovému kódu projektu HunspellJNA. V souborech projektu byly přítomné též již pro různé platformy zkompilované knihovny Hunspell. Ty jsou zkomprimovány v samostatném ZIP archivu v rámci JAR souboru appletu a do lokálního počítače je instaluje třída scuu.SpellChecker. Soubory knihoven musí být pojmenovány dle různých platforem tak, aby je knihovna HunspellJNA dokázala správně identifikovat. Při inicializaci si však sama vybere tu správnou a to buďto z adresáře, odkud je knihovna volána, či kam je hodnotou předanou v konstruktoru nasměrována. Dále jsou k praktickému užití komponenty nezbytné jazykové slovníky. Ty jsou stejně jako nativní knihovny přítomny v JAR souboru appletu ve zvláštním archivu a jsou převzaty z projektu Chromium, otevřené zdrojové základny webového prohlížeče Google Chrome, ze stránek . Podobně jako nativní knihovny je třeba sledovat jistou jmennou konvenci souborů, což v daném případě konkrétně znamená mít přítomný pár určitého jména s koncovkami aff a dic. Do souborů aff se zaznamenávají například různá morfologická pravidla, tedy množiny předpon a přípon, obvyklé záměny písmen a další jazykové jevy. Soubory dic pak obsahují seznam slov, přičemž ke každému je možné uvést značky odkazující k pravidlům uvedeným v souboru aff. Výjimkou je první řádek souboru, který obsahuje číselné vyjádření počtu zanesených slov. Každé slovo se v tomto slovníku uvádí na zvláštní řádek. Mapování konkrétního názvu souboru na jazykovou volbu v SCUU je zaneseno v metodě setLang třídy scuu.UESDocumentHandler takto: •
cs_CZ – čeština
•
en_US – angličtina
•
sk_SK – slovenština
•
es_ES – španělština
•
ru_RU – ruština 45
Jedno z omezení HunspellJNA, na které upozorňuje sám autor, představuje absence monitorování změn v načtených slovnících. SCUU tuto situaci ošetřuje tak, že použitím metod destroyDictionary a getDictionary třídy dk.dren.hunspell.Hunspell se daný slovník uvolní z paměti a poté znovu načte. Tato operace je použita jen při modifikaci uživatelského slovníku. 6.3.2.
Unicorn ES API
Obsluha UES API je zajištěna množinou 116 JAR souborů, které jsou všechny importovány do pracovního prostoru appletu. Zřejmě nejsou vzhledem k omezenému množství funkcí využitých appletem zapotřebí všechny, ovšem jejich vazby mezi sebou jsou netriviální a dokumentace v tomto případě neposkytuje žádný vhled do jejich strukturování. Knihovna byla získána z obsahu balíčku JRuby Gem* jménem ues.core, který je k dispozici na adrese . Je však psána v Javě a nevyužívá interpretu JRuby. Knihovna je dostupná volně a zdarma, ovšem k provádění příkazů v UU musí mít uživatel přiděleno oprávnění, jak zmiňovala již kapitola 2.3. Vlastní práce s API je v Javě touto knihovnou zajištěna tak, že stačí vytvářet objekty v ní definovaných tříd a volat jejich metody. Knihovna se na pozadí stará o vlastní generování a výměnu SOAP zpráv a jejich překlad na třídy a metody jazyka Java. Budeme-li chtít naprogramovat například získání seznamu listů na určitém artefaktu, postačí nám k tomu následující kód: UESURI artifactUri = UESURI.parseURI(“ues:UNI-BT:ART”); UESSheet sheet = UESComponentFactory.getComponent(UESSheet.class); UESResultList artifactSheets = sheet.getSheetList(artifactUri, new UESSheetGetSheetList());
*
Gem je systém balíčkování pomocných knihoven v prostředí Ruby a je užíván i u JRuby.
46
Jak můžeme na tomto příkladu vidět, s URI artefaktů v systému se pracuje prostřednictvím třídy cz.ues.core.commons.uri.UESURI, která skladuje jejich strukturu a pomocí statické metody parseURI je umí vytvářet z textových řetězců. Instanci třídy cz.ues.core.content.UESSheet získáme pomocí tovární třídy cz.ues.platform.container.UESComponentFactory, což platí i pro ostatní základní třídy. Do metody getSheetList pak předáváme požadované URI a zvláštní objekt, pomocí kterého by bylo možné výsledkovou sadu filtrovat, a zpět obdržíme seznam obsahující atributy jednotlivých listů, včetně objektu pro získání obsahu. S ostatními příkazy UES API se pak pracuje analogicky k uvedenému příkladu. Pro úplnost ještě dodejme, že v ukázkovém kódu volání parseURI vyhazuje výjimku typu cz.ues.platform.commons.uri.InvalidFormatRTException (neodpovídá-li například vložený řetězec platné reprezentaci URI) a metoda getSheetList výjimku typu cz.ues.core.content.exception.UESSheetRTException, což by bylo třeba dále v kódu ošetřit, aby byl zkompilovatelný.
6.4.
Applet
Jak bylo zmíněno, celý obsah balíčku scuu je zkompilován a uložen v jediném JAR souboru scuu.jar, spolu s archivy obsahujícími nativní knihovny, slovníky a konfigurační soubory pro použití knihoven UES API. Bezpečnostní omezení zmíněná v kapitole 2.2 brání appletu v přístupu k lokálnímu souborovému systému, což je pro instalaci a tedy i fungování samotného appletu zcela zásadní. Všechny soubory JAR tak musely být podepsány certifikátem. Za tímto účelem byl vygenerován certifikační klíč nástrojem keytool, aby byly tímto klíčem podepsány všechny archivy pomocí nástroje jarsigner (obojí běžnou součástí vývojových nástrojů jazyka Java). Applet tedy není podepsán certifikátem, který by odkazoval na obecně uznávanou certifikační autoritu, ovšem pro účely této práce to bylo považováno za dostačující řešení. 6.4.1.
Spouštění
Pro ukázku nasazení byl vytvořen dokument HTML, v rámci kterého je applet spouštěn. Umístění appletu na stránku je realizováno skriptem Deployment Toolkit, zmíněného 47
v kapitole 2.2. Během spouštění je na některých platformách zobrazována animace, která v momentě spuštění zmizí a během prodlevy před vytvořením přihlašovacího okna je plocha appletu prázdná. Tato prodleva na některých systémech trvá desítky sekund. Mezi přihlašovacím oknem a vykreslením vlastního grafického rozhraní appletu je pak již časová prodleva v řádu sekund či je zcela zanedbatelná. 6.4.2.
Ukázka použití
Ukažme si nyní, jak vypadá možné použití appletu v praxi. Postup bude demonstrován na platformě operačního systému Microsoft Windows 8 Pro s webovým prohlížečem Internet Explorer 10 a běhovým prostředím Oracle Java 1.7.0_25, ovšem na ostatních testovaných prostředích vypadal prakticky totožně. Jediná zjištěná významnější výjimka je uvedena v dalším textu. Pro účely této ukázky mějme v systému Unicorn Universe vytvořený nějaký dokument, například text z přílohy 1 obohacený o několik prvků formátování. Prohlížeč Internet Explorer 10 zobrazí tento formátovaný dokument tak, jak ve vidět na obrázku 5. Jsou použity dvě úrovně nadpisů, několik odstavců, písmo tučné, barevné a zvětšené a kurzíva.
48
Obrázek 5: Formátovaný dokument v UU
Zdroj: Snímek obrazovky – artefakt Unicorn Universe Následně ve stejném prohlížeči otevřeme stránku s appletem. Pokud uživatel nemá nainstalovanou správnou verzi Javy, je přesměrován na stránku Oracle s instalačními soubory. V opačném případě je mu zobrazeno okno s povolením spuštění appletu, jak ukazuje obrázek 6.
49
Obrázek 6: Bezpečností dialog běhového prostředí Oracle Java
Zdroj: Snímek obrazovky – Oracle Java Uživatel je informován o tom, že aplikace bude mít neomezený přístup k počítači a musí s tímto vyjádřit explicitní souhlas, jinak nedojde ke spuštění appletu. Jelikož nebyl applet podepsán certifikátem od důvěryhodné certifikační autority, označuje Oracle Java původce (publisher) jako neznámého (unknown), neboť, jak je uvedeno v rozšiřujícím textu, není možné hodnověrně zdroj appletu identifikovat. Tento dialog je v prostředí OpenJDK verze 1.7.0_25 pojat odlišně, jak ukazuje obrázek 7. Jako původce je uvedeno jméno zaznamenané v použitém certifikátu, naproti tomu však text dialogového okna uživatele opakovaně informuje, že tento podpis není možné ověřit důvěryhodnou autoritou. Bezpečnostní prvek v podobě zaškrtávacího pole, bez něhož nelze applet spustit, v bezpečnostním dialogu této implementace běhového prostředí Java chybí.
50
Obrázek 7: Bezpečnostní dialog běhového prostředí OpenJDK
Zdroj: Snímek obrazovky – OpenJDK Po prodlevě zmíněné v předchozí kapitole následuje okno přihlášení do systému Unicorn Universe, které zachycuje obrázek 8. Zde uživatel vyplní své přístupové kódy. Obrázek 8: Přihlašovací dialog UU
Zdroj: Snímek obrazovky – Unicorn Enterprise System API
51
Poté je mu prezentováno rozhraní appletu ve výchozím stavu, jak je vyobrazeno na obrázku 4. Do pole UES URI artefaktu zadá požadovaný kód a stiskne tlačítko Načíst. Do rozbalovacího menu Listy se vypíší všechny stránky daného artefaktu, mezi kterými si uživatel vybere a stiskne Otevřít. Tím dojde ke stažení dokumentu do lokálního počítače a jeho zobrazení v textovém okně appletu. Daný list je v tento moment v systému UU označen za uzamčený, což znamená, že nikdo jiný než tento uživatel jej nemůže upravovat. Uživatel nyní může v rozbalovací nabídce Jazyk změnit slovník, vůči kterému je kontrola pravopisu prováděna (výchozí je nastavena Čeština). Stisknutím tlačítka Spustit kontrolu je zahájen proces sekvenčního průchodu textem a vyhledávání neznámých slov. Je-li takové slovo nalezeno, průchod se zastaví, dané slovo se zvýrazní a uživatel je informován hlášením v levém dolním rohu, jak ukazuje obrázek 8. Nyní má uživatel na výběr několik možných akcí, jak danou situaci řešit.
52
Obrázek 8: Nalezení neznámého slova v textu
Zdroj: Vlastní zpracování •
Byla-li nalezena nějaká podobná slova, zobrazí se v rozbalovacím menu Navrhované opravy. Uživatel může stisknout Použít, zvýrazněný text se nahradí zvoleným a kontrola pokračuje. Pokud se slovu žádné nepodobá, v nabídce se objeví jen <žádné> a tlačítko zůstane neaktivní.
•
Pokud uživateli žádný z nabízených návrhů nevyhovuje a slovo je skutečně chybné, napíše správný tvar do textového pole Nové slovo a stiskne příslušné tlačítko Pou-
53
žít. Slovo se opět nahradí a navíc se zapíše do slovníku uživatelských slov, aby mohlo být napříště u podobných slov nabídnuto jako opravný návrh. •
Uživatel se může rozhodnout, že dané slovo nechce opravovat a ani jej nechce zanášet do uživatelského slovníku. V takovém případě stiskne Přeskočit.
•
Pokud uživatel shledá, že dané slovo je správně a chce, aby bylo pro příště rozpoznáno nebo nabízeno jako oprava, zvolí Přidat do slovníku.
•
Dané slovo také může být z jiného jazyka. Změnou výběru jazyka se slovo zkontroluje znovu proti jinému slovníku. Další text je již kontrolován tímto slovníkem, dokud uživatel opět jazyk nezmění.
Když kontrola skončí a uživatel provedl nějaké změny v textu dokumentu, je mu nabídnuta volba Uložit list, kterou své úpravy nahraje zpět do systému a list se odemkne. Informační okno dá uživateli vědět, zda se dokument podařilo nahrát. Je-li načten nějaký dokument a uživatel se rozhodne změny neukládat, stiskne kdykoliv tlačítko Neukládat a odemknout, čímž uvolní zámek listu a vymaže dokument z paměti appletu. 6.4.3.
Systémové požadavky
Pro správný chod přiložené aplikace je zapotřebí běhové prostředí Java 1.7 s pluginem do webového prohlížeče, webový prohlížeč s interpretem JavaScriptu, internetové připojení a operační systém Windows, GNU/Linux či OS X. Applet byl úspěšně testován v následujících prostředích: •
Windows 8 (64bit), Internet Explorer 10, Oracle Java 1.7.0_25
•
Windows 7 Professional (obě verze), Firefox 22 a Chrome 28, Oracle Java 1.7.0_25
•
Ubuntu 12.04.2 a 13.04 (32bit), Firefox 22, OpenJDK 1.7.0_25
6.4.4.
Další úpravy a rozšíření
Vytvořený applet samozřejmě není dokonalým nástrojem pro řešení daného úkolu, tedy pro kontrolu pravopisu v dokumentech v rámci systému Unicorn Universe. Zejména neposkytuje veškerý uživatelský komfort, který by mohl a který by v případě, že by se jednalo o 54
produkt pro koncového zákazníka, poskytovat měl. To ovšem ani nebylo jeho účelem. Zamysleme se však jakými úpravami by v tomto směru mohl být vylepšen, měl-li by se takovým produktem stát. Jedním z očividných omezení je nemožnost přímo upravovat načtený text, uvědomí-li si uživatel při kontrole textu, že někde například opomněl celou větu či odstavec, nebo chtěl-li by něco formulovat jinak. Pokud by se ve stávajícím programu pouze otevřela možnost do načteného textu psát (což by se muselo ošetřit i na úrovni textových uzlů UESDocumentNode), dříve či později by narazil na omezení daná nemožností měnit formátování, plynoucí z konstrukce práce s výchozím dokumentem UXML. Namísto stávajícího zachovávání kostry formátování by bylo třeba umožnit formátování dokumentu řídit sadou ovládacích prvků a z výsledného dokumentu teprve platnou UXML reprezentaci vytvořit, jak je dnes pravděpodobně realizováno v textovém procesoru uvnitř Unicorn Universe. To by na druhou stranu umožnilo opustit stávající systém mapování obsahu na textové uzly, což by provádění vlastní kontroly pravopisu znatelně zjednodušilo. Dalším omezením je výlučně sekvenční chod pravopisné kontroly, se kterým souvisí i nutnost na každé podezřelé slovo reagovat, než se nabídne možnost pracovat s dalším slovem. Podobný režim sice řada obecně užívaných textových procesorů nabízí jako alternativu, mezi nimi například LibreOffice Writer, ovšem uživatelsky příjemnější je způsob kontroly v reálném čase, kdy je uživatel upozorňován na problematická slova bezprostředně poté, co je napsal.
Taková funkce by měla význam zejména v souvislosti
s možností volně do sledovaného textu psát, jak bylo popsáno v předchozím odstavci. Tuto funkci by bylo možné triviálně implementovat jako spuštění kontroly textu vždy, když v něm dojde ke změně, což by bylo možné zjistit sledováním událostí na komponentě editačního okna. Takový algoritmus by však byl s rostoucí délkou textu stále náročnější na čas běhu, prozíravější by tak bylo spouštět kontrolu pouze na těch úsecích, kde došlo k nějaké změně od poslední kontroly. Takový postup je zvolen i v aplikaci JOrtho, jejíž kód by tak mohl sloužit jako inspirace pro podobnou práci. S kontrolou v reálném čase bezprostředně souvisí nutnost mít zavedený mechanismus upozorňování uživatele na zjištěná problematická slova. Zdá se, že se jistou formou standardu v této oblasti stalo užívání červeného klikatého či vlnovkového podtrhávání takových slov. V SCUU je pro zvýraznění slov, na kterých se algoritmus zastavil, použito 55
prosté obarvení pozadí slova žlutou barvou. Takové zvýraznění je implementačně velmi jednoduché, neboť použitá třída javax.swing.DefaultHighlighter.DefaultHighlightPainter umí přijmout libovolný objekt třídy java.awt.Color jako barvu, která se má takovýmto způsobem použít. Klikatá nebo vlnitá čára však není dostupná jako primitivní typ a bylo by ji tak třeba nejprve zadefinovat. Příkladem mohou být v tomto například projekty JOrtho a Jazzy, které právě takový grafický prvek zavádějí, každý svým vlastním způsobem. Dalším faktorem, který vedl k označování identifikovaných chyb v SCUU pouhým obarvením, je nemožnost s takovým slovem interagovat pomocí pravého tlačítka myši, na což jsou uživatelé z procesorů podtrhávajících vlnovkou zvyklí a mohli by tak mylně očekávat podobné chování i zde. Zvolený systém je tak bližší způsobu zvýrazňování slov z dialogů sekvenční jazykové kontroly, jak jsou přítomny například v procesorech LibreOffice Writer a Kingsoft Writer. Pohodlnější variantou by však bylo zavedení kontextového menu, které by skutečně manipulaci s označeným slovem umožnilo a bylo by tak v souladu se zavedením označování červenou vlnovkou. Toho lze opět docílit sledováním patřičné události na dané textové komponentě, jak je k vidění například u aplikace JOrtho. Z pohledu uživatele by zřejmě bylo výhodnější, kdyby byl jím vytvářený osobní slovník ukládán do systému Unicorn Universe, namísto lokálního zápisu na disk. Nyní sice může soubor se svým slovníkem mezi jednotlivými zařízeními kopírovat, ovšem synchronizace nových slov do slovníku daného účtu v systému by je automaticky zpřístupňovala všude, kde se uživatel přihlásí, což odpovídá filozofii celé služby Unicorn Universe lépe. Nezanedbatelná je též potřeba lokální instalace nativních knihoven pro kontrolu pravopisu. To s sebou přináší potřebu mít takové knihovny připravené, aby je uživatelé mohli používat. Zároveň je s ohledem na stávající chování knihovny HunspellJNA omezena množina platforem, kde lze tuto komponentu vůbec použít. Flexibilnější by tak bylo přenesení celé služby na server, kde by bylo dané prostředí lépe pod kontrolou dodavatele a problém s přizpůsobováním celé aplikace novým či neobvyklým platformám by se přinejmenším omezil.
56
7.
Závěr
Tato práce se zaměřila na provádění kontroly pravopisu za zadáním stanovených podmínek a ukázala jednu z možností implementace, čímž demonstrovala proveditelnost tohoto záměru. Výsledný Java applet úspěšně komunikuje s informačním systémem Unicorn Universe prostřednictvím UES API a dokáže tak plnit roli, která byla žádána. Dále bylo poukázáno na jazykové komponenty, které je možné integrovat do aplikací pracujících s prostředím jazyka Java a které jsou dostupné z obecně přístupných úložišť open-source projektů pod svobodnými softwarovými licencemi. Přes úspěšné provedení záměru je však třeba důkladně zvážit případné dopady a rentabilitu implementace, mělo-li by být nasazeno demonstrované řešení v praxi, jelikož byť je funkční, nese s sebou pár úskalí. Vytyčená cesta využívající nativní knihovny může zejména představovat jisté komplikace z pohledu uživatelů, kteří užívají některé minoritní platformy. Tento problém by bylo možné zkusit řešit například voláním nativní knihovny umístěné na serveru, ačkoliv by se pak bylo třeba zamyslet nad zvýšenými nároky v oblasti provozu. Otázkou také z dlouhodobého hlediska zůstává výhodnost samotného použití Java appletu pro úpravy dokumentů v systému Unicorn Universe. Historicky byl význam prostředí jazyka Java postaven na multiplatformnosti, která se zdá v současnosti ohrožena vzestupem nových mobilních operačních systémů nepodporujících použití Javy a přidruženého běhového prostředí. Jejich rostoucí popularita a snahy o rozšíření i v oblastech za hranicemi mobilních technologií mohou předznamenávat výrazné změny ve složení platforem používaných koncovými uživateli. Taková situace může vést k postupnému oslabení pozice Javy v prostředí uživatelů i na těch platformách, kde momentálně dostupná je, což by situaci s užíváním služby Unicorn Universe v její stávající podobě dál do budoucna komplikovalo. V krátkodobém horizontu by však rozšíření textového procesoru v systému Unicorn Universe o kontrolu pravopisu mohlo být přínosem.
57
8.
Conclusion
The thesis focused on the possibilities of performing spelling check within constraints given by the task. It showed one possible way of fulfilling such implementation, demonstrating the feasibility of realization of such plans. The created Java applet successfully interacts with the information system Unicorn Universe through the use of UES API, and is therefore capable of performing the required role. Another part of the thesis referenced language processing components employable in Java environment, which are available in publicly accessible repositories of open-source projects and bear a liberal software license. Even though the goal was met, it is necessary to examine the consequences and profitability of utilizing the shown solution in the real world conditions, should it be considered, as the solution is indeed working, but is not without issues. The shown way, which is dependent on native libraries, has problems with availability for users of minor computer platforms. Calling the native library on a server might be one way of dealing with this obstacle, though the increased demands in traffic would need to be examined. There is also the question of viability of even using Java applet for document editing in Unicorn Universe in the long-term. The impact of the Java environment on the industry has been accentuated by its capabilities to operate across computer platforms, but these abilities seem to be threatened by the rise of new mobile operating systems which do not support Java and its runtime environment. The increasing popularity of these systems, and the attempts to expand them even in the areas beyond the scope of mobile technologies, might entail a coming shift in the composition of end user platforms. Such a situation may eventually lead to disruption of the position that Java holds on the platforms where it is currently available, which would deepen the troubles of using Unicorn Universe in its current form. However, extending the text processor in Unicorn Universe with spell checking ability might still be beneficial in the short-term.
58
9.
Seznam použitých zdrojů
1. MITTON, R.: Spellchecking by computer [online]. [cit. 2013-07-07]. Dostupné z URL: 2. ŠŤASTNÝ, M.: Prvotní představa o kontrole pravopisu v UU [online]. Bibr Pavel. 20.06.2012 16.43;
[cit.
2013-07-07].
Unicorn
Universe
artefakt:
. 3. Lesson: Java Applets (The Java™ Tutorials > Deployment) [online]. [cit. 2013-07-08]. Oracle Corporation and/or its affiliates (Oracle). Dostupné z URL: 4. BRŮHA, L.: Java Hotová řešení. 1. vyd. Brno: Computer Press, 2003. 325 s. ISBN 80-251-0072-3. 5. HTML 4.01 Specification [online]. 24.12.1999; [cit 2013-07-08]. World Wide Web Consortium. Dostupné z URL: 6. HTML5 [online]. 17.12.2012; [cit. 2013-07-08]. World Wide Web Consortium. Dostupné z URL: 7. Using applet, object, and embed Tags [online]. [cit. 2013-07-08]. Oracle Corporation and/or its affiliates (Oracle). Dostupné z URL: 8. Deployment Toolkit [online]. [cit. 2013-07-08]. Oracle Corporation and/or its affiliates (Oracle). Dostupné z URL: 9. Java Network Launch Protocol [online]. [cit. 2013-07-08]. Oracle Corporation and/or its affiliates (Oracle). Dostupné z URL: 10. HEROUT, P.: Učebnice jazyka Java. 3. rozšířené vyd. České Budějovice: KOPP, 2008. 381 s. ISBN 978-80-7232-355-5. 11. Get ready for plug-in free browsing [online]. [cit 2014-01-05]. Microsoft. Dostupné z URL: 12. Produkty [online]. [cit. 2013-07-09]. Plus4U Net a. s. Dostupné z URL: 59
13. Komplexní informační systém nové generace. VIG Net a. s. Reklamní materiál Unicorn Universe s kódem UVS09011 22/01/2009 v002. 14. Unicorn Universe profile. Unicorn Universe a. s. Reklamní materiál Unicorn Universe s kódem UU0002EN01. 15. Unicorn ES API Portal – Main Portal [online]. 16.05.2013 12:16; [cit. 2013-07-09]. Unicorn Universe a. s. Unicorn Universe artefakt: . 16. Jak zavolat UES REST commandy [online]. 17.04.2013 16:38; [cit. 2013-07-09]. Unicorn Universe a. s. Unicorn Universe artefakt: . 17. SOAP Version 1.2 Part 1: Messaging Framework (Second Edition) [online]. 27.03.2007 [cit. 2014-01-08]. World Wide Web Consortium. Dostupné z URL: 18. KOSEK, J.: Inteligentní podpora navigace na WWW s využitím XML [online]. [cit 2014-01-08]. Dostupné z URL: 19. EELES,
P.:
Capturing
Architectural
Requirements
[online].
15.11.2005;
[cit. 2013-12-29]. Dostupné z URL: 20. OAD Use Case diagram [online]. 30.06.2011 06:54; [cit. 2014-01-04]. Unicorn College s.r.o. Unicorn Universe artefakt: 21. Comparison of open-source software hosting facilities – Wikipedia, the free encyclopedia
[online].
24.10.2010 20:01;
[cit.
2012-10-26 18:00].
Dostupné
z
URL:
22. Java Native Access [online]. 12.07.2013; [cit. 2013-07-12]. Dostupné z URL: 23. NÉMETH, L.: Hunspell [online]. [cit. 2013-07-12]. Dostupné z URL: 24. ŠIBIL, J.: Konzultace k bakalářské práci na téma spellchecker [online]. Bibr Pavel. 28.02.2013 17:06 [cit. 2013-07-17]. Úkol v Unicorn Universe nad artefaktem:
60
25. CODY, S.: The Art Of Writing & Speaking The English Language [online]. Project Gutenberg, 02.12.2007 [cit. 2013-07-15]. EBook #19719. Dostupné z URL:
61
10. Seznam obrázků Obrázek 1: Diagram případů užití........................................................................................27 Obrázek 2: Náhled architektury...........................................................................................38 Obrázek 3: Diagram tříd.......................................................................................................40 Obrázek 4: Výchozí vzhled GUI..........................................................................................41 Obrázek 5: Formátovaný dokument v UU...........................................................................49 Obrázek 6: Bezpečnostní dialog běhového prostředí Oracle Java.......................................50 Obrázek 7: Bezpečnostní dialog běhového prostředí OpenJDK..........................................51 Obrázek 8: Přihlašovací dialog UU......................................................................................51 Obrázek 9: Nalezení neznámého slova v textu....................................................................53
62
11. Seznam tabulek Tabulka 1: Požadavky dle FURPS+.....................................................................................20 Tabulka 2: Případy užití.......................................................................................................21 Tabulka 3: Přiřazení případů užití k požadavkům................................................................22 Tabulka 4: Měření rychlosti a porovnání výstupů................................................................35
63
12. Seznam příloh Příloha 1: Testovací text.......................................................................................................65 Příloha 2: CD-ROM.............................................................................................................66 Příloha 3: UXML..................................................................................................................67
64
12.1.
Příloha 1 – Testovací text
„How, then, shall we go about our mastery of the English language? Modern science has provided us a universal method by which we may study and master any subject. As applied to an art, this method has proved highly successful in the case of music. It has not been applied to language because there was a well fixed method of language study in existence long before modern science was even dreamed of, and that ancient method has held on with wonderful tenacity. The great fault with it is that it was invented to apply to languages entirely different from our own. Latin grammar and Greek grammar were mechanical systems of endings by which the relationships of words were indicated. Of course the relationship of words was at bottom logical, but the mechanical form was the chief thing to be learned. Our language depends wholly (or very nearly so) on arrangement of words, and the key is the logical relationship. A man who knows all the forms of the Latin or Greek language can write it with substantial accuracy; but the man who would master the English language must go deeper, he must master the logic of sentence structure or word relations. We must begin our study at just the opposite end from the Latin or Greek; but our teachers of language have balked at a complete reversal of method, the power of custom and time has been too strong, and in the matter of grammar we are still the slaves of the ancient world. As for spelling, the irregularities of our language seem to have driven us to one sole method, memorizing: and to memorize every word in a language is an appalling task. Our rhetoric we have inherited from the middle ages, from scholiasts, refiners, and theological logicians, a race of men who got their living by inventing distinctions and splitting hairs. The fact is, prose has had a very low place in the literature of the world until within a century; all that was worth saying was said in poetry, which the rhetoricians were forced to leave severely alone, or in oratory, from which all their rules were derived; and since written prose language became a universal possession through the printing press and the newspaper we have been too busy to invent a new rhetoric [25].“
65
12.2.
Příloha 2 – CD-ROM
bakalarska_prace/
– obsahuje tuto práci v elektronické podobě
dictionaries/
– obsahuje přiložené slovníky a jejich licence
SCUU/ |-demo/ |-start.html
– dokument spouštějící sestavený applet
|-runtime_dependencies/
– obsahuje JAR soubory potřebné pro chod appletu
|-src/
– obsahuje zdrojový kód appletu a přiložené archivy
|-third_party_libraries/
– obsahuje knihovny v jejich originální podobě
|-license.txt
– licenční ujednání SCUU
66
12.3.
Příloha 3 – UXML
The Art of Writing & Speaking the English Language
How, then, shall we go about our mastery of the English language?
Modern science has provided us a universal method by which we may study and master any subject. As applied to an art, this method has proved highly successful in the case of music. It has not been applied to language because there was a well fixed method of language study in existence long before modern science was even dreamed of, and that ancient method has held on with wonderful tenacity.
...
67