UNICORN COLLEGE BAKALÁŘSKÁ PRÁCE

Transkript

UNICORN COLLEGE BAKALÁŘSKÁ PRÁCE
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 <http://www.java.com/> 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: <http://docs.oracle.com/javase/tutorial/uiswing/components/applet.html>. 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 <http://www.falstad.com/mathphysics.html>.
V rámci HTML kódu dané stránky jsou applety a jejich parametry umisťovány pomocí tagů <applet>*, <object> 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: <https://api.unicornuniverse.eu/>. 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>
<n:alertcontrol xmlns:n="http://example.org/alertcontrol">
<n:priority>1</n:priority>
<n:expires>2001-06-22T14:00:00-05:00</n:expires>
</n:alertcontrol>
</env:Header>
<env:Body>
<m:alert xmlns:m="http://example.org/alert">
<m:msg>Pick up Mary at school at 2pm</m:msg>
</m:alert>
</env:Body>
</env:Envelope>
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 <http://alioth.debian.org/>
•
Assembla <https://www.assembla.com/home>
•
BerliOS <http://sourcewell.berlios.de/>
•
Betavine <http://www.betavine.net/>
•
Bitbucket <https://bitbucket.org/>
•
BountySource <https://www.bountysource.com/>
•
CodePlex <http://www.codeplex.com/>
•
Freepository <https://freepository.com/home/>
•
GitHub <https://github.com/>
•
Gitorious <https://gitorious.org/>
•
GNU Savannah <http://savannah.gnu.org/>
•
Google Code <http://code.google.com>
•
java.net <https://www.java.net/>
•
JavaForge <http://www.javaforge.com/>
•
KnowledgeForge <http://knowledgeforge.net/>
•
Launchpad <https://launchpad.net/>
•
OSOR.eu <http://www.osor.eu/>
28
•
OW2 Consortium <http://www.ow2.org/>
•
Project Kenai <http://projectkenai.com/>
•
SEUL.org <http://www.seul.org/>
•
SourceForge <http://sourceforge.net/>
•
Tigris.org <http://www.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 <https://code.google.com/p/google-api-spelling-java/>
•
JaSpell <http://jaspell.sourceforge.net/>
•
JOrtho <http://jortho.sourceforge.net/>
•
Jazzy <http://jazzy.sourceforge.net/>
•
HunspellJNA <http://dren.dk/hunspell.html>
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 <http://www.languagetool.org/>.
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
<https://www.google.com/tbproxy/spell?
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 <http://www.tinymce.com/develop/bugtracker_view.php?id=5793>.
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 <http://www.languagetool.org/development/api/>. 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ě
<core:paragraph>,
<core:title>,
<core:text>
a <core:br>. 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
<http://www.chromium.org>. 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 <http://gems.unicornuniverse.eu/gems/>. 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<UESSheetAttributes, UESSheetGetSheetList>
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 <UUPC-BT:41376821660572063>
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:
<http://www.dcs.bbk.ac.uk/~roger/spellchecking.html>
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:
<UCL-BT:44191576217551438>.
3. Lesson: Java Applets (The Java™ Tutorials > Deployment) [online]. [cit. 2013-07-08].
Oracle Corporation and/or its affiliates (Oracle). Dostupné z URL:
<http://docs.oracle.com/javase/tutorial/deployment/applet/index.html>
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: <http://www.w3.org/TR/html401/>
6. HTML5 [online]. 17.12.2012; [cit. 2013-07-08]. World Wide Web Consortium. Dostupné
z URL: <http://www.w3.org/TR/html5/>
7. Using applet, object, and embed Tags [online]. [cit. 2013-07-08]. Oracle Corporation
and/or its affiliates (Oracle). Dostupné z URL:
<http://docs.oracle.com/javase/6/docs/technotes/guides/plugin/developer_guide/using_ta
gs.html>
8. Deployment Toolkit [online]. [cit. 2013-07-08]. Oracle Corporation and/or its affiliates
(Oracle). Dostupné z URL: <http://docs.oracle.com/javase/tutorial/deployment/
deploymentInDepth/depltoolkit_index.html>
9. Java Network Launch Protocol [online]. [cit. 2013-07-08]. Oracle Corporation and/or its
affiliates (Oracle). Dostupné z URL:
<http://docs.oracle.com/javase/tutorial/deployment/deploymentInDepth/jnlp.html>
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: <http://msdn.microsoft.com/en-us/library/ie/hh968248%28v=vs.85%29.aspx>
12. Produkty [online]. [cit. 2013-07-09]. Plus4U Net a. s. Dostupné z URL:
59
<https://unicornuniverse.eu/cz/produkty.html>
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: <UNI-BT:UES.DOC/API>.
16. Jak zavolat UES REST commandy [online]. 17.04.2013 16:38; [cit. 2013-07-09]. Unicorn Universe a. s. Unicorn Universe artefakt:
<UNI-BT:UES/PLATFORM/WEBCMD/HOWTO-USE>.
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:
<http://www.w3.org/TR/soap12-part1/>
18. KOSEK, J.: Inteligentní podpora navigace na WWW s využitím XML [online].
[cit 2014-01-08]. Dostupné z URL: <http://www.kosek.cz/diplomka/html/>
19. EELES,
P.:
Capturing
Architectural
Requirements
[online].
15.11.2005;
[cit. 2013-12-29]. Dostupné z URL:
<http://www.ibm.com/developerworks/rational/library/4706.html>
20. OAD Use Case diagram [online]. 30.06.2011 06:54; [cit. 2014-01-04]. Unicorn
College s.r.o. Unicorn Universe artefakt: <UCL-BT:OAD11W.CZ/LEC04/GL>
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:
<https://en.wikipedia.org/wiki/Source_code_repository>
22. Java Native Access [online]. 12.07.2013; [cit. 2013-07-12]. Dostupné z URL:
<https://github.com/twall/jna/blob/master/README.md>
23. NÉMETH, L.: Hunspell [online]. [cit. 2013-07-12]. Dostupné z URL:
<http://hunspell.sourceforge.net/>
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:
<UCL-BT:UCL/BP/1-2796-1>
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:
<http://www.gutenberg.org/files/19719/19719-0.txt>
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
<?xml version='1.0' encoding='UTF-8'?>
<core:document xmlns:core="http://www.unicorn.cz/afu_v1/af_v1/util_v1/unitor_v1/Unitor.xsd" version="3.0">
<core:chapter revision="2" UUID="583c10bfdbd326baf8e42b13ffc01d9fe-7ffe"
changed="false">
<core:title>
<core:text>The Art of Writing &amp; Speaking the English
Language</core:text>
<comments xmlns="http://www.unicorn.cz/afu_v1/af_v1/util_v1/unitor_v1/Unitor_UES.xsd" revision="1" UUID="f4611f3d-699e-459f-b715-940ca6b07899"
changed="false">
</comments>
<core:text>&#10;</core:text>
</core:title>
<core:body>
<core:paragraph UUID="583c10bfdbd326baf8e42b13ffc01d9fe-8000">
<core:text>How, then, shall we go about our mastery of the English language?&#10;</core:text>
</core:paragraph>
<core:paragraph UUID="583c10bfdbd326baf8e42b13ffc01d9fe-7ffd">
<core:text>Modern science has provided us a </core:text>
<core:text bold="true">universal method</core:text>
<core:text> by which we may </core:text>
<core:text italic="true">study and master</core:text>
<core:text> any subject. As applied to an art, this method has proved
</core:text>
<core:text fgcolor="red">highly successful</core:text>
<core:text> 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.&#10;</core:text>
</core:paragraph>
...
67

Podobné dokumenty

prezentace

prezentace xmlDoc.load("file.xml");

Více

Výstavba datového skladu s použitím open source

Výstavba datového skladu s použitím open source cíl provést průzkum dostupných open source nástrojů a technologií, posoudit jejich vlastnosti, kvality a vhodnost použití pro výstavbu námi uvažovaného datového skladu pro potřeby střední či malé f...

Více

ZDE - KOMIX

ZDE - KOMIX V rámci těchto diskusí padl také návrh trošku zmodernizovat logo a  vypustit z  něj pojem „systémový integrátor“, protože samotná systémová integrace již není v módě. Chvíli jsme si s tou myšlenkou...

Více

UNICORN COLLEGE BAKALÁŘSKÁ PRÁCE Datové modelování

UNICORN COLLEGE BAKALÁŘSKÁ PRÁCE Datové modelování Prohlašuji, že jsem svou bakalářskou práci na téma datové modelování 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 zd...

Více

Autorské právo v IT

Autorské právo v IT Mezi klienty kanceláře patří globální i lokální společnosti, orgány státní správy, obce i kraje. ROWAN LEGAL pro ně zajišťuje podporu při realizaci podnikatelských plánů, investičních nebo rozvojov...

Více

Fulltextové vyhledávání v Unicorn ES pomocí Lucene

Fulltextové vyhledávání v Unicorn ES pomocí Lucene Jedním z možných řešení je přejít na Oracle Enterprise Edition, ale vzhledem k její finanční náročnosti na licenci bylo rozhodnuto o hledání Open Source alternativy dané problematiky, kdy jedním z ...

Více

Zajištění kvality softwarových produktů

Zajištění kvality softwarových produktů Jak se v průběhu projektu mění podmínky, za kterých probíhá testování, tak se průběžně mění i testovací strategie.

Více