eské vysoké u£ení technické v Praze Fakulta elektrotechnická Katedra kybernetiky
Softwarový nebo výzkumný pro jekt
Moºnosti predikce textu p°i psaní osobou s omezenou pohyblivostí a reakcí
Bc. Martin Vogal
Vedoucí práce:
Ing. Petr Novák
Studijní program: Otev°ená informatika, strukturovaný, navazující magisterský
Obor: Po£íta£ové vid¥ní a digitální obraz
19. kv¥tna 2011
iv
v
Pod¥kování
Je mou milou povinností pod¥kovat na tomto míst¥ Ing. Petrovi Novákovi za spolupráci, cenné rady, podn¥tné p°ipomínky, které mi nemalou m¥rou pomohly p°i vypracování této práce. Dále bych cht¥l pod¥kovat své rodin¥, p°átel·m a spoluºák·m za odborné rady a trp¥livost p°i psaní této práce.
vi
vii
Prohlá²ení
Prohla²uji, ºe jsem práci vypracoval samostatn¥ a pouºil jsem pouze podklady uvedené v p°iloºeném seznamu. Nemám závaºný d·vod proti uºití tohoto ²kolního díla ve smyslu 60 Zákona £. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o zm¥n¥ n¥kterých zákon· (autorský zákon). V Praze dne 15.5.2011
.............................................................
viii
Abstract There is many handicapped people who are not able to write text using commonly instruments. Because of them is the main goal of this thesis to propose and implement the instrument (the computer program) to simplify and accelerate writting of text for persons with bounded movement and reaction ability. The instrument can predict not only following suitable chars but even following words and eventually parts of sentences. The instrument is suppose to learn these often words and sentences.
Abstrakt Hendikepovaných lidí je nemalý po£et. Vzhledem k jejich postiºení d¥lá takto hendikepovaným lidem problém psaní textu pomocí b¥ºn¥ dostupných nástroj·. Proto se hledají moºnosti, jak t¥mto lidem ve snadn¥j²ím psaní pomoci. Z tohoto d·vodu je cílem této diplomové práce navrhnout a implementovat nástroj (program) pro zjednodu²ení a zrychlení psaní textu pro osoby s omezenou schopností pohybu nebo reakce. Schopnost nástroje spo£ívá nejen v návrhu následujících vhodných znak·, ale i slov a p°ípadn¥ £ásti v¥t, p°i£emº by m¥l vyuºít moºnosti u£ení se t¥chto £asto vyskytujících slov £i £ástí v¥t.
ix
x
Obsah 1 Úvod
1
2 Popis problému, specikace cíle
5
5 5 6 7 7 7 8 9 10 10 10 10 11 11 13 14 14 15 15 16
3 Analýza a návrh °e²ení
17
1.1 1.2 1.3 1.4 2.1 2.2 2.3 2.4
Moºnosti predikce textu . . . . . . . . . . . . . . . . . . . . . . . . . . . Historie predikce textu . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dokon£ování vhodných slov . . . . . . . . . . . . . . . . . . . . . . . . . Dokon£ování frází a v¥t . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Popis problému predikce textu . . . . . . . . . . . . . . . . . . . . . . . . Cílová skupina uºivatel· . . . . . . . . . . . . . . . . . . . . . . . . . . . Vymezení cíl· obecn¥ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Existující implementace . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.1 Dasher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.1.1 Podrobn¥j²í popis funkcionality . . . . . . . . . . . . . . 2.4.1.2 Jazykový model . . . . . . . . . . . . . . . . . . . . . . . 2.4.1.3 Predikce textu obecn¥ . . . . . . . . . . . . . . . . . . . 2.4.1.4 Vyuºití predikce textu . . . . . . . . . . . . . . . . . . . 2.4.1.5 Relace mezi predikcí a kompresí . . . . . . . . . . . . . . 2.4.1.6 Relace mezi predikcí a klasikací . . . . . . . . . . . . . 2.4.1.7 Knuth-Morris-Pratt algoritmus . . . . . . . . . . . . . . 2.4.1.8 Predikce £áste£né shody . . . . . . . . . . . . . . . . . . 2.4.2 Read & Write GOLD . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.3 ClaroRead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.4 OpenOce.org Writer . . . . . . . . . . . . . . . . . . . . . . . . 2.4.5 Microsoft Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.6 T9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.6.1 Speciální vlastnosti . . . . . . . . . . . . . . . . . . . . . 2.4.7 Grid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1 Analýza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1 Jazyk C# a technologie .NET . . . . . . . . . . . . . . . . . . . . 3.1.2 Technologie .NET a jazyk C# . . . . . . . . . . . . . . . . . . . . 3.1.3 Výhody technologie .NET . . . . . . . . . . . . . . . . . . . . . . 3.1.4 Porovnání jazyka C# s jinými jazyky . . . . . . . . . . . . . . . . 3.1.5 Výb¥r programovacího jazyku . . . . . . . . . . . . . . . . . . . . xi
2 2 2 3
17 17 17 18 19 21
xii
OBSAH
3.1.6 Postup u£ení . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.6.1 U£ení ze souboru . . . . . . . . . . . . . . . . . . . . . . 3.1.6.2 U£ení pomocí uºivatelského vstupu . . . . . . . . . . . . 3.2 Návrh °e²ení . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 Skladba v¥ty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.2 etnost výskytu slov . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.3 Aktuáln¥ psané téma . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.4 Následná slova . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.5 Slovní druhy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.6 Zabarvení v¥ty . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.7 Predikce frází £i £ástí v¥t . . . . . . . . . . . . . . . . . . . . . . . 3.2.8 Interpretované zkratky do v¥t . . . . . . . . . . . . . . . . . . . . 3.2.9 Uloºení dat pro trvalé pouºití . . . . . . . . . . . . . . . . . . . . 3.2.10 Proly uºivatel· . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.11 Vstupy a výstupy . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.12 Návrh GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21 22 23 24 24 25 27 28 29 31 32 34 35 36 37 37
4 Realizace
41
5 Manuál aplikace pro predikci textu
61
4.1 Predikce b¥ºící na pozadí . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Pouºité komponenty testovací demo verze . . . . . . . . . . . . . . . . . . 4.2.1 T°ída Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.2 Ovládací prvek DataGridView . . . . . . . . . . . . . . . . . . . . 4.2.3 Ovládací prvek TextBox . . . . . . . . . . . . . . . . . . . . . . . 4.2.4 Gracké uspo°ádání komponent a jejich význam v demo aplikaci . 4.3 Popis °e²ení a vnit°ní struktury knihovny . . . . . . . . . . . . . . . . . . 4.3.1 T°ída SlovoZname . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.1.1 Výpo£et váhy slova . . . . . . . . . . . . . . . . . . . . . 4.3.1.2 Výpo£et do£asné váhy slova . . . . . . . . . . . . . . . . 4.3.1.3 Významné metody . . . . . . . . . . . . . . . . . . . . . 4.3.2 T°ída NasledneSlovo . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.3 T°ída SlovnikPouzivanychSlovAVet . . . . . . . . . . . . . . . . . 4.3.4 T°ída SlovnikPouzivanychSlov . . . . . . . . . . . . . . . . . . . . 4.3.5 T°ída SlovnikVsechSlov . . . . . . . . . . . . . . . . . . . . . . . . 4.3.6 T°ída VetaZnama . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.6.1 Výpo£et váhy v¥ty . . . . . . . . . . . . . . . . . . . . . 4.3.7 T°ída VetyZname . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.8 T°ída Hlavni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.9 T°ída ZpracovaniSlov . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.10 T°ída Prol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4 Omezení aplikace pro predikci textu . . . . . . . . . . . . . . . . . . . . .
41 43 43 44 45 46 47 47 48 50 51 51 51 56 56 57 57 57 58 59 59 59
5.1 Demonstra£ní aplikace . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 5.2 Jak se aplikace u£í . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 5.3 Dal²í schopnosti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
xiii 5.4 Ukázka hotové demo aplikace . . . . . . . . . . . . . . . . . . . . . . . . 63
OBSAH
6 Testování
65
7 Záv¥r
71
Literatura
73
8 Seznam pouºitých zkratek
75
9 Obsah p°iloºeného CD
77
6.1 Zp·sob, pr·b¥h a výsledky testování . . . . . . . . . . . . . . . . . . . . 65 6.1.1 Zhodnocení testování . . . . . . . . . . . . . . . . . . . . . . . . . 66 6.2 Srovnání s existujícími °e²eními . . . . . . . . . . . . . . . . . . . . . . . 68
xiv
OBSAH
Seznam obrázk· 2.1 2.2 2.3 2.4 2.5 3.1 4.1 4.2 4.3 4.4 4.5 5.1 6.1 9.1
Dasher a jeho gracké uºivatelské prost°edí. . . . . . . . . . . . . . . . . Read & Write GOLD a ukázka jeho grackého prost°edí a predikce programu. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ClaroRead a ukázka jeho grackého prost°edí a predikce programu. . . . Excel a ukázka dokon£ování slov. . . . . . . . . . . . . . . . . . . . . . . Ukázka programu pro psaní jednoduchých v¥t. . . . . . . . . . . . . . . . Návrh uºivatelského prost°edí. . . . . . . . . . . . . . . . . . . . . . . . . Diagram vstup· a výstup· knihovny. . . . . . . . . . . . . . . . . . . . . Ukázka pouºité komponenty DataGridView. . . . . . . . . . . . . . . . . Ukázka pouºité komponenty TextBox a TextBox s vlastností Multiline a ReadOnly. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Uspo°ádání komponent v GUI demo aplikace. . . . . . . . . . . . . . . . Diagram t°íd. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ukázka hotové aplikace. . . . . . . . . . . . . . . . . . . . . . . . . . . . Výsledky testování. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Obsah p°iloºeného CD . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xv
9 13 14 14 16 39 42 45 46 46 47 64 67 77
xvi
SEZNAM OBRÁZK
Seznam tabulek 3.1 3.2 3.3 3.4 3.5 3.6 3.7
Po£et slov za£ínajících na po£áte£ní text. . . . . . . . . . . . . . . . . . . Po°adí slov ve v¥t¥, p°íklad 1. . . . . . . . . . . . . . . . . . . . . . . . . Po°adí slov ve v¥t¥, p°íklad 2. . . . . . . . . . . . . . . . . . . . . . . . . Vypo£tené vzdálenosti slov napsané uºivatelem a v¥t v systému. . . . . . Ukázka moºnosti vyuºití zkratek a v¥t, které tyto zkratky interpretují. . . P°ehled a popis akcí, které systém zpracovává od uºivatele. . . . . . . . . P°ehled a popis akcí, které systém vyuºívá k práci se slovníkem a prediktivní logikou. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1 Zhodnocení výsledk· testování. . . . . . . . . . . . . . . . . . . . . . . . 6.2 Výhody a nevýhody jednotlivých °e²ení. . . . . . . . . . . . . . . . . . .
xvii
25 33 34 34 35 38 39 67 69
xviii
SEZNAM TABULEK
Kapitola 1 Úvod lov¥k dne²ní doby je obklopen nep°eberným mnoºstvím elektroniky, která je mu nápomocna a významnou m¥rou mu usnad¬uje ºivot. U za°ízení, a´ jiº se jedná o mobilní telefony, PDA nebo po£íta£e, je vºdy zapot°ebí brát z°etel na klávesnici nebo jiné vstupní za°ízení umoº¬ující vzájemnou komunikaci, nebo´ bez ní jsou v²echny tyto elektronické p°ístroje v podstat¥ nevyuºitelné. Vstupní za°ízení nám umoº¬uje s daným za°ízením komunikovat, zadávat mu p°íkazy, které pro nás vykonává a jejich výstup renderuje na obrazovku £i jiné výstupní za°ízení. Rozdíl mezi t¥mito vstupními za°ízeními spo£ívá zejména v jejich velikosti, ale i rozloºení a po£tem kláves. U stolního po£íta£e nemusíme mít na velikost klávesnice p°íli² vysoké poºadavky a m·ºeme si dovolit velkou klávesnici. Co se tý£e notebooku, zde jiº vyºadujeme, aby byla klávesnice men²í, nebo´ práv¥ ona mnohdy ur£uje velikost celého za°ízení. Proto se £asto p°i zmen²ení rozm¥r· notebooku opustí od numerické klávesnice a nebo klávesnice podlehne i p°emíst¥ní, £i zmen²ení n¥kterých kláves, a to nejen z d·vodu zmen²ení, ale i lep²í ergonomie, £ímº docílíme rychlej²í, a tedy i efektivn¥j²í práci s daným za°ízením. Pokud jde o mobilní telefony, museli se tv·rci intenzivn¥ zabývat výsledným vzhledem, rozloºením a velikostí klávesnice. Zde se kladl ur£it¥ nejv¥t²í d·raz na co nejmen²í rozm¥ry za°ízení a tedy i klávesnice, ale i na co nejefektivn¥j²í vyuºitelnost, která spo£ívá nejen v rozloºení kláves, ale i jejich funk£nosti. A tak se dostávám k tématu své diplomové práce. Protoºe m¥ uº del²í dobu návrh klávesnic a efektivního psaní pomocí predikce zajímal, vybral jsem si práv¥ toto téma. Budu se snaºit vytvo°it aplikaci umoº¬ující zjednodu²ení a zrychlení psaní textu pro osoby s omezenou schopností pohybu nebo reakce. Tento software je ur£en zejména pro osoby s omezenou pohyblivostí a reakcí, nebo´ tito lidé (£asto i pacienti) pot°ebují komunikovat s okolím a léka°i co nejjednodu²²í a nejrychlej²í cestou. Hlavní zam¥°ení bude kladeno na psaní textu a to formou vhodné nápov¥dy, tedy v podstat¥ dopl¬ování slov p°ípadn¥ £ásti v¥t. 1
2 1.1
KAPITOLA 1.
ÚVOD
Moºnosti predikce textu
Systémy na dopl¬ování slov se d¥lí na dva základní: • systémy vyuºívající slovník pro dopl¬ování slov, • systémy nevyuºívající slovník pro dopl¬ování slov. V systémech vyuºívajících slovník algoritmus vyhledává ve slovníku, na základ¥ toho co uºivatel napí²e, seznam moºných slov, která se nejvíce podobají kombinaci znak·, které uºivatel napsal a nabídne ty s nejv¥t²í pravd¥podobností výskytu. Uºivatel nyní m·ºe potvrdit nabízené slovo a pokra£ovat, a nebo si vybrat vhodn¥j²í slovo z navrºeného seznamu. Systémy nevyuºívající slovník konstruují slova £i jiné sekvence znak· na základ¥ statistiky £ástí slov. Systémy na predikci textu by m¥ly obsahovat uºivatelskou databázi na ukládání napsaných slov nebo frází, které nejsou obsaºeny v iniciální databázi. Pokud jsou slova p°idávána do uºivatelské databáze bez jiného zákroku neº £istým psaním textu, pak jsou tyto systémy nazývány jako 'u£ící se' systémy. 1.2
Historie predikce textu
Predikce textu z telefonní klávesnice byla známa od roku 1970 (Smith and Goodwin, 1971). Aspekty predikování textu byly patentovány nap°íklad panem Kondraske (1985) a patentována jako pln¥ funk£ní klávesnice do textových systém· pro komunikaci s nesly²ícími lidmi pomocí telefon· v roce 1988 (Roy Feinson). Prediktivní text byl nejvíce pouºívaný k vyhledávání jmen v telefonních seznamech, pozd¥ji pak p°i psaní krátkých textových zpráv SMS ( ), kdyº p°i²li do ²irokého uºití. Short Message Service
1.3
Dokon£ování vhodných slov
Jedná se o b¥ºnou vlastnost webových prohlíºe£· a program· pro vkládání textu. Pokud uºivatel za£ne psát £asto pouºívaná slova, za£ne je po£íta£ automaticky dokon£ovat nebo nabídne seznam vhodných slov. Toto je vyuºito nap°íklad p°i psaní adresy webového serveru URL ( ) u moderních internetových prohlíºe£·. Dokon£ování slov pracuje dob°e pouze tehdy, pokud existuje malý po£et nabízených poloºek k prohledání. Systém pro dokon£ování slov se pot°ebuje po kaºdém zmá£knutí klávesy rozhodovat, zda je lep²í pokra£ovat psát a tím zmen²it seznam moºných slov, a nebo zkoumat nejlep²í moºnosti a prezentovat je. Uniform Resource Locator
3 Efektivita dopl¬ování slov je zaloºena na pr·m¥rné délce napsaných slov. Pokud se nap°íklad text skládá z názv· funkcí, které jsou £asto dlouhé - LongNameForSpecialFunction(), dopl¬ování je uºite£né a obecn¥ aplikované do editor· ur£eným programátor·m. Zvaºujme nap°íklad vloºení slova 'soccer' se systémem slovního dokon£ování vyuºívající objemný slovník angli£tiny. Jak postupn¥ pí²eme, dostáváme: 1.4.
DOKONOVÁNÍ FRÁZÍ A V
T
s - 14 234 slov za£ínajících na s, • so - 848 slov za£ínajících na so, • soc - 75 slov za£ínajících na soc, • socc - 2 slova za£ínající na socc. •
Uºivatel by m¥l rozumn¥ uváºit, ºe kdyº se zastaví na pozici 'soc' a poté prozkoumá seznam moºných dopln¥ní, najde slovo 'soccer' mnohem d°íve, neº kdyby psal zbytek slov 'cer'. Tento odhad nane²t¥stí ignoruje jak spoustu b¥ºných slov jako je 'sock', 'socket', 'society', 'social', tak málo b¥ºná slova jako jsou 'socorro' nebo 'socrates'. V rozdílných jazycích se m·ºe délka slov zna£n¥ m¥nit. V N¥mecku se fotbalovému hrá£i °ekne 'Fussballspieler' coº je slovo o délce 15 znak· na rozdíl od anglického 'soccer' 'player'. Tento p°íklad ilustruje, ºe angli£tina není ideální jazyk pro dokon£ování slov. Studie ukazují, ºe pr·m¥rná délka anglických slov ve 100 000 slovním korpusu je 8,9 znak·, pro echy 10,5 znak· a pro N¥mce 13,2 znak·. 1.4
Dokon£ování frází a v¥t
Jedná se o vlastnost textových editor· podobnou dokon£ování slov, prvn¥ p°edstavené panem Jurajem Simlovicem v TED Notepad v £ervenci roku 2006. Kdyº uºivatel za£íná °ádek £asto se vyskytující frází, doplní po£íta£ automaticky první její £ást do pozice, kde se v²echny podobné fráze za£ínají li²it, nebo nabídne seznam b¥ºných pokra£ování. Slovní dokon£ování m·ºe být pouºito pouze pro dokon£ování slov a obvykle není p°íli² efektivní, kdyº se dovoláváme prázdných mezer. Dokon£ování frází £i celých v¥t je na druhé stran¥ moºné pouºít k dopln¥ní jakéhokoli znaku v£etn¥ interpunkce a je efektivní dokonce i na prázdné °ádky, kdyº p°edchozí °ádek za£al stejnou frází. Nejvíce efektní je v²ak vyuºití kombinace obojího, nebo´ kaºdý z p°ístup· je efektivn¥j²í v jiných p°ípadech. V p°ípadech £asto pouºívaných frází jako je 'I would like to' nebo 'There is need for' je namísto psaní celých frází pot°eba napsat jen n¥kolik málo za£ínajících znak· a
4 zbytek je dokon£en automaticky. V t¥chto p°ípadech je dokon£ování frází £i v¥t rychlej²í a také více komfortn¥j²í neº dokon£ování slov. Ve vyvíjejících softwarech je toto moºné s výhodou vyuºít nap°íklad pro deklarace funkcí a t°íd, podmínek £i smy£ek. KAPITOLA 1.
ÚVOD
Kapitola 2 Popis problému, specikace cíle 2.1
Popis problému predikce textu
Predikce z latinského prae (p°ed) a dicere(°íkat) znamená p°edpov¥¤ nebo prognózu o tom co se stane nebo m·ºe nastat v blízké budoucnosti. Predikce textu pak tedy znamená p°edpovídání £i navrhování následujících znak·, slov £i £ástí v¥t, které má uºivatel v úmyslu napsat, p°i£emº ú£elem je zrychlení, usnadn¥ní a dodrºení správnosti vkládaného textu. 2.2
Cílová skupina uºivatel·
K tomu, abychom byly schopni vymezit cíle diplomové práce, je zapot°ebí znát podrobn¥ cílovou skupinu uºivatel·. Znát jejich schopnosti a naopak nedostatky. Nyní tedy popí²i skupinu uºivatel·, pro které je aplikace primárn¥ vytvá°ena. Nebýt jich, ani tato diplomová práce by nevznikla, nebo´ by nem¥la své vyuºití. Jedná se o lidi, kte°í jsou du²evn¥ zdraví, dokáºí p°emý²let jako b¥ºný £lov¥k, ale k jejich dokonalosti jim chybí fyzická zru£nost. M·ºe se tedy jednat o lidi s poran¥ním, kte°í by rádi n¥co rychle sd¥lili svému o²et°ujícímu, ale vzhledem k tomu, ºe nemohou z n¥jakého d·vodu mluvit, musejí se pokusit tuto informaci sd¥lit prost°ednictvím nástroje, který jim usnadní a zrychlí psaní. Této skupin¥ lidí d¥lá nejv¥t²í problém napsat v¥tu, nebo´ to pro n¥ znamená velkou fyzickou námahu. Dal²ím jejich nedostatkem je, ºe napsat tuto v¥tu jim zabírá p°íli² dlouhou dobu, nebo´ v¥tu pí²í po jednotlivých znacích a navíc dosti pomalu. Tito lidé jsou tedy schopni napsat rozvitou plnohodnotnou v¥tu, ale zabere jim to p°íli² úsilí a spoustu £asu. 5
6 2.3
KAPITOLA 2.
POPIS PROBLÉMU, SPECIFIKACE CÍLE
Vymezení cíl· obecn¥
V dne²ní dob¥ jiº existují programy, které napomáhají takto hendikepovaným lidem, ale nejsou vºdy pro na²i cílovou skupinu p°íli² vhodné. Nap°íklad programy, jejichº GUI ( ) je sloºeno z tabulky, nebo-li £tvere£k·, kde kaºdý takovýto £tverec obsahuje ur£ité slovo a uºivatel si mezi t¥mito slovy vybírá. Jak je asi z°ejmé, t¥chto slov tu nem·ºe být p°íli², a proto tento program sice umoº¬uje dané skupin¥ uºivatel· psát dostate£n¥ rychle, ale pouze primitivní v¥ty. Respektive v¥ty sloºené z t¥chto uºivatelem vybraných slov. Ukázku takového programu, který se nazývá Grid, ukazuje obrázek 2.5, který se nachází v následující sekci existujících implementací. Má snaha tedy bude spo£ívat ve vytvo°ení aplikace, která by zvolenou cílovou skupinu uspokojila a to moºností výb¥ru. Pokud by uºivatel cht¥l napsat v¥tu rychle a nevadilo by mu, ºe v¥ta bude jaksi krkolomná, bude se mu nabízet výb¥r základních sloví£ek v predikovaném seznamu. Zvolí krat²í £as na psaní a více se bude pohybovat v nabízeném seznamu a bude vybírat sloví£ka tak, aby nemusel p°íli² dlouho psát, ale p°itom sd¥lil danou informaci. Naopak, pokud by jiný uºivatel cht¥l psát v¥ty rozvité, plnohodnotné, bude mít tuto moºnost také k dispozici. Je v²ak pochopitelné, ºe takový uºivatel stráví psaním rozvité v¥ty mnohem del²í £as. Nebo´ ne v²echna sloví£ka bude systém obsahovat, a proto tedy bude nutné je celá vypsat (znak po znaku). Tato nová sloví£ka se následn¥ uloºí do systémového slovníku. Samoz°ejm¥ i zde bude fungovat nápov¥da s prediktivními slovy. Proto mezi hlavní cíle diplomové práce pat°í navrhnutí efektivn¥ u£ícího se postupu, který bude na základ¥ uºivatelského vstupu p°idávat do databáze nejen nová slova na základn¥ £astosti jejich výskytu, ale bude se snaºit tato slova sostikovan¥j²ími metodami ohodnotit, nap°. podle v¥tných £len·, podle kladnosti, neutrálnosti £i zápornosti ve v¥t¥, apod. Tato ohodnocení by m¥l poté program vyuºít ke správn¥j²í predikci a tedy k celkové efektivit¥ p°i psaní textu. Dal²ím cílem by m¥la být schopnost aplikace predikovat nejen slova, ale i fráze £i £ásti v¥t. S t¥mito cíli souvisí návrh vhodné struktury a datové reprezentace pro vytvo°ení u£ícího se nástroje, jenº se bude u£it na základ¥ napsaného textu uºivatelem, p°ípadn¥ prvotního textu uloºeného v externím souboru. Nástroj by pak m¥l poskytovat predikci pro (budoucí) psaný text. Ur£itou (vybranou) £ást toho nástroje realizuji jako knihovnu a demonstruji jeho £innost na textech n¥kterých typ· (nap°íklad p°átelský mail, ociální text, atd.). Protoºe dob°e navrºené a p°ehledné GUI ( ) významnou m¥rou zefektiv¬uje práci uºivatele s aplikací, bude mým dal²ím cílem navrhnout práv¥ efektivní a p°ehledné uºivatelské prost°edí. Vzhledem k tomu, ºe cílovou skupinou jsou Graphical User Interface
Graphical User Interface
7 osoby s omezenou schopností pohybu £i reakce, m¥l by být na návrh tohoto rozhraní kladen obzvlá²´ d·raz. Ve nále pak hotový program podrobím test·m na uºivatelích jak cílové skupiny, tak i n¥kterých zdravých osob. Dále by bylo vhodné tyto výsledky porovnat s výsledky jiº existujících systém·. 2.4.
EXISTUJÍCÍ IMPLEMENTACE
2.4
Existující implementace
2.4.1 Dasher
Jde o nástroj umoº¬ující psaní bez klávesnice vkládáním textu na obrazovce s vyuºitím ukazovacího za°ízení jako je my², touchpad, dotyková obrazovka, roller ball, joystick, push-button, wii remote nebo speciální my², kterou se nechá pohybovat nohama nebo hlavou. Díky této ²iroké ²kále moºností ovládání mohou s výhodou program vyuºívat lidé, kte°í klávesnici pouºívat nemohou, a nebo je pro n¥ vyuºívání klávesnice nepraktické. A´ uº uºivatel jako ukazatel pouºívá cokoli, vybere jedno ze zobrazených písmen (po£áte£n¥ se nabízí celá abeceda), na£eº systém pouºívá pravd¥podobnostní prediktivní model pro p°edpov¥¤ nejpravd¥podobn¥j²í kombinace znak· k výb¥ru dal²ích moºných písmen. Znaky s v¥t²í pravd¥podobností výskytu se viditeln¥ zvýrazní a to podle priority. ím má písmeno vy²²í prioritu (pravd¥podobnost výskytu), tím se plocha pod ním více zv¥t²í a tím se plo²ka obsahující daný znak více zvýrazní. Naopak písmena s men²í prioritou leºí na men²í plo²ce, a tudíº nejsou tak vid¥t. Proces skládání textu je podobný h°e, kde uºivatel jakoby prolétává skrze znaky, které letí naproti obrazovce (nebo zleva doprava £i ze shora dol·), a ozna£uje je v po°adí vkládání textu. Dasher obsahuje popis abeced v²ech jazyk·, nastavení barev znak· a trénovací data ve v²ech jazycích. 2.4.1.1
Podrobn¥j²í popis funkcionality
Dejme tomu, ºe bychom cht¥li pomocí programu Dasher napsat v¥tu 'All good things must come ...' a p°edpokládejme, ºe máme na za£átku v²echna po£áte£ní písmena uspo°ádaná od a do z. Za£neme tedy ukazatelem mí°it na písmeno a, kde m·ºeme nalézt nápov¥dy za£ínající na aa, ab, ac, ... al ... az. Vybereme tedy moºnosti za£ínající na al, a zde se nám op¥t nabídne nápov¥da za£ínající na sekvenci ala, alb, ... alz. Takto bychom se propracovali postupn¥ aº k na²emu cíli. Tímto zp·sobem Dasher pracuje s rozdílem, ºe pro nabízené znaky, které nejsou tak £asto pouºité v daném jazyce, máme denovaný malý prostor, a naopak pro £asto se vyskytující znaky existuje prostor v¥t²í. Dasher navíc pouºívá znak _ (podtrºítko) k denování mezery mezi slovy.
8
KAPITOLA 2.
POPIS PROBLÉMU, SPECIFIKACE CÍLE
Mezi £asté chyby nová£k· uºivatel· pat°í rychlost postupování. Tedy i p°esto, ºe nev¥dí kam postupovat (kde se nachází dal²í písmenko), postupují p°íli² rychle. Radou jim je zpomalit, £ili nejprve vybrat cestu, a aº poté po ní jít, t°eba i rychleji. Obecná rada tedy zní: neklikej, netahej a nesp¥chej. Vysv¥tlení barev: bílý £tverec - obsahuje znak mezery (vºdy umíst¥n vespodu abecedy), • speciální ºlutý box obsahuje velká písmena [A - Z], • £ervený box obsahuje £ísla [0 - 9] (pokud jsou zapnuté £íslice), • zelený box obsahuje interpunk£ní znaky, • ostatní barvy jsou vkládány jednodu²e k rozli²ení £tverc· obsahujících písmeno, • v jazycích s akcentem (váºný, naléhavý, atd.) je akcent zobrazen v oranºovém boxu. •
Nastavení barev je moºné m¥nit podle vlastního uváºení. 2.4.1.2
Jazykový model
Nyní uº víme jak program Dasher pracuje a co d¥lá, ale pouze z uºivatelského pohledu. Pokud bychom cht¥li proniknout více do hloubky a zjistit jak práv¥ nejvíce st¥ºejní funkce Dasheru pracuje, tedy predikce následujícího znaku, museli bychom se více zajímat o jazykový model. Kdyº se vybírá jazykový model pro Dasher, musí se zvaºovat dv¥ podstatné vlastnosti. Jak dob°e jazykový model komprimuje text a jaká je doba výpo£tu pravd¥podobnosti znaku. V aplikaci Dasher je nutné totiº po£ítat vºdy spoustu pravd¥podobností pro update obrazovky. Model v d°ív¥j²í verzi Dasheru je zaloºen na populárním algoritmu pro kompresi textu nazývaný predikce £áste£né shody PPM ( ). PPM je algoritmus zaloºený na kontextu, pouºívá statistiky znak·, které následují identické °et¥zce. V nov¥j²ích aplikacích Dasher se vyuºívá rychlá a snadno implementovatelná varianta PPM algoritmu nazývaná PPM5D+, která dokáºe zkomprimovat znak v¥t²iny anglického textu do p°ibliºn¥ 2 bit·. Mimo algoritmus PPM5D+ se vyuºívají je²t¥ dal²í sostikovan¥j²í algoritmy zaloºené na PPM. Prediction by Partial Match
2.4.
EXISTUJÍCÍ IMPLEMENTACE
9
Obrázek 2.1: Dasher a jeho gracké uºivatelské prost°edí. 2.4.1.3
Predikce textu obecn¥
Algoritmus predikce textu je zaloºený na algoritmu Knuth-Moriss-Pratt, který slouºí k vyhledávání °et¥zc· v textu. Je zavedené, ºe úkol predikce je úzce spojený s úkolem komprese a klasikace. Algoritmus, o n¥mº se nyní budu rozepisovat, je velice podobný kompresní technice predikce £áste£né shody PPM, která je jednou z nejlep²ích bezeztrátových textov¥ kompresních technik. Úkolem predikce textu je odhad následujícího znaku daného textu reprezentujícího vloºenou historii. První charakter vloºeného °et¥zce bude reprezentovat nejstar²í vloºený znak a poslední charakter bude naopak reprezentovat nejnov¥j²í vloºený znak. Nap°íklad, m¥jme text "abababa". Dobrým odhadem pro následující znak by bylo písmeno b, nebo´ b vºdy následuje znak a ve vloºené historii. Úkol predikce textu není nutn¥ limitovaný na p°irozené jazyky. Je moºné vyuºít predikci i pro jazyky binární a ostatní.
10 2.4.1.4
KAPITOLA 2.
POPIS PROBLÉMU, SPECIFIKACE CÍLE
Vyuºití predikce textu
Predikce textu m·ºe být vyuºitá v mnoha rozdílných aplikacích, nap°íklad pro minimalizaci po£tu zmá£knutých kláves vyºadovaných pro napsání daného textu. Toto je speciáln¥ vyuºito u za°ízení, která nedovolují rychlé vkládání znak·, nap°íklad kv·li nedostate£ného mnoºství kláves, jako je tomu u klávesnic mobilních telefon·. Dále algoritmus dovoluje urychlení komunikace postiºeným lidem. Neposledním p°íkladem vyuºití je odstran¥ní ²umu z dat. Predikce znak· m·ºe být vlastn¥ více validní (gramaticky správn¥j²í), neºli vkládání textu bez predikce. Pravopisné chyby m·ºeme tedy povaºovat za ²um. Ve nále spo£ívá jeho vyuºití v automatickém dopl¬ování textu a výb¥ru moºností dopln¥ní jednotlivých znak· £i celých slov. 2.4.1.5
Relace mezi predikcí a kompresí
Algoritmus predikce m·ºe p°i°adit pravd¥podobnostní rozd¥lení znak·m v abeced¥ korespondujících s pravd¥podobností kaºdého následujícího znaku ve vloºené sekvenci znak·. Toto pravd¥podobnostní rozd¥lení m·ºe být kombinováno s kódovacím schématem, jako je aritmetické kódování nebo Humanovo kódování ke kompresi dat. 2.4.1.6
Relace mezi predikcí a klasikací
Klasikace je úkol, ve kterém musejí být poloºky kategorizovány do skupin zaloºených na trénovací mnoºin¥ jiº d°íve ozna£ených poloºek. Jakýkoli algoritmus predikce £i komprese m·ºe být pouºit ke klasikaci. To m·ºe být provedeno rozd¥lením trénovací mnoºiny do kategorií zaloºených na jejich zna£eních. Kdyº neozna£ená data pot°ebují být ozna£ena do kategorií, kaºdá trénovací kategorie m·ºe být pouºita jako separátní trénovací mnoºina pro predik£ní £i kompresní algoritmus. Data mohou být klasikována do kategorie, pokud v dané kategorii m¥li p°i trénování nejniº²í predik£ní chybu. Obdobn¥ pro p°ípad kompresního algoritmu, data pat°í do dané kategorie, jestliºe získala nejniº²í kompresní velikost. Jako ozna£ení skupiny dat m·ºeme povaºovat popisky, jako jsou nap°íklad vtipné, nevtipné £i smutné, ²´astné, atd. 2.4.1.7
Knuth-Morris-Pratt algoritmus
Naivní postup k nalezení °et¥zce S délky M v textu T délky N má £asovou asymptotickou sloºitost O (M × N ). Tento postup zahrnuje jednoduché iterování N pozicemi textu T a pro kaºdou pozici kontrolu, jestli dal²í M znaky odpovídají °et¥zci S. KMP ( ) algoritmus sniºuje tuto sloºitost na O (M + N ). Algoritmus se skládá ze dvou £ástí. Knuth-
Morris-Pratt Algorithmus
11 První obsahuje iteraci skrze M znak· °et¥zce S a stav¥ní tabulky velikosti M. Druhá zahrnuje iteraci skrze N znak· textu T a hledání podobností. P°edpokládejme, ºe chceme najít °et¥zec S = 'abcabz' v textu T = 'abcabcabz'. Iterováním skrze T zjistíme, ºe prvních 5 znak· pasuje p°esn¥ °et¥zci S. estý znak v S je 'z' a v T je 'c', je tedy rozdílný. V naivním p°ístupu bychom se museli vrátit na 2. index textu T a za£ít prohledávat S od za£átku. Nicmén¥, kdyº jsme zjistili, ºe 6. znak je rozdílný, mohli jsme pozorovat správné párování znak· 'ab' na pozici 4. a 5. Tyto znaky jsou první dva znaky °et¥zce S. To znamená, ºe m·ºeme pokra£ovat ve vyhledávání 6. znaku textu T a 3. znaku S bez nutnosti vracení se na za£átek. D·vod pro stav¥ní tabulky pro S je tedy takový, ºe tabulka zastává roli chybové funkce pro p°ípad, kdy zjistíme nestejné znaky. Obsahuje index v S, od kterého je nám umoºn¥no nové hledání v textu T bez nutnosti se vracet na za£átek. Tato tabulka se nechá postavit v £ase O (M ). Poté co je tabulka sestavena, zabere iterace skrze T £as O (N ). 2.4.
EXISTUJÍCÍ IMPLEMENTACE
2.4.1.8
Predikce £áste£né shody
A£koli je známa spousta variant PPM algoritmu, v²echny sdílejí obecný koncept. My²lenka je taková, ºe chceme vhodným zp·sobem vykonat predikci následujícího znaku sekvence. Tuto sekvenci zkou²íme napasovat na vloºenou historii a pomocí toho predikovat dal²í znak sekvence. Vysv¥tlení na p°íkladu. Máme °et¥zec S = 'abczabczabc'. Dobrý odhad na dal²í znak v sekvenci bude písmeno 'z', nebo´ 'z' vºdy následuje po písmenu 'c' ve vloºené historii. Navíc 'z' následuje vºdy po °et¥zci 'bc'. Krom toho, 'z' následuje po °et¥zci 'abc'. M¥lo by být jasné, ºe konstruování del²ích pár· je preferovan¥j²í díky tomu, ºe se vyskytují mén¥ £ast¥ji. Proto del²í páry podávají lep²í predikci. 2.4.2 Read & Write GOLD
Je multifunk£ní program, který se skládá z toolbaru obsahující spoustu tla£ítek interpretujících jednotlivé funkce. Program pracuje s °adou aplikací b¥ºících pod opera£ním systémem Windows, jako je nap°íklad Word, Excel, internetový prohlíºe£ nebo databáze a poskytuje podporu pro negramotné. D·leºité prvky aplikace: • e£ - £te slova, v¥ty nebo fráze v dokumentech, • Pravopis - umí pokro£ilou kontrolu pravopisu speciáln¥ navrºenou k °e²ení sloºitých fonetických chyb, • Podpora pro homonyma - identikuje a poskytne zvukové denice pro podobn¥ zn¥jící slova,
12
KAPITOLA 2.
POPIS PROBLÉMU, SPECIFIKACE CÍLE
Predikce slov - zam¥°uje se na konstruování v¥t díky navrhování a predikování slov. Word Prediction se u£í, jak se pí²e korektní text zam¥°ený na rozvíjení gramotnosti a zvy²ování korektnosti. Predikce textu je zaloºena na kontextové souvislosti a zvukových doprovod·, • Slovník - slovník o 180 000 sloví£ek a dal²í nástroje. Nejzajímav¥j²ím nástrojem pro mé ú£ely je práv¥ Word Prediction. Jeho hlavním ú£elem v aplikace R&W GOLD je zkvalitn¥ní práce psaní textu. Není v aplikaci tedy za£len¥n zejména kv·li rychlej²ímu psaní, ale spí²e pro kontrolu chyb a návrh mnohdy vhodn¥j²ích slov, neº by mohl mít písa° práv¥ namysli. P°edpovídá foneticky stejn¥ zn¥jící slova, tedy pokud bychom cht¥li napsat 'photograph' a za£ali by jsme jej psát tak, jak jej sly²íme, tedy dvojicí písmen fo, program automaticky nabídne i slovo 'photograph'. Kaºdé nabízené slovo je indikováno p°esností kontextové souvislosti a to barvami: • zelená - vysoce pravd¥podobné a gramaticky správné na základn¥ souvislosti trojice slov, • ºlutá - vysoce pravd¥podobné a gramaticky správné na základn¥ souvislosti dvojice slov, • modrá/£erná - moºný, zaloºeno na £etnosti slov - bez kontextové souvislosti. Slovník nabízí n¥kolik podmnoºin umoº¬ujících nejvhodn¥j²í výb¥r ²itý na míru uºivateli - dít¥, teenager a dosp¥lý. Dále je moºné si vybrat slovník z kategorií pro vhodn¥j²í p°izp·sobení k tématu psaní. Kategorie jsou kreativní psaní; sv¥tové aféry, ekonomika a politika; teoretická, aplikovaná a p°írodní v¥da; um¥ní a volný £as a spole£enské v¥dy. Nakonec je nám umoºn¥no základní a roz²í°ené nastavení zp·sobu predikce. V nastavení predikce programu m·ºeme: • barevn¥ a rozm¥rov¥ p°izp·sobit panel predikovaných slov podle svých p°edstav, • nastavit automatické £tení nabízených slov a jejich zvýrazn¥ní, • nau£it predikci z vlastních £i jiných zdroj·, • nahradit ve²keré fonetické záznamy, • nastavit sensitivitu kontextové souvislosti nabízených slov, respektive která slova je²t¥ nabízet a která jiº nikoli, • vybrat podmnoºinu slovníku, • vybrat soubor pro u£ení predikce. Je moºné vybírat z malého, st°edního £i velkého souboru. •
2.4.
EXISTUJÍCÍ IMPLEMENTACE
13
Obrázek 2.2: Read & Write GOLD a ukázka jeho grackého prost°edí a predikce programu. 2.4.3 ClaroRead
Jedná se o obdobný program jako je program Read & Write. Aplikace je úzce spjatá s Microsoft Word aplikací a to z d·vodu usnadn¥ní práce. Je nám nápomocen i v ostatních aplikacích. Program nám pomáhá pracovat s textem a to tak, ºe nap°íklad dokáºe p°e£íst text ve Wordu, nebo nám pom·ºe s predikcí. Na první pohled si b¥ºný uºivatel v²imne v²ak propracovan¥j²í graky. Co se funk£nosti tý£e, ClaroRead nabízí spoustu funkcí jako je: • e£ - umoº¬uje £tení textu z obrazovky, • Zm¥na fontu - umoº¬uje snadn¥j²í práci s Microsoft Wordem, kde je pomocí jednoho tla£ítka moºné m¥nit font celého dokumentu a p°epínat tak mezi 3-mi nejsnadn¥ji £itelnými fonty, dále je moºné m¥nit barvu textu, velikost fontu, • Zm¥na odsazení £i prokládání °ádk· v Microsoft Wordu £i Internet Exploreru, • Podpora pro homonyma - v textu dokáºe zvýraznit slova, která stejn¥ zn¥jí, ale jinak se pí²í, • Predikce textu - umoº¬uje psát kvalitn¥j²í text díky nápov¥dy navrhovaných slov, nástroj se nechá u£it bu¤ p°ímo tím, jak uºivatel pí²e, a nebo z externího souboru, • Uloºit jako audio - aplikace umoº¬uje uloºit aktuální Microsoft Word dokument nebo zkopírovaný text ve schránce do audia nahrávky,
14
KAPITOLA 2.
•
POPIS PROBLÉMU, SPECIFIKACE CÍLE
Snímání - umoº¬uje editovat text naskenovaného dokumentu.
Obrázek 2.3: ClaroRead a ukázka jeho grackého prost°edí a predikce programu. 2.4.4 OpenOce.org Writer
Poskytuje slovní dokon£ení, které navrhuje slova d°íve psaná v textu spí²e neº slova z celého slovníku. 2.4.5 Microsoft Excel
Tabulkový procesor má pracující slovní dokon£ování, které navrhuje d°íve psaná slova v horních bu¬kách, viz obrázek 2.4.
Obrázek 2.4: Excel a ukázka dokon£ování slov.
2.4.
EXISTUJÍCÍ IMPLEMENTACE
15
2.4.6 T9
Jedná se o patentovanou technologii pro predikci textu u mobilních telefon· vyuºívajících ke psaní textu 9 kláves. P·vodn¥ vynalezené spole£ností Tegic Communication. Tiago Rosa byl vynálezce této velmi uºite£né technologie a to jiº ve svých 9 letech. Proto se jí °íká T9 (Tiago-9). T9 je pouºitá na telefonech od LG, NEC, Nokia, Samsung Electronics, Siemens, Sony Ericsson, Sanyo, Sagem a ostatních. Ú£el T9 je umoºnit rychlej²í napsání textové zprávy. Umoº¬uje nám vloºit slovo efektivn¥ji a to tak, ºe nap°íklad pro slovo 'hallo' sta£í stisknout sekvenci kláves 42556, namísto p·vodního n¥kolikanásobného stisku stejných tla£ítek pro jeden znak (44 2 555 555 666). V rychle p°ístupném slovníku vyhledává v²echna slova korespondující sekvenci napsaných znak· a °adí je podle £astosti pouºití. Pokud práv¥ navrhované slovo není p·vodn¥ zamý²lené, dovolí T9 uºivateli pomocí speciálního tla£ítka listovat seznamem a vybrat si tak poºadované slovo. Slovník umoº¬uje p°idávání nových slov pouºívaných daným uºivatelem pro pozd¥j²í rozpoznání. Uºivatel m·ºe tato nová slova p°idávat do DB pomocí technologie multi-tap (technologie poºadující více zmá£knutí na tla£ítko pro získání poºadovaného znaku). 2.4.6.1
Speciální vlastnosti
Pro kombinaci tla£ítek 4663 nám T9 nabídne v angli£tin¥ slova jako jsou: 'good', 'home', 'gone', 'hood', atd. Tyto kombinace jsou známy jako textonyms. Nap°íklad 'home' je ozna£ováno jako textonym slova 'good'. Pokud uºivatel pouºívá slovo 'home' více £ast¥ji neº 'good', zam¥ní se pozice t¥chto dvou slov a nabízet se bude p°ednostn¥ slovo 'home' a aº po n¥m 'good'. D°ív¥j²í verze T9 umoº¬ovaly pouºívat dva jazyky zárove¬. Umoº¬ovaly tak uºivateli psát jak svým nativním jazykem, tak jazykem cizím. N¥které implementace se také u£ily párové dvojice slov. Nap°íklad pokud uºivatel £asto psal slovní spojení 'eat food', pak po nau£ení a napsání 'eat' automaticky telefon navrhoval 'food', které se nechalo jednodu²e potvrdit tla£ítkem next. Dal²í výkonná vlastnost bylo automatické rozpoznání a oprava napsaných chyb tak, ºe se T9 koukla na sousední tla£ítka a podle nich zjistila, zda ²lo o p°eklep £i ne. Nap°íklad slovo 'testing' by m¥lo být vloºeno kombinací kláves 8378464. Vloºením stejného £ísla se dv¥ma nesprávnými sousedními tla£ítky stále navrhuje slova 'tasting' (8278464), 'testing' (8378464) a 'tapping' (8277464).
16
KAPITOLA 2.
POPIS PROBLÉMU, SPECIFIKACE CÍLE
2.4.7 Grid
Jedná se o program, jehoº GUI ( ) je sloºeno z tabulky, nebo-li £tvere£k·, kde kaºdý takovýto £tverec obsahuje ur£ité slovo a uºivatel si mezi t¥mito slovy vybírá a postupn¥ sestavuje jednoduchou v¥tu. Jak je asi z°ejmé, t¥chto slov tu nem·ºe být p°íli² mnoho, a proto tento program sice umoº¬uje dané skupin¥ uºivatel· psát dostate£n¥ rychle, ale pouze primitivní v¥ty. Respektive v¥ty sloºené z t¥chto uºivatelem vybraných slov. Ukázku takového programu ukazuje obrázek 2.5. Graphical User Interface
Obrázek 2.5: Ukázka programu pro psaní jednoduchých v¥t.
Kapitola 3 Analýza a návrh °e²ení 3.1
Analýza
Jaké zvolit implementa£ní prost°edí? Jaké postupy p°i vytvá°ení nástroje pouºít? O tom pojednává následující kapitola. 3.1.1 Jazyk C# a technologie .NET
Technologie .NET poskytuje nové prost°edí, ve kterém lze vyvíjet tém¥° libovolné aplikace ur£ené pro systém Windows, zatímco C# je pom¥rn¥ nový programovací jazyk, který byl navrºen zejména pro spolupráci s technologií .NET. .NET jako sou£ást názvu má zd·raznit p°esv¥d£ení spole£nosti Microsoft, ºe cestu vp°ed p°edstavují distribuované aplikace, kde je výpo£etní zpracování rozd¥leno mezi klienta a server. Jazyk C# neslouºí pouze k psaní internetových nebo sí´ových aplikací. Nabízí moºnosti pro tvorbu tém¥° libovolných typ· program· nebo komponent, které m·ºeme v systému Windows poºadovat. Jazyk C# spolu s technologií .NET byly vytvo°eny zejména proto, aby zásadn¥ zm¥nily zp·sob psaní program· a aby usnadnily programování v systému Windows. 3.1.2 Technologie .NET a jazyk C#
I kdyº zp¥tná kompatibilita byla vºdy klí£ovou vlastností technologií Windows a jednou ze silných stránek této platformy, neslo toto s sebou i velkou nevýhodu. Pokaºdé, kdyº se n¥jaká technologie vyvíjí a získává nové funkce, postupn¥ se p°i tom komplikuje. Spole£nost Microsoft nemohla donekone£na roz²i°ovat stejné vývojové nástroje a jazyky a neustále zvy²ovat jejich sloºitost. Pokud cht¥la p°ijít s jednoduchou, ale p°esto pokro£ilou sadou jazyk·, prost°edí a vývojových nástroj·, které vývojá°·m umoºní snadnou tvorbu ²pi£kových program·, musela d°íve £i pozd¥ji za£ít s £istým stolem. 17
18
KAPITOLA 3.
ANALÝZA A NÁVRH EENÍ
P°esn¥ takový nový za£átek p°edstavuje jazyk C# a technologie .NET. Jednodu²e °e£eno je .NET platforma (rozhraní API) k programování na platform¥ Windows. Spolu s platformou .NET Framework se objevuje jazyk C#, který byl od základ· navrºen tak, aby spolupracoval s technologií .NET a zárove¬ vyuºil ve²kerý pokrok ve vývojových prost°edích a koncepcích objektov¥ orientovaného programování. 3.1.3 Výhody technologie .NET
Objektov¥ orientované programování - platforma .NET Framework a jazyk C# jsou jiº od za£átku kompletn¥ zaloºeny na objektov¥ orientovaných principech. • Dobrý návrh - knihovna základních t°íd je od základu navrºena vysoce intuitivním zp·sobem. • Jazyková nezávislost - v technologii .NET se v²echny jazyky, tj. Visual Basic .NET, C#, J# a spravované (managed) C++, kompilují do spole£ného zprost°edkujícího jazyka (Intermediate Language). To znamená, ºe jazyky mohou spolupracovat zp·sobem, který d°íve nebyl k dispozici. • Lep²í podpora dynamických webových stránek - prost°edí ASP sice poskytovalo zna£nou pruºnost, ale zárove¬ nebylo p°íli² efektivní, protoºe pouºívalo interpretované skriptovací jazyky. Nedostate£ný objektov¥ orientovaný návrh také £asto vedl ke vzniku nep°ehledného kódu ASP. Technologie .NET nabízí integrovanou podporu webových stránek pomocí nové technologie ASP.NET. V rámci ASP.NET je kód stránek kompilován a lze jej psát v jazyce vysoké úrovn¥ kompatibilním s technologií .NET, jako je nap°. jazyk C#, J# nebo Visual Basic. • Ú£inný p°ístup k dat·m - sada komponent .NET souhrnn¥ ozna£ována jako ADO.NET zaji²´uje efektivní p°ístup k rela£ním databázím a r·zným zdroj·m dat. Jsou také k dispozici komponenty, které poskytují p°ístup k systému soubor· a k adresá°·m. Zejména je do technologie .NET integrována podpora jazyka XML, coº umoº¬uje manipulaci s daty, která lze importovat nebo exportovat na jiné platformy neº Windows. • Sdílení kódu - technologie .NET zcela m¥ní zp·sob sdílení kódu mezi aplikacemi. Zavádí koncepci sestavení (assembly), která nahrazují tradi£ní knihovny DLL. Sestavení mají formální funkce pro správu verzí a je moºné, aby vedle sebe existovaly r·zné verze sestavení. • Zlep²ené zabezpe£ení - kaºdé sestavení m·ºe také obsahovat integrované informace o zabezpe£ení, jeº mohou p°esn¥ ur£ovat, který uºivatel nebo kategorie uºivatel· £i proces· smí volat ur£ité metody denovaných t°íd. •
19 • Podpora webových sluºeb - technologie .NET zahrnuje pln¥ integrovanou podporu vývoje webových sluºeb, které lze vytvá°et stejn¥ snadno jako libovolný jiný typ aplikací. • Visual Studio 2010 - pro technologii .NET se dodává vývojové prost°edí Visual Studio, které umoº¬uje stejn¥ snadno pracovat s jazyky C++, C#, J# a Visual Basic i s kódem ASP.NET. • C# - je pom¥rn¥ nový objektov¥ orientovaný jazyk, který je ur£en pro spolupráci s technologií .NET.
3.1.
ANALÝZA
3.1.4 Porovnání jazyka C# s jinými jazyky
Z ur£itého hlediska lze jazyk C# povaºovat za stejnou revoluci mezi programovacími jazyky, jakou v prost°edí Windows p°edstavuje technologie .NET. Sou£asn¥ s tím, jak spole£nost Microsoft p°idávala v posledním desetiletí dal²í a dal²í funkce do systému Windows a rozhraní Windows API, rozrostly se i jazyky Visual Basic a C++. Jazyky Visual Basic a C++ sice díky tomu získaly mimo°ádné moºnosti, ale oba jazyky také kv·li zp·sobu svého vývoje trpí r·znými problémy. V p°ípad¥ jazyka Visual Basic spo£ívala jeho hlavní síla v tom, ºe jej bylo snadné pochopit a usnad¬oval mnoho programátorských úkol·, protoºe p°ed vývojá°em z v¥t²í £ásti skrýval podrobnosti rozhraní Windows API a infrastruktury komponent COM. Kv·li tomu v²ak jazyk Visual Basic nikdy nebyl pln¥ objektov¥ orientován a kód velkých aplikací brzy ztrácel p°ehlednost a obtíºn¥ se udrºoval. Syntaxe jazyka Visual Basic byla navíc p°evzata ze star²ích verzí jazyka BASIC (který byl op¥t navrºen tak, aby se jej mohli intuitivn¥ nau£it za£ínající programáto°i, nikoli aby se v n¥m psaly komer£ní aplikace). Proto se zcela nehodil k tvorb¥ kvalitn¥ strukturovaných £i objektov¥ orientovaných program·. Jazyk C++ má na druhou stranu své ko°eny v denici standardu ISO jazyka C++. Nespl¬uje normu ISO úpln¥ z jednoduchého d·vodu, ºe spole£nost Microsoft napsala sv·j první kompilátor C++ je²t¥ p°ed ociálním vydáním standardu ISO. Velmi se v²ak této norm¥ blíºí. Nane²t¥stí to vedlo ke dv¥ma problém·m. Za prvé má norma ISO C++ své ko°eny v technologii staré desítku let, coº se projevuje v nedostate£né podpo°e moderních koncepcí (nap°. °et¥zc· v kódování Unicode a generování dokumentace v XML) a v ur£itých zastaralých strukturách ur£ených pro d°ív¥j²í kompilátory (jako je odd¥lení deklarace od denice £lenských funkcí). Za druhé se spole£nost Microsoft sou£asn¥ snaºila vyvinout C++ jako jazyk, který je ur£en k náro£ným úkol·m v systému Windows. Aby toho dosáhla, musela jazyk roz²í°it o velké mnoºství specických klí£ových slov a také r·zných knihoven. Výsledek je, ºe v systému Windows se z tohoto jazyka stal naprostý "gulá²". Nap°íklad se zde objevuje n¥kolik denic °et¥zce: char*, LPTSTR, string, CString(verze MFC), CString(WTL), wchar_t*, OLECHAR* atd.
20
KAPITOLA 3.
ANALÝZA A NÁVRH EENÍ
V této fázi na scénu vstupuje zcela nové prost°edí .NET, které bude zahrnovat nová roz²í°ení obou jazyk·. Spole£nost Microsoft tento problém vy°e²ila p°idáním dal²ích vlastních klí£ových slov do jazyk C++ a kompletním p°epracováním jazyka Visual Basic v prost°edí Visual Basic .NET na jazyk Visual Basic. Tento jazyk si zachovává n¥které základní syntaktické prvky jazyka VB, ale jeho návrh se natolik li²í, ºe jej z praktického hlediska m·ºeme povaºovat za nový jazyk. Za této situace se spole£nost Microsoft rozhodla poskytnout vývojá°·m alternativu - jazyk navrºený speciáln¥ pro technologii .NET a vytvo°ený zcela nov¥. Výsledek je Visual C#. Spole£nost Microsoft ociáln¥ popisuje jazyk C# jako "jednoduchý, moderní a objektov¥ orientovaný programovací jazyk s typovou bezpe£ností, který je odvozen od jazyk· C a C++". V¥t²ina nezávislých pozorovatel· by tento popis pravd¥podobn¥ opravila na "odvozený od jazyk· C, C++ a Java". Tyto denice jsou technicky p°esné, ale p°íli² nezachycují krásu £i eleganci jazyka. Syntakticky se jazyk C# velmi podobá jazyk·m C++ i Java do takové míry, ºe mnohá klí£ová slova jsou shodná. C# také sdílí stejnou strukturu blok· se závorkami () k ozna£ení blok· kódu a odd¥luje p°íkazy pomocí st°edník·. Výpis kódu C# na první pohled velmi p°ipomíná kód jazyka C++ nebo Java. Navzdory této prvotní podobnosti se v²ak jazyk C# lze nau£it mnohem snáze neº C++ a jeho obtíºnost je srovnatelná s jazykem Java. Jeho struktura lépe vyhovuje moderním vývojovým prost°edím neº oba star²í jazyky a zárove¬ byl navrºen tak, aby programátor·m sou£asn¥ poskytl jednoduchost pouºívání jazyka Visual Basic a v p°ípad¥ pot°eby vysoký výkon a nízkoúrov¬ový p°ístup k pam¥ti jako jazyk C++. Zde uvedu n¥které vlastnosti jazyka C#: • Plná podpora t°íd a objektov¥ orientovaného programování, v£etn¥ d¥di£nosti rozhraní i implementace, virtuálních funkcí a p°etíºení operátor·. • Konzistentní a vhodn¥ denovaná sada základních typ·. • Integrovaná podpora automatického generování dokumentace ve formátu XML. • Automatické £i²t¥ní dynamicky p°id¥lované pam¥ti. • Moºnost ozna£it t°ídy nebo metody uºivatelsky denovanými atributy. Tato funkce m·ºe být uºite£ná pro dokumentaci a n¥kdy má ur£itý vliv na kompilaci (nap°. p°i ozna£ení metod, aby se kompilovaly pouze v ladících sestaveních). • Plný p°ístup ke knihovn¥ základních t°íd .NET a také snadná dostupnost rozhraní Windows API (pokud ho skute£n¥ pot°ebujete, k £emuº nedochází p°íli² £asto). • V p°ípad¥ pot°eby jsou dostupné ukazatele a p°ímý p°ístup do pam¥ti, ale jazyk je navrºen takovým zp·sobem, ºe lze bez nich pracovat tém¥° ve v²ech situacích. • Podpora vlastností a událostí ve stylu jazyka Visual Basic.
21 • Pouhou zm¥nou moºností kompilátoru m·ºeme kompilovat bu¤ spustitelný soubor nebo knihovnu komponent .NET, kterou m·ºe volat jiný kód stejným zp·sobem jako ovládací prvky ActiveX (komponenty COM). • Pomocí jazyka C# lze psát dynamické stránky ASP.NET a webové sluºby zaloºené na XML. Je vhodné uvést, ºe v¥t²ina vý²e zmín¥ných vlastností se vztahuje i na jazyky Visual Basic a spravované C++. Nicmén¥ díky tomu, ºe jazyk C# je od za£átku navrºen pro spolupráci s technologií .NET, je jeho podpora funkcí této platformy kompletn¥j²í a dostupná na základ¥ vhodn¥j²í syntaxe, neº je tomu u vý²e uvedených jazyk·. Jazyk C# je sice velmi podobný jazyku Java, ale poskytuje n¥která vylep²ení. Jazyk Java zejména není ur£en ke spolupráci s prost°edím .NET. Jazyk C# má ale také svá omezení. Jednou z oblastí, pro které tento jazyk není ur£en, je vývoj £asov¥ kritického nebo extrémn¥ zat¥ºovaného kódu, tj. kódu, kde skute£n¥ záleºí na tom, zda pr·b¥h smy£ky vyºaduje 1 000 nebo 1050 cykl· procesoru, a pot°ebujeme uvolnit prost°edky v té milisekund¥, kdy jiº nejsou pot°eba. Mezi nízkoúrov¬ovými jazyky si v této oblasti nejspí² i nadále udrºí výsadní postavení C++. Jazyk C# postrádá n¥které klí£ové funkce, které jsou nutné pro aplikace s mimo°ádn¥ vysokým výkonem, v£etn¥ moºnosti specikovat °ádkové (inline) funkce a destruktory, u kterých je zaji²t¥no spu²t¥ní v denovaných bodech kódu. Do této kategorie v²ak pat°í pouze malá skupinka aplikací. 3.1.
ANALÝZA
3.1.5 Výb¥r programovacího jazyku
K implementaci aplikace predikce textu pro osoby s omezenou pohyblivostí a reakcí jsem zvolil práv¥ jazyk C# a to zejména z d·vodu jeho nenáro£né syntaxe, která je dosti podobná jazyku Java, jak jsem jiº psal vý²e. S jazykem Java jsem se seznámil jiº na vysoké ²kole, a proto by p°echod k jazyku C# nemusel být p°ekáºkou. Dále je to jazyk pom¥rn¥ nový a efektivní, pln¥ objektov¥ orientovaný s typovou bezpe£ností a já se cht¥l nau£it s tímto jazykem pracovat. V neposlední °ad¥ mi toto bylo doporu£eno vedoucím mé diplomové práce, nebo´ i on sám vytvá°í aplikace v jazyce C#. A posledním rozhodujícím d·vodem bylo, ºe výsledek práce m¥l být ve form¥ Windows aplikace, a obecn¥ pro Windows aplikace se jazyk C# z jazyk· °e²ících daný problém, jako je C++, Java a C#, hodí práv¥ jazyk C# nejvíce. 3.1.6 Postup u£ení
Podobn¥ jako u program· zmín¥ných v samotném úvodu této práce, bude má aplikace podporovat u£ení se nových slov £i £ástí v¥t.
22
KAPITOLA 3.
ANALÝZA A NÁVRH EENÍ
Jak takové u£ení pracuje? Tak vezmeme v potaz, ºe z po£átku na²e aplikace není schopna predikovat ºádná slova a uº v·bec ne £ásti v¥t, nebo´ slovník, který k tomuto ú£elu vyuºívá je zcela prázdný. Nyní se naskýtají dv¥ metody u£ení, a to bu¤ ze souboru, a nebo u£ení se p°ímo z napsaného textu daným uºivatelem, tedy v real-time. U£ení ze souboru je v podstat¥ obdoba u£ení se z uºivatelského vstupu. M·ºeme si to p°edstavit tak, ºe daný uºivatel napí²e n¥jaký text, který je pro n¥ho charakteristický, a ten uloºí do textového souboru, ze kterého se následn¥ nau£í systém pro predikci slov, £i £ástí v¥t. Kaºdý uºivatel totiº bude ur£it¥ pouºívat n¥která slova, která jsou pro n¥j specická a která jiný uºivatel nepouºívá a nebo pouºívá mén¥ £ast¥ji. 3.1.6.1
U£ení ze souboru
Po u£ení systému ze souboru by jsme m¥li vyºadovat ur£ité vlastnosti. Nap°íklad, aby aplikace nenau£ila systémový slovník slova, která v·bec neexistují v £eském slovníku, coº mohou být slova bu¤ chybn¥ napsaná a nebo slova, která daný uºivatel sice pouºívá, ale jedná se o slova nespisovná £i neexistující. S tím tedy souvisí i správné d¥lení slov, £ili ur£it¥ nebude sta£it d¥lit slova pouze pomocí mezery, ale nap°íklad i pomocí te£ky, poml£ky, otazníku, vyk°i£níku, otev°ené a uzav°ené závorky a to jak oby£ejné, tak hranaté a sloºené, atd. V neposlední °ad¥ klademe poºadavek na informace ohledn¥ kaºdého sloví£ka, které u n¥j chceme uchovávat. Tedy nap°íklad, nejen ºe chceme uchovávat jeho textovou podobu, ale zajímají nás i informace jako je celkový po£et výskyt· v daném textu, poslední £as nau£ení, tedy £as, kdy bylo naposledy pouºito, po£et pouºití daného slova za týden, po£et pouºití daného slova za m¥síc. Tohle byl výpis t¥ch základních vlastností, nyní je²t¥ m¥jme ur£ité poºadavky na dv¥ asi nejd·leºit¥j²í vlastnosti, které nám pomáhají v predikci slov £i £ástí v¥t. Jedná se nejprve o ukládání následných slov u kaºdého sloví£ka. Tedy chceme ukládat ta slova, která se £asto vyskytují za daným slovem. Toto je samoz°ejm¥ op¥t pevn¥ svázáno s daným uºivatelem, nebo´ kaºdý uºivatel, jak uº bylo vý²e zmín¥no, pí²e jiná slova a staví v¥tu rozdílným zp·sobem. U kaºdého slova, které jiº m¥lo n¥jaké následné slovo, si tedy budu uchovávat seznam t¥chto slov. A protoºe £etnost t¥chto následných slov, tedy po£et, kolikrát jiº toto slovo následovalo slovo p°edchozí je d·leºitá vlastnost, budeme si pamatovat i tento po£et. V budoucí predikci pak tento po£et u kaºdého následného sloví£ka bude podstatn¥ p°idávat na váze volby následného slova. Tedy £ím vy²²í £etnost dané následné slovo bude mít, tím vy²²í váhu p°i predikci dostane a tím vý²e se bude ve výsledném seznamu vyskytovat. Za druhé se jedná o znalost slovních druh·, tedy jen t¥ch, které nám n¥jakým zp·sobem mohou pomoci p°i predikci. Zde jsem vycházel zejména z poznatku, ºe £asto po slovese nenásleduje druhé sloveso, ale podstatné jméno. Pak tyto dva slovní druhy oby£ejn¥ zastávají základní skladební dvojici. Skute£ností v²ak z·stává, ºe ne vºdy tato dv¥ slova tvo°ící základní skladební dvojici stojí p°ímo za sebou. Je totiº naprosto b¥ºné,
23 ºe nap°íklad podm¥t je n¥kolikanásobný, tedy ºe se skládá z více podstatných jmen, nap°. Jarka, Luká² a Martin ... To samé platí i o slovesech, to také totiº m·ºe být ve skladební dvojici hned n¥kolikrát. Dal²í nep°íjemností pro predikci, kde chceme vyuºívat znalosti slovních druh· je skute£nost, ºe podm¥t £asto bývá nevyjád°ený, £ili pro predikci nevyuºitelný, nebo´ nejsem schopný detekovat nevyjád°ený podm¥t ve v¥t¥. I p°es v²echna tahle omezení je dobré znalost slovních druh· do predikce zahrnout. Dal²ím významným a £asto se vyskytujícím slovním druhem je p°ídavné jméno, tedy vlastnosti osob, zví°at i v¥cí. A jako takové se £asto vyskytují bu¤ p°ed a nebo za podstatným jménem. Ale to by nebyl £eský jazyk, aby i zde nem¥l své výjimky. Nap°íklad ve v¥t¥: "To se uvidí rychlý Pet°e.". Zde "to"je podstatné jméno, "uvidí"se je sloveso a "rychlý"je p°ídavné jméno. Jak je vid¥t, zde podstatné jméno neleºí u p°ídavného jména. Jsou odd¥lené slovesem. Velkou nevýhodou je, ºe slovní druhy nejsme schopni ur£it u slov jako takových, ale aº tehdy, kdyº se vyskytují ve v¥t¥. Bohuºel ani tehdy nejsme programov¥ toto schopni detekovat, proto je nutné zavést n¥jaké ozna£ení daných slov ru£n¥ do souboru. Já zvolil metodu, kdy za daným slovem, které chceme klasikovat jako nap°íklad sloveso, napí²eme jeho £íslo jako slovní druh. Tedy za slovesem "d¥lat"by následovalo £íslo 5, tedy "d¥lat5". U£ení ze souboru pak °e²í následující situace. Musí p°e£íst textový soubor po °ádcích a kaºdé slovo na °ádku separovat a uloºit do listu slov. Zde °ádek není my²leno nedokon£ená v¥ta, ale t°eba celý odstavec textu. Tato slova pak dále zpracovávat. Je tedy nutné zjistit, zda neobsahují na konci £íslo. Pokud ano, p°id¥líme danému slovu slovní druh podle £ísla uvedeného na jeho konci. Takové slovo je poté nutno zkrátit o toto £íslo a následn¥ v p·vodní podob¥ p°idat do slovníku pouºívaných slov systému. Ihned poté projedu tento seznam slov pomocí funkce na uloºení následných slov. Nyní uº by se tedy systém nau£il ve²keré vlastnosti ukládané u kaºdého slova z textového souboru. Zde bych je²t¥ zmínil moºnost vyuºití prolování, tedy kaºdý uºivatel by m¥l napsaný sv·j textový soubor a pomocí n¥ho by nau£il systém. T¥chto textových soubor· m·ºe mít kaºdý uºivatel více a kaºdý tento soubor m·ºe mít pro jiný ú£el. Nap°íklad textový soubor pro napsání emailu známým, £i textový soubor pro napsání d·leºitého dopisu na ú°ad. 3.1.
ANALÝZA
3.1.6.2
U£ení pomocí uºivatelského vstupu
U£ení pomocí uºivatelského vstupu probíhá obdobn¥ s tím rozdílem, ºe text není £ten ze souboru, ale z °ádky ovládacího prvku TextBoxu. Po dopsání v¥ty uºivatel stiskne nap°íklad klávesu Enter a celá v¥ta se separuje do jednotlivých slov, následn¥ je kaºdé slovo p°idáno do slovníku pouºívaných slov, pokud tam je²t¥ není. Pokud ve slovníku jiº existuje dané slovo, je u n¥j navý²ená £etnost pouºití a aktualizováno datum pouºití. Nakonec je seznam slov dané v¥ty je²t¥ jednou zkontrolován z d·vodu nau£ení následných slov.
24 3.2
KAPITOLA 3.
ANALÝZA A NÁVRH EENÍ
Návrh °e²ení
Jak tedy navrhnout °e²ení, které by pokrylo poºadavky cílové skupiny uºivatel·, vyuºilo znalosti existujících implementací a vhodn¥ vyuºilo programovacího jazyka C#? V jednotlivých bodech se budu snaºit p°idávat dal²í a dal²í vlastnosti a návrhy a výsledkem by m¥lo být jejich slou£ení, a tedy efektivní prediktivní systém. Na základ¥ analýzy bude projekt °e²en na platform¥ Windows s pouºitím technologie MS.NET C# 2010. 3.2.1 Skladba v¥ty
Co tedy vlastn¥ víme o skladb¥ v¥ty a co jsme schopni z toho vyuºít pro predikci textu? Je z°ejmé, ºe pokud chce jakýkoli £lov¥k sd¥lit n¥jakou informaci n¥komu druhému, je zapot°ebí vhodn¥ formulovat n¥jakou v¥tu. O kaºdé v¥t¥ m·ºeme °íci, ºe jejími základními stavebními kameny jsou slova. Samoz°ejm¥ v¥ta jako taková má i jiné vlastnosti. Nap°íklad, ºe první slovo ve v¥t¥ musí za£ínat velkým písmenem a musí kon£it £árkou, te£kou, vyk°i£níkem £i otazníkem. Tyto vlastnosti nám ale pro predikci nijak nepomohou. Dále víme, ºe kaºdé takové slovo je sloºeno z jednozna£né posloupnosti písmen. ili kaºdé slovo je v podstat¥ unikátní. Pokud jsou tedy dv¥ slova sloºená z té samé kombinace písmen, jedná se zcela logicky o slovo totoºné. Tato vlastnost je klí£ová pro predikci. M·ºeme ji vyuºít tak, ºe kdyº uºivatel za£ne psát v¥tu, za£ne zcela ur£it¥ také psát slovo. Toto slovo, které uºivatel plánuje napsat jako první ve v¥t¥, se ur£it¥ také skládá z jednozna£né kombinace písmen. Pokud tedy uºivatel napí²e první znak, je uº i na základ¥ takto malé informace moºné navrhnout ve²kerá slova, která jsou obsaºena v systémovém slovníku a za£ínají práv¥ na tento znak. Pochopiteln¥, pokud je systémový slovník objemný, nabídne nám t°eba tisíce slov za£ínajících na toto písmeno. Na druhou stranu, systém zamítne ur£it¥ v¥t²í po£et slov neza£ínajících na tento znak. Pokud uºivatel p°idá dal²í znak, seznam nabízených slov se zcela ur£it¥ n¥kolikanásobn¥ zmen²í a nabízených slov bude jiº uº²í skupinka. Takºe zde jist¥ platí, ºe £ím více znak· daný uºivatel napí²e, tím uº²í výb¥r predikovaných slov mu systém nabídne a tím více se nabízená slova budou podobat zamý²lenému slovu. Ov²em velkou nevýhodou je, ºe £ím více znak· uºivatel napí²e, tím více £asu stráví psaním celého slova £i v¥ty. P°íklad sniºování po£tu vhodných slov po napsání dal²ích znak· ukazuje tabulka 3.1. Dejme tomu, ºe nap°íklad chceme napsat slovo "pracovat"a jako slovník pouºiji £eský slovník £ítající 793760. Jak je vid¥t na p°edchozím p°íkladu, opravdu po napsání kaºdého znaku dochází významn¥ k omezení nabízeného seznamu.
3.2.
NÁVRH EENÍ
25
Po£áte£ní znaky Po£et navrhovaných slov
p 127861 pr 27453 pra 2014 prac 177 praco 109 pracov 109 pracova 7 pracovat 1 Tabulka 3.1: Po£et slov za£ínajících na po£áte£ní text. 3.2.2 etnost výskytu slov
Pokud chceme predikovat slova £i £ásti v¥t lépe, bude zapot°ebí k p°edchozí vlastnosti dodat dal²í poznatek a vhodn¥ jej vyuºít. Nyní nebudeme p°emý²let pouze o skladb¥ v¥ty, ale budeme hledat vyuºitelnou vlastnost u uºivatele, tedy u osoby, která pí²e daný text. Kaºdý £lov¥k jako takový je, jak jsem jiº psal vý²e, jedine£ný. A jako takový bude pouºívat svoji slovní zásobu, a tedy celkový výstup kaºdého uºivatele bude zna£n¥ odli²ný. N¥kdo má slovní zásobu roz²í°en¥j²í, a bude tedy pouºívat ²ir²í rozsah sloví£ek, naopak n¥kdo jiný má slovní zásobu men²í, a tudíº celkový po£et rozdílných slov bude ve výsledném textu men²í. Zde obecn¥ platí, ºe uºivateli, který pí²e jednodu²²í text skládající se z men²ího po£tu rozdílných slov, bude predikce více nápomocna. Uºivateli, který pouºívá spoustu rozdílných sloví£ek bude, pot°ebovat systém nau£it více termín·, které v základním slovníku zatím nejsou obsaºeny. Dal²í vlastností, pro£ uºivateli, který pouºívá mén¥ rozdílných sloví£ek, bude prediktivní systém lépe napovídat, je napsaný vy²²í po£et opakujících se slov. Jeho slovní zásoba je men²í, £ili bude n¥která sloví£ka £ast¥ji opakovat. Pokud bychom ²li do extrému, mohli bychom si danou situaci p°edstavit na p°íkladu jedné v¥ty: Uºivatel s malou slovní zásobou: Dnes je hezké po£así. • Dnes je krásné po£así. • Dneska je krásné po£así. •
Uºivatel s velkou slovní zásobou:
26
KAPITOLA 3.
ANALÝZA A NÁVRH EENÍ
Dnes je hezké po£así. • Dneska je krásné po£así£ko. • Dne²ní den je úºasné teplo. • atd. Jak vidíme na tomto triviálním p°íkladu, uºivatel s malou slovní zásobou £asto opakuje stejná slova. Jak tohoto vhodn¥ vyuºít? Pamatovat si u kaºdého slova jeho po£et pouºití (v ideálním p°ípad¥ za daný £as) a tuto vlastnost zkombinovat s vlastností p°edchozí. Potom se tato £ast¥ji vyskytující se slova up°ednostní v nabízeném seznamu. Zde bych v²ak zd·raznil, ºe se tato £asto se opakující slova váºí k danému uºivateli, proto by m¥l kaºdý uºivatel nau£it systém práv¥ sv·j slovník. Nebo´ jinému uºivateli by tahle £etnost £asto se vyskytujícího slova mohla v predikci spí²e u²kodit neº pomoci. Na dal²ím p°íkladu ukáºu význam uchovávání celkové £etnosti pouºití kaºdého slova. P°edpokládejme, ºe uºivatel napí²e del²í text, kterým nau£í slovník pouºívaných slov daného systému. Systém si kaºdé doposud nenau£ené slovo uloºí do svého slovníku pouºívaných slov a navý²í vºdy jeho £etnost p°i kaºdém dal²ím výskytu daného slova. Pokud slovník dané slovo jiº obsahoval, dojde pouze k navý²ení jeho £etnosti pouºití. Tohoto je poté vyuºito ke kvalitn¥j²í predikci, jak uvádí následující p°íklad: V¥ty, ze kterých se nau£í slovník pouºívaných slov: • Text ozna£uje jakékoliv uskupení slov, které dohromady tvo°í n¥jakou výpov¥¤. • Vet²inou ale bývá jako text ozna£ován n¥jaký del²í oddíl nebo odstavec. • Slovo text se pouºívá pro psané výpov¥di. • Knihy jsou ozna£ovány jako um¥lecké texty, novinové £lánky jako publicistické texty. • V informatice se jedná o odborný technický pojem, kterým je ozna£en zvlá²tní datový typ nebo datový formát. Jak je na první pohled z°ejmé, slovo "text"je zde obsaºeno velice £asto, proto m·ºeme p°edpokládat, ºe u toho slova bude vysoká £etnost výskytu. Jaký seznam nabízených slov by systém m¥l nabídnout, kdyº uºivatel za£ne psát slovo, za£ínající písmenem "t", ukazuje následující výpis: • text s £etností výskytu 3 • texty s £etností výskytu 2 •
3.2.
NÁVRH EENÍ
27
typ s £etností výskytu 1 • technický s £etností výskytu 1 • tvo°í s £etností výskytu 1 Je vid¥t, ºe slova nejsou abecedn¥ se°azena a ºe se tedy jiº ne°ídí podle abecedního se°azení, ale vyuºívá se zde práv¥ £etnosti výskytu daných slov. Pochopiteln¥ se°azení seznamu nabízených slov je mín¥no od shora dol· pro nejvhodn¥j²í kandidáty. •
3.2.3 Aktuáln¥ psané téma
V p°edchozích bodech jsme se zabývali vlastnostmi, které se projevují dlouhodob¥, neboli neodráºejí aktuální stav uºivatele, jeho nálady a jeho proºitky. Byly to vlastnosti, u nichº nehraje £as ºádnou roli. Abecední °azení a celková £etnost pouºití sou£asn¥ pracují jiº uspokojiv¥, ale pokud bychom cht¥li do predikce slov £i £ástí v¥t promítnou aktuální náladu daného uºivatele, bylo by zapot°ebí brát z°etel na £asové údaje, tedy kdy dané slovo uºivatel napsal. Dejme tomu, ºe ten samý uºivatel psal jednu dobu text daného typu, ale za n¥jaký £as, krat²í £i del²í £asový okamºik, zm¥nil téma psaní. ili slova, která m¥la d°íve vysokou váhu, nyní na své váze ztrácejí a do pop°edí se dostávají slova aktuálního tématu. Jak této vlastnosti vyuºít a jak ji navrhnout? Ur£it¥ si u kaºdého slova budeme pamatovat poslední £asový okamºik p°idání do slovníku. Dále navrhnu dva £asové intervaly, jeden krat²í a jeden del²í. Pokud by se jednalo o b¥ºného uºivatele, který pí²e text £asto, °ekn¥me denn¥, byly by tyto intervaly mnohem krat²í, neºli u na²í cílové skupiny uºivatel·. Nap°íklad bych navrhoval £as pro b¥ºné uºivatele pro krat²í £asový interval jeden den a pro del²í interval dobu jednoho týdne. U na²í cílové skupiny, která pí²e mnohem mén¥ textu a mnohem mén¥ £ast¥ji, navrhuji krat²í £asový interval na dobu jednoho týdne a del²í £asový interval na dobu jednoho m¥síce. Dále je pot°eba navrhnout, jak vhodn¥ u kaºdého slova kontrolovat, kolikrát bylo za krat²í a del²í £asový interval dané slovo pouºito. Návrh zamý²lím tak, ºe u kaºdého slova si zavedu seznam (frontu) do které vºdy p°i novém pouºití slova vloºím £asovou známku a p°ed pouºitím této informace zkontroluji, zda se £asové zna£ky v této front¥ vejdou do krat²ího týdenního £asového intervalu. Pokud ano, spo£ítám po£et poloºek a dostanu £etnost pouºití za týden. Pokud se data ve front¥ nevejdou do týdenního intervalu, pak data z fronty odstraním a op¥t spo£ítám £etnost pouºití. To stejné ud¥lám i pro del²í £asový interval, tedy m¥síc. Nyní tedy znám £etnosti výskytu daného slova za krat²í a del²í £asový interval. Jak toho vyuºít k dokonalej²í predikci? Je zapot°ebí op¥t vhodn¥ zkombinovat tuto vlastnost a p°edchozí vlastnosti a vypo£ítat tak v závislosti na t¥chto datech váhu kaºdého slova.
28 Obecn¥ p·jde o to, dát slov·m psaných v krat²ím £asovém intervalu vy²²í váhu a to v závislosti na jeho £etnosti v tomto intervalu. Ihned poté up°ednost¬ovat slova v intervalu del²ím a op¥t brát v úvahu £etnost výskyt· v tomto intervalu. KAPITOLA 3.
ANALÝZA A NÁVRH EENÍ
3.2.4 Následná slova
Dal²í silnou vlastností p°i tvorb¥ v¥t, které se dá s výhodou vyuºít, je následnost slov. N¥která slova jsou velice £asto následovaná jinými slovy. Co se zaºitých frází tý£e, je tato vlastnost patrná nejvíce, nebo´ tyto v¥ty jsou nem¥nné, a tudíº pokaºdé, kdyº se je £lov¥k chystá psát, dop°edu ví jaká slovo budou následovat za práv¥ psaným slovem, aniº by nad tím hloub¥ji uvaºoval. Toto se d¥je nejen u £asto se opakujících frází, ale i u jakékoli v¥ty týkající se b¥ºného ºivota. Op¥t zde bude platit, ºe £ím men²í je uºivatelova slovní zásoba, tím tato vlastnost bude uºite£n¥j²í v predikci následného slova £i £ásti v¥t. ím má totiº £lov¥k men²í slovní zásobu, tím obecn¥ napí²e mén¥ v¥t a tím je v¥t²í ²ance, ºe za práv¥ psaným slovem bude následovat ur£ité slovo. U osob, které mají velkou slovní zásobu, je tato vlastnost zase omezen¥j²í, nebo´ za práv¥ psaným slovem m·ºe následovat v¥t²í po£et rozdílných slov. T¥chto poznatk· je t°eba vyuºít a navrhnout dob°e pracující pravidlo, které poslouºí k dokonalej²í predikci. Protoºe je moºné a dokonce i £asté, ºe za kaºdým slovem bude následovat více neºli práv¥ jedno následné slovo, budu si u kaºdého p°edchozího slova uchovávat celý seznam následných slov. Tato slova je pot°eba n¥jakým vhodným zp·sobem °adit a up°ednost¬ovat. Nejvhodn¥j²ím °e²ením se nabízí jejich £etnost výskyt· za daným p°edchozím slovem. Podle této £etnosti poté budu up°ednost¬ovat výb¥r nejvhodn¥j²ího následného slova, které nabídnu uºivateli k výb¥ru. Co se tý£e celkové váhy, navrhuji této vlastnosti následných slov p°isoudit vysokou d·leºitost. Tak vysokou, ºe p°ed£í p°edchozí vlastnosti a bude mít tedy nejvýznamn¥j²í postavení. K funkci, která bude vypo£ítávat váhu kaºdého slova do nabízeného seznamu predikovaných slov, bude podle vý²e £etnosti výskytu následného slova slova p°edchozího p°ipo£ítávat vysoký koecient násobený £etností daného následného slova. Bude tedy platit, ºe pokud jiº napsané slovo, tedy slovo p°edchozí, bude obsahovat n¥jaký neprázdný seznam následných slov, bude tento seznam následných slov významn¥ ovliv¬ovat nabízený seznam predikovaných slov. Na následujícím p°íkladu ukáºi, jak by daná v¥c m¥la pracovat. Dejme tomu, ºe systém nau£íme n¥kolik v¥t, u kterých si budu pamatovat ve²keré p°ede²lé vlastnosti v£etn¥ seznamu následných slov. Pro jednoduchost p°edpokládejme ty samé v¥ty, jako byly uvedeny v p°íkladu minulém: • Text ozna£uje jakékoliv uskupení slov, které dohromady tvo°í n¥jakou výpov¥¤.
3.2.
NÁVRH EENÍ
29
Vet²inou ale bývá jako text ozna£ován n¥jaký del²í oddíl nebo odstavec. • Slovo text se pouºívá pro psané výpov¥di. • Knihy jsou ozna£ovány jako um¥lecké texty, novinové £lánky jako publicistické texty. • V informatice se jedná o odborný technický pojem, kterým je ozna£en zvlá²tní datový typ nebo datový formát. Po nau£ení by si systém m¥l pamatovat u kaºdého slova, které je následované slovem jiným, toto následné slovo nebo seznam takovýchto následných slov. Efektivita by pak m¥la být znát a to následovn¥. P°edpokládejme, ºe n¥kdy v budoucnu budeme chtít op¥t napsat t°etí v¥tu z výpisu uvedeného nad tímto odstavcem, tedy v¥tu "Slovo text se pouºívá pro psané výpov¥di.". Pro tuto v¥tu by mi m¥l systém výrazn¥ pomoci p°i op¥tovném napsání jiº jednou psané v¥ty. Pro napsání této v¥ty by mi m¥lo sta£it napsat pouze text "sl"a nyní jenom pomocí výb¥ru z nabízených slov a to vºdy první, tedy nejvíce pravd¥podobné slovo. Doplním tedy slovo "slovo", které by m¥lo být nejvý²e v nabízeném seznamu. Nyní nám systém automaticky nabízí následující slova a hned první by m¥lo být slovo "text", po jeho vybrání by m¥l systém nabízet slovo "se"a tak dále aº do konce v¥ty. U posledního slova "výpov¥di"by systém nem¥l mít uvedeno ºádné následující slovo, nebo´ za tímto slovem v¥ta kon£í, a pokud bychom mu jako jeho následné slovo uloºili první slovo z v¥ty následující, byla by to chyba. Dále je t°eba vy°e²it, jakým zp·sobem omezovat tuto váhu v p°ípadech, kdy jsme jiº dokon£ili psané slovo a nyní za£ínáme psát slovo dal²í. S kaºdým novým písmenkem bych m¥l váhu následných slov daného slova p°edchozího omezovat. Toto provedu tak, ºe pokud nové slovo má jeden znak, pak váhu vyd¥lím po£tem 1 + délka napsaného nového slova. •
3.2.5 Slovní druhy
Jak jsem jiº psal vý²e, kaºdá v¥ta se skládá z jednotlivých slov. U t¥chto slov m·ºeme sledovat nejen jejich sd¥lovací význam, ale i jiný význam. Lingvistika d¥lí slova do tzv. slovních druh·. V rozli²ení jednotlivých slovních druh· hrají úlohu r·zné faktory jako jsou: jakým zp·sobem se slovo zapojuje do v¥ty, jaké tvary tvo°í a jaké mluvnické kategorie u n¥j lze vysledovat, atd. V £e²tin¥ rozli²ujeme následujících 10 slovních druh·: 1. podstatná jména (substantiva)
30
KAPITOLA 3.
ANALÝZA A NÁVRH EENÍ
2. p°ídavná jména (adjektiva) 3. zájmena (pronomina) 4. £íslovky (numeralia) 5. slovesa (verba) 6. p°íslovce (adverbia) 7. p°edloºky (prepozice) 8. spojky (konjunkce) 9. £ástice (partikule) 10. citoslovce (interjekce) Slova, která jsou obsaºena v prvních p¥ti druzích jsou v¥t²inou ohebná, to znamená, ºe tato slova se nechají sklo¬ovat nebo £asovat, a to bu¤ podle vzor· a nebo jako nepravidelná. Slova zbývajících slovních druh· jsou v¥t²inou neohebná. Jak ale vyuºít vý²e zmín¥ných slovních druh· ke zdokonalení predikce? P°edpokládejme, ºe bereme v úvahu jenom slovní druhy jako jsou podstatná jména, p°ídavná jména a slovesa a ºe kaºdá v¥ta obsahuje práv¥ jedno slovo daného slovního druhu. Toto nap°íklad spl¬uje jednoduchá v¥ta: "Dnes je krásné po£así."Kde slovo "je"je sloveso, slovo "krásné"je p°ídavné jméno a slovo "po£así"je podstatné jméno. U takto triviálních v¥t je z°ejmé, ºe by se dalo ze znalosti slovních druh· zdokonalit predikci zp·sobem zji²´ování výskytu kaºdého ze slovních druh·. Pokud tedy bylo napsáno sloveso, tak u ostatních sloves potla£ím jejich váhu a naopak up°ednost¬uji podstatná jména a p°ídavná jména. Pokud jsme napsali jiº sloveso i podstatné jméno, jako je tomu v této £ásti v¥ty: "Dnes je krásné ", pak se dá s vysokou pravd¥podobností o£ekávat podstatné jméno. Bohuºel toto platí pro triviální v¥ty, ve spoust¥ ostatních v¥t to takto neplatí. Nap°íklad m·ºeme mít za sebou hned n¥kolik sloves, respektive n¥kolik slov tvo°ících jedno sloveso, nap°íklad: "byl bych mluvil", "bude trvat", atd. Obdobn¥ toto platí i u podstatných jmen, nap°íklad: "Jirka, Petr a Luká² ... "a p°ídavných jmen, nap°íklad: "krásný, kulatý ...". Tuto vlastnost op¥t budu vyuºívat vhodn¥ s kombinací s p°edchozími vlastnostmi.
3.2.
NÁVRH EENÍ
3.2.6 Zabarvení v¥ty
31
Kaºdá v¥ta, kdyº si ji £lov¥k p°e£te, podává jak n¥jakou sd¥lovací informaci, tak ur£ité zabarvení. Z kaºdé v¥ty se dá p°ibliºn¥ vycítit a poznat, jakou náladu její autor m¥l ve chvíli, kdy danou v¥tu psal. Pro jednoduchost uvaºujme zabarvenost v¥ty p°eváºn¥ kladná, p°eváºn¥ záporná £i p°eváºn¥ neutrální. Tato informace o zabarvení v¥ty vychází ze slov, ze kterých je v¥ta sloºena a nebo z kombinace n¥kterých slov. Ur£itá slova jsou p°eváºn¥ bu¤ neutrální, výlu£n¥ kladná a nebo výlu£n¥ záporná. Následující p°íklad ukazuje, jak by mohla vypadat klasikace n¥kterých slov (p°ídavná jména): • krásný, p¥kný (klasikace 1, p°eváºn¥ kladná) • ²karedý, o²klivý (klasikace -1, p°eváºn¥ záporná) • lidský, normální (klasikace 0, p°eváºn¥ neutrální) U slov, která nepodávají ºádnou informaci, ani nejsou nikterak zabarvená, se klasikace nastaví jako neklasikovaná a doplní se znaménkem "-". Toto zde udávám v zásad¥ proto, protoºe kaºdé slovo musí být n¥jak klasikováno. Pokud nejsme schopni klasikaci ur£it, pak slovu vloºíme tuto klasikaci. Jak této klasikace zabarvenosti slov vhodn¥ vyuºít k dokonalej²í predikci? Nejprve je t°eba si uv¥domit, jak autor smý²lející negativn¥ £i pozitivn¥ pí²e daný text a jaká slova u toho pouºívá. Protoºe i autor smý²lející p°eváºn¥ negativn¥ m·ºe v celém odstavci napsat jednu v¥tu s p°eváºn¥ kladným zabarvením. Pro£ to pí²i? Nebo´ z tohoto je z°ejmé, ºe co se tý£e zabarvenosti textu, nem·ºeme smý²let o celém odstavci £i dokonce celém textu, ale musíme se soust°edit a omezit pouze na jednotlivé v¥ty. Kaºdou v¥tu pak m·ºeme klasikovat jako p°eváºn¥ kladnou, zápornou £i neutrální podle toho, z jak zabarvených slov se daná v¥ta skládá. Následující p°íklad ukazuje typické kandidáty zabarvených v¥t a jejich p°íslu²né skupiny: • Dnes je krásné po£así a sluní£ko h°ejiv¥ svítí. (kladné zabarvení obou v¥t) • V£era bylo ²kared¥ zataºeno a sychravo. (záporné zabarvení v¥ty) • Dnes jsem byl nakupovat v nákupním st°edisku. (neutrální zabarvení) Na tomto míst¥ je t°eba poznamenat, ºe nap°íklad t°etí v¥ta, tedy v¥ta "Dnes jsem byl nakupovat v nákupním st°edisku."m·ºe být zabarvená pro n¥koho pozitivn¥ a pro n¥koho negativn¥ a to podle slova "nakupovat". Nebo´ n¥kdo nemá rád nakupování, na druhou stranu n¥kdo si bez nakupování nedovede p°edstavit ºivot. Obdobn¥ by jsme mohli smý²let i o dvou p°edcházejících v¥tách, nebo´ kaºdý máme rádi jiné po£así. Obecn¥ kaºdý £lov¥k je originální a má rád jiné záliby. Co z toho plyne? Pokud bychom
32 tedy cht¥li nejvhodn¥ji vyuºít této vlastnosti zabarvení jednotlivých slov, museli bychom nechat kaºdého uºivatele tohoto systému provést svoji vlastní klasikaci svého nebo cizího textu. Pro na²e ú£ely v²ak bude posta£ovat obecný náhled. Pro dokonalej²í predikci budu tedy p°i zapo£etí psaní kaºdé v¥ty zohled¬ovat jiº napsaná slova. U t¥chto slov budu sledovat jejich zabarvení a tedy zji²´ovat, zda je v¥ta spí²e zabarvená kladn¥, záporn¥ £i neutráln¥. V nabídce predikovaných slov pak za£nu up°ednost¬ovat slova zabarvená stejn¥ jako je zabarvení dané v¥ty. Po napsání kaºdé v¥ty toto váhování op¥t nuluji a za£ínám s dal²í v¥tou nanovo. KAPITOLA 3.
ANALÝZA A NÁVRH EENÍ
3.2.7 Predikce frází £i £ástí v¥t
Pro zkvalitn¥ní predikce lze vyuºít vedle predikce jednotlivých slov i predikci frází £i £ástí v¥t. Jakou vlastnost v²ak vyuºít pro predikci frází £i £ástí v¥t? Nejd·leºit¥j²í je op¥t si uv¥domit, z £eho se kaºdá fráze £i v¥ta, a´ uº pouze její £ást a nebo celá v¥ta, skládá. Jak jsem psal jiº vý²e, kaºdá v¥ta se skládá z posloupnosti jednotlivých slov. S výhodou lze vyuºít posloupnost dvou £i více jiº napsaných slov k predikci dané fráze £i v¥ty. Pokud daná fráze £i v¥ta totiº za£íná na tuto posloupnost, m·ºeme danou frází £i v¥tu predikovat a nabídnout tak k výb¥ru. Pokud ov²em fráze £i v¥ta neza£íná na tuto posloupnost jiº napsaných slov, ale t°eba tato slova obsahuje, bude pot°eba toto vzít v úvahu. U takových p°ípad· bude vhodné si stanovit jakousi vzdálenost jiº napsaných slov od slov stejných, ur£itým zp·sobem zp°eházených £i rozmíst¥ných ve v¥t¥. Podle této vzdálenosti pak danou v¥tu nebo n¥kolik v¥t up°ednostnit v predik£ní nabídce. Jak po£ítat vzdálenost napsaných slov a stejných slov obsaºených ve v¥t¥? Následující ukázka toto vysv¥tlí nejlépe: P°edpokládejme, ºe jiº napsaná slova jsou následující: "dnes je". Následuje seznam jiº uloºených v¥t v systému. 1. Je mi teplo a p°íjemn¥. 2. Hezké po£así dnes je. 3. Je hezké po£así. 4. V£era bylo krásn¥. 5. Dnes je hezky. 6. Jak se dnes máte?
33 Nyní je t°eba u t¥chto v¥t po dopsání druhého slova spo£ítat jisté vzdálenosti, podle kterých v¥ty se°adíme a nabídneme, nebo dokonce n¥které v·bec nenabídneme. Kaºdá v¥ta je uloºena v systému v seznamu jako posloupnost slov. ili nebudu ukládat v¥ty jako celek, ale jako mnoºinu slov, samoz°ejm¥ v tom po°adí, jak zn¥la originální v¥ta. Na tomto po°adí bude velice záleºet p°i po£ítání vzdálenosti. Vzdálenost budu po£ítat tak, ºe kaºdé slovo v dané v¥t¥ ohodnotím £íslem, které bude ur£ovat jeho pozici ve v¥t¥. U jednopísmenných slov budu toto po°adí zanedbávat. Nap°íklad si vezm¥me první v¥tu v p°edchozím vý£tu v¥t, tedy: "Je mi teplo a p°íjemn¥.". Tato v¥ta bude v systému vypadat následovn¥: "je", "mi", "teplo", "a", "p°íjemn¥". Nyní t¥mto slov·m p°i°adím hodnoty jejich po°adí ve v¥t¥, jak ukazuje následující tabulka 3.2. 3.2.
NÁVRH EENÍ
Slovo ve v¥t¥ Pozice slova ve v¥t¥
je 1 mi 2 teplo 3 p°íjemn¥ 4 Tabulka 3.2: Po°adí slov ve v¥t¥, p°íklad 1. Jak jiº jsem psal vý²e, jednopísmenná slova ignorujeme v ohodnocení slov jejich po°adím ve v¥t¥. Nyní m·ºeme za£ít s výpo£tem vzdálenosti jiº napsaných slov a slov ve v¥t¥. Podívám se na první slovo napsané uºivatelem. Toto slovo je "dnes", nyní se podívám do této v¥ty, se kterou práv¥ po£ítám vzdálenost a zjistím, ºe toto slovo zde v·bec není obsaºeno. ili ke vzdálenosti p°i£tu 5, nebo´ kdyº slovo není ve v¥t¥ v·bec obsaºeno, penalizace je vysoká. Nyní má tedy vzdálenost hodnotu 5. Podívám se tedy na druhé slovo napsané uºivatelem, toto slovo zní "je". Podívám se do v¥ty a zjistím, ºe toto slovo má p°i°azenou hodnotu 1, je tedy ve v¥t¥ napsáno jako první. Vypo£tu jejich vzdálenost, tedy abs(po°adí na °ádku - po°adí ve v¥t¥), tj. 2 - 1 = 1 a tuto vzdálenost p°i£tu k celkové vzdálenosti, tedy 5 + 1 = 6. To je velká vzdálenost. Tato v¥ta ur£it¥ nebude nejlep²í volba. Pro jinou v¥tu by vzdálenost mohla vyjít niº²í. Zkusím druhý p°íklad a vezmu v¥tu £íslo 5, tedy v¥tu: "Dnes je hezky.". Následuje tabulka 3.3 po°adí slov ve v¥t¥. Nyní spo£tu vzdálenost. Op¥t máme napsáno: "dnes je". Vezmu tedy první slovo napsané uºivatelem a hledám jej ve v¥t¥. Zjistím nejlep²í moºnou variantu a to, ºe na °ádku napsaného uºivatelem má slovo "dnes"po°adí stejné jako v tabulce vý²e, tudíº je jejich vzdálenost 1 - 1 = 0. Tuto nulovou vzdálenost p°i£tu k iniciální nulové vzdálenosti a máme celkovou vzdálenost 0. Nyní vezmu druhé slovo na °ádku, coº je slovo "je", a op¥t zjistím, ºe jejich vzdálenosti jsou stejné. Celková vzdálenost tedy vyjde rovna 0.
34
KAPITOLA 3.
ANALÝZA A NÁVRH EENÍ
Slovo ve v¥t¥ Po°adí slova ve v¥t¥
dnes 1 je 2 hezky 3 Tabulka 3.3: Po°adí slov ve v¥t¥, p°íklad 2. Tato v¥ta je tedy výborným kandidátem pro predikci. Pokud by vzdálenost vy²la u více v¥t shodn¥, predikoval bych tyto v¥ty v po°adí od nejdel²ích k nejkrat²ím. Uºivateli totiº chceme nabídnout co moºná nej²ir²í predikci a tím mu co nejvíce zkrátit nutnost psaní. Tabulka 3.4 ukazuje výpo£et ostatních vzdáleností a rovnou je se°azuje od nejlep²ích kandidát· k nejhor²ím. V¥ty v systému
Vzdálenosti
Dnes je hezky. 0 Hezké po£así dnes je. 4 Je mi teplo a p°íjemn¥. 6 Je hezké po£así. 6 Jak se dnes máte? 7 V£era bylo krásn¥. 10 Tabulka 3.4: Vypo£tené vzdálenosti slov napsané uºivatelem a v¥t v systému. Jak je vid¥t na první pohled, tento systém výpo£tu vzdálenosti b¥ºí docela dob°e. Otázkou je, jeli v²ak vzdálenost dosta£ující. Jak £asto se stává, ºe £lov¥k napí²e totoºnou v¥tu vícekrát? Totoºnou ve smyslu stejného uspo°ádání slov v této v¥t¥. Mockrát z°ejm¥ ne, ale co se stává £ast¥ji, je výb¥r stejné v¥ty s predik£n¥ nabízeného seznamu frází £i v¥t. Tudíº navrhuji ukládat si u takto vybraných v¥t £etnost jejich pouºití a tuto £etnost zohled¬ovat p°i výpo£tu výsledné váhy. Zde je pot°eba si dát pozor na skute£nost, ºe vy²²í £etnost by m¥la up°ednost¬ovat v¥tu v nabídce. Av²ak vy²²í vzdálenost by m¥la sniºovat up°ednostn¥ní v nabídce. 3.2.8 Interpretované zkratky do v¥t
N¥kte°í uºivatelé mohou vyuºít také moºnosti rozvití zkratky do v¥ty, kterou tato zkratka interpretuje. Je to dal²í vlastnost, která se m·ºe vyuºít pro zrychlení a usnadn¥ní psaní textu. Toto by se nechalo navrhnout jako tabulka, která obsahuje jak zkratku, tak v¥tu, kterou daná zkratka reprezentuje. Nap°íklad jak ukazuje tabulka 3.5.
3.2.
35
NÁVRH EENÍ
Zkratka v¥ty V¥ta
msf Mám se fajn. djhp Dnes je hezké po£así. jmt Je mi teplo. mº Mám ºíze¬. Tabulka 3.5: Ukázka moºnosti vyuºití zkratek a v¥t, které tyto zkratky interpretují. Tyto zkratky by se nechaly bezprost°edn¥ po jejich napsání daným uºivatelem, rozloºit na celou v¥tu po stisku klávesy Enter a vloºily by se automaticky na výstup. Pro vysokou efektivitu by bylo t°eba navrhnout vhodné v¥ty, které by si systém uloºil, a dále by bylo t°eba, aby se s t¥mito v¥tami a jejich zkratkami uºivatel seznámil. 3.2.9 Uloºení dat pro trvalé pouºití
Vý²e jsem popsal, co v²e by bylo t°eba si uchovávat za informace u kaºdého slova. Nejen informace o slovech je t°eba si uchovávat, ale je t°eba si pamatovat pochopiteln¥ i samotná slova a dále pak i celé v¥ty pro predikci frází £i £ástí v¥t. Jakým zp·sobem si uchovávat tyto informace? Jaký zp·sob je nejvhodn¥j²í pro mé ú£ely? Jako nejvhodn¥j²í jsem zvolil ukládání ve²kerých informací do XML souboru. Hlavními výhodami tohoto °e²ení je, ºe to je obecné, jednoduché a £itelné. Pokud by tedy bylo zapot°ebí n¥kdy tyto soubory s t¥mito informacemi p°e£íst nap°íklad z jiné aplikace, nem¥l by to být v·bec problém. Nevýhody jsou pak nap°íklad v jeho v¥t²í velikosti, ale pro mé ú£ely je toto zanedbatelné. Nebo´ se nejedná o velkou aplikaci, která bude vyuºívat slovníky o sta tisících sloví£ek, ale naopak vyuºívá jen n¥která základní slova £asto pouºívaná daným uºivatelem. Následující p°íklad ukazuje, jakým stylem ukládám data slov do XML souboru: <slovnikPouzivanychSlovAVet> <SlovoZname> <docasnaVaha>0
1 ozna£uje 1 ozna£ován 1 se
36
KAPITOLA 3.
ANALÝZA A NÁVRH EENÍ
2 <Slovo>text <SlovniDruh>podstatne_jmeno
neklasifikovano 2011-05-01 19.51.41 <SumOfUse>4 <listCasyPouzitiKratsi>
2011-04-29T23:28:55.6194298+02:00 2011-04-29T23:28:55.6234301+02:00 2011-04-29T23:28:55.6234301+02:00 2011-05-01T19:51:41.4644066+02:00 <listCasyPouzitiDelsi>
2011-04-29T23:28:55.6204299+02:00 2011-04-29T23:28:55.6234301+02:00 2011-04-29T23:28:55.6234301+02:00 2011-05-01T19:51:41.4644066+02:00
Nebudu v²ak ukládat pouze data jednotlivých slov, ale i fráze £i v¥ty. Tyto v¥ty budu ukládat do druhého textového souboru. V¥ty budu ukládat jako posloupnost £ísel. Tato £ísla jsou odkazy na atribut "ident"kaºdého slova. Následuje p°íklad uloºené jedné v¥ty v XML souboru:
2 33 34 35 35 5 22
3.2.10 Proly uºivatel·
S ukládáním dat úzce souvisí prol. Systém je tvo°en tak, aby si u kaºdého uºivatele pamatoval práv¥ jeho data. Jak jiº jsem se zmínil vý²e, kaºdý uºivatel disponuje odli²nou
37 slovní zásobou a zp·sobem psaní v¥t. Proto nau£ená data jedním uºivatelem by z°ejm¥ byla spí²e na obtíº druhému uºivateli. Jak jsem se zmínil vý²e, u kaºdého prolu budu ukládat práv¥ dva XML soubory. Jeden pro nau£ená slova a druhý pro nau£ené v¥ty. Nejlépe tyto soubory odli²ím tak, ºe pro kaºdý prol vytvo°ím sloºku a tyto soubory uloºím do této sloºky daného prolu. Mezi t¥mito proly bude moºné p°epínat. Prol m·ºe rovn¥º p°edstavovat typ psaného textu (váºný, kamarád, technický, ...). 3.2.
NÁVRH EENÍ
3.2.11 Vstupy a výstupy
Výstupem této diplomová práce má tedy být knihovna nebo programový modul, který sám o sob¥ nemá ºádné GUI ( ), ale jedná se o funk£ní komponentu, které se p°edloºí n¥jaký vstup, a ona na základ¥ daného vstupu poskytne ur£itý výstup. Co tedy bude vstupem a co výstupem této aplikace? Uºivatelským vstupem bude samoz°ejm¥ text, na jehoº základ¥ se bude daný výstup predikovat. Obecn¥ m·ºeme °íci, ºe £ím del²í vstupní text bude, tím kvalitn¥j²í výstup bude aplikace schopná predikovat. Nebo´ nevyuºije jen prvních pár znak· prvního slova, ale vyuºije jiº práv¥ n¥jakou posloupnost slov pro predikci nejenom dal²ího slova £i práv¥ psaného slova, ale i frází £i £ástí v¥t. Vstupem tedy bude soubor znak· a písmen, který aplikaci vloºí uºivatel. Dal²ím vstupem mohou být akce, které bude uºivatel schopný vykonat s aplikací. Bude se jednat o akce, které popisuje následující tabulka 3.6. Dále pak bude mít samotná aplikace n¥jaké moºnosti práce se slovníkem a prediktivní logikou. Tyto moºnosti popisuje následující tabulka 3.7. Nyní tedy známe vstupy. Co se výstup· tý£e, bude se jednat jednozna£n¥ o predikci textu. Respektive o seznam následných slov £i seznam dopln¥ní práv¥ psaných slov. Jelikoº aplikace bude schopná navrhovat nejen slova, ale i fráze £i £ásti v¥t, bude druhým výstupem práv¥ seznam t¥chto v¥t. Graphical User Interface
3.2.12 Návrh GUI
Co se tý£e návrhu GUI ( ), vyuºil jsem znalosti, ºe spoust¥ hendikepovaným lidem, kte°í nejsou schopni psát v²emi deseti, nevyhovuje klasické uspo°ádání klávesnice, ale spí²e preferují se°azení znak· podle abecedy. Do tohoto návrhu jsem vloºil pouze znaky pot°ebné k napsání jednoduchých v¥t s moºností pouºití £íslic. Dal²í tla£ítka jsou pak ty, která ovládají systém. Znaky jako je te£ka £i £árka zde neuvaºuji. Návrh uºivatelského rozhraní by tedy mohl znázor¬ovat následující obrázek 3.1. Graphical User Interface
38 Akce
KAPITOLA 3.
Popis akce
ANALÝZA A NÁVRH EENÍ
Název akce
Ukon£ení v¥ty Ukon£ení kaºdé v¥ty a p°edloºení této v¥ty KonecVety systému pro nau£ení. Mazání znaku Maºe vstup od uºivatele po jednom znaku. SmazJedenZnak Mazání slova Maºe vstup od uºivatele po jednotlivých SmazPosledniSlovo slovech. Mazání celého Maºe celý vstup od uºivatele. SmazCelouVetu vstupu Posun dol· v Posun v nabídce predikovaných slov o JdiNaDalsiSlovo nabídce slov jednu poloºku níºe. Posun nahoru v Posun v nabídce predikovaných slov o JdiNaPredchoziSlovo nabídce slov jednu poloºku vý²e. Výb¥r Výb¥r slova z nabídky predikovaných slov. VyberSlovo nabízeného slova Posun dol· v Posun v nabídce predikovaných frází £i JdiNaDalsiVetu nabídce v¥t £ástí v¥t o jednu poloºku níºe. Posun nahoru v Posun v nabídce predikovaných frází £i JdiNaPredchoziVetu nabídce v¥t £ástí v¥t o jednu poloºku vý²e. Výb¥r nabízené Výb¥r fráze £i £ásti v¥ty z nabídky VyberVetu v¥ty predikovaných frází £i £ástí v¥t. Tabulka 3.6: P°ehled a popis akcí, které systém zpracovává od uºivatele. Tla£ítko "Enter"slouºí pro ukon£ení a odeslání dopsané v¥ty na výstupní za°ízení. "Backspace"slouºí pro mazání jednotlivých znak· sm¥rem zprava doleva. "Smaº slovo"smaºe poslední rozepsané £i jiº dopsané slovo. "Smaº v¥tu"smaºe celou v¥tu na vstupu. Tla£ítka "Dal²í slovo"a "P°edchozí slovo"slouºí k výb¥ru slova v predikované nabídce slov. "Vyber slovo"slouºí pro výb¥r daného slova. Obdobn¥ to platí pro v¥ty. Mezerníkem pak vkládá uºivatel mezeru.
3.2.
39
NÁVRH EENÍ
Akce
U£it se U£it se ze souboru Resetuj slovník
Popis akce
Název akce
Jedná se o nau£ení systémového slovníku NaucSlovnik z uºivatelského vstupu. Jedná se o nau£ení systémového slovníku NaucSlovnikZeSouboru z textového souboru. Resetování systému do základního stavu, ResetujSlovnik tedy do stavu, kdy slovník obsahuje pouze základní sloví£ka. Toto se uplatní nap°íklad p°ed prvním spu²t¥ním systému nebo p°i zm¥n¥ uºivatele. Zm¥¬ prol Zm¥ní aktuální prol na prol jiného uºi- ZmenProl vatele. Vymaº slovník Jedná se o akci, kterou vyuºije systém VymazSlovnik v p°ípad¥, kdy resetuje prol. V tomto p°ípad¥ je nutné smazat ve²kerá nau£ená slova v£etn¥ jejich vlastností a nau£it systém pouze slova základní. Odstra¬ vlast- Tato akce vymaºe ve²keré £etnosti, OdstranVlastnosti nosti následná slova a ostatní vlastnosti u kaºdého sloví£ka. Tabulka 3.7: P°ehled a popis akcí, které systém vyuºívá k práci se slovníkem a prediktivní logikou.
Obrázek 3.1: Návrh uºivatelského prost°edí.
40
KAPITOLA 3.
ANALÝZA A NÁVRH EENÍ
Kapitola 4 Realizace Hlavním cílem mé diplomové práce je vytvo°it knihovnu £i programový modul pro predikci následných slov £i £ástí v¥t. Do této knihovny vstupují v²echny vstupy uºivatele jako jsou jednotlivé znaky (písmena v£etn¥ diakritiky, £íslice a jiné) a akce (mazání znaku, mazání celého slova, atd.). Z knihovny pak vystupuje výstup jako seznam predikovaných slov a v¥t. Následující obrázek 4.1 gracky ukazuje, jak a jaké vstupy do knihovny vstupují a jaké výstupy knihovna na základ¥ t¥chto vstup· generuje. P°i spu²t¥ní aplikace je nutné knihovn¥ p°edloºit prol, se kterým bude pracovat. Tento prol s sebou nese informaci o úloºi²ti osobního systémového slovníku a seznamu uloºených v¥t. Tento slovník slov i v¥t je tedy na£ten do systému z XML souboru a p°ipraven k pouºití. Jako druhý se na£te do systému slovník £eských slov. Tento bude slouºit k detekci správnosti nov¥ ukládaných slov. Nyní má knihovna v²e pot°ebné k zahájení své £innosti. Je tedy ve stavu, kdy m·ºe plnohodnotn¥ p°ijímat a zpracovávat vstupy. Hlavním vstupem je samoz°ejm¥ jednotlivý znak £i posloupnost jednotlivých znak· tvo°ících budoucí slovo. Na základ¥ tohoto vstupu se generuje seznam predikovaných slov, a to bu¤ jiº slov práv¥ psaných a nebo slov následných. Pokud je tedy slovo ve stavu rozepsaném, generuje se list predikovaných slov, tedy slov, o která by se mohlo jednat. Jakmile je toto slovo dopsané, predikují se celá slova následná. Jestliºe uºivatel vloºil dv¥ a více slov na vstup knihovny, je zahájena i predikce v¥t, pokud tedy systém obsahuje n¥jaký seznam jiº napsaných v¥t daným uºivatelem. Mezi dal²í vstupy pak také pat°í akce, které systém zpracovává od uºivatele, viz tabulka 3.6, a rovn¥º akce, které systém vyuºívá k práci se slovníkem a prediktivní logikou, viz tabulka 3.7. 4.1
Predikce b¥ºící na pozadí
Jak je ona predikce implementována? Jako °e²ení bylo navrhnuto zajistit generování predikovaného listu jak slov, tak v¥t pomocí vlákna. Respektive pomocí metody, která 41
42
KAPITOLA 4.
REALIZACE
Obrázek 4.1: Diagram vstup· a výstup· knihovny. b¥ºí ve vlákn¥. Toto vlákno je °ízeno semaforem, a pokud uºivatel nevykonává ºádnou akci, která n¥jakým zp·sobem ovliv¬uje predikci, vlákno stojí. Jakmile v²ak uºivatel za£ne psát text a nebo jej nap°íklad mazat, je po kaºdém vloºeném £i smazaném znaku spou²t¥no vlákno obsluhující predikci na pozadí. Metoda, která je °ízena vláknem, zjistí stav napsaného textu a na jeho základ¥ provede predikci, u£ení £i jinou operaci. Pokud by uºivatel psal p°íli² rychle, mohlo by se z d·vodu neasynchronnosti vlákna stát to, ºe by vlákno nestíhalo predikovat text p°esn¥ na základn¥ práv¥ vloºeného vstupu, ale nap°íklad na základ¥ vstupu o n¥kolik znak· krat²ího. Vlákno tedy predikuje v závislosti na svém vytíºení. Vzhledem k tomu, ºe cílová skupina uºivatel· je fyzicky hendikepována, nem¥l by problém nestíhání predikce na základ¥ aktuáln¥ vloºeném vstupu nastat. lov¥k, který pí²e rychle, nepot°ebuje aplikaci jako je tato. Mimo predikce tato metoda vlákna umí také vyhodnotit, zda byla dopsána v¥ta, a jestliºe ano, pak ji zpracuje. Synchronizace vlákna pro predikci na pozadí a vlákna grackého uºivatelského prost°edí v demo verzi aplikace je zaji²t¥na pomocí zámk·.
4.2.
4.2
POUITÉ KOMPONENTY TESTOVACÍ DEMO VERZE
43
Pouºité komponenty testovací demo verze
V rámci lad¥ní, testování a demonstrace £innosti a funk£nosti celé aplikace vytvo°ím Windows GUI ( ) aplikaci pro zobrazení vstupu i výstupu knihovny pro predikci textu. Tato GUI aplikace se skládá z grackých komponent, které umoº¬ují vhodn¥ zobrazit vstupy (psaný text, na jehoº základ¥ probíhá predikce slov £i £ástí v¥t) i výstupy aplikace. Windows Form, DataGridView, TextBox a TextBox s vlastností Multiline a ReadOnly. Nyní tyto komponenty popí²i podrobn¥ji. Graphical User Interface
4.2.1 T°ída Form
Kaºdá klientská okenní aplikace m·ºe obsahovat jeden nebo n¥kolik formulá°·. M·ºe se jednat o aplikace typu SDI (Single Document Interface) nebo MDI (Multiple Document interface). V kaºdém p°ípad¥ je jádrem klient· s formulá°i t°ída System.Windows.Forms.Form. T°ída Form je odvozena od t°ídy ContainerControl, která je odvozena od t°ídy ScrollableControl odvozené od t°ídy Control. Vzhledem k tomu je o£ividné, ºe formulá° dokáºe pracovat jako kontejner jiných ovládacích prvk· a umoºní jejich posun v p°ípad¥, ºe se tyto pod°ízené ovládací prvky nevejdou do klientské oblasti a ºe nabídne mnoho podobných vlastností, metod a událostí, jaké poskytují jiné ovládací prvky. Proto je také t°ída Form také pom¥rn¥ sloºitá. Proces vytvá°ení formulá°e je d·leºitý, proto jej zde uvedu. Poºadované funkce závisejí na tom, kam zapí²ete inicializa£ní kód. P°i vytvo°ení instance dochází k událostem v následujícím po°adí: 1. Volání konstruktoru 2. Load ( ) 3. Activate ( ) 4. Closing ( ) 5. Closed ( ) 6. Deactivate ( ) První t°i události mají význam p°i inicializaci. V závislosti na poºadovaném typu inicializace m·ºete ur£it, na kterou událost se navázat. Konstruktor t°ídy se uplat¬uje p°i vytvo°ení instance objektu. Událost Load nastává po vytvo°ení instance objektu, událost Load nastává po vytvo°ení instance objektu
událost Activated nastává, kdyº se formulá° stane viditelným a aktuál-
ním
událost Closing umoº¬uje zru²it proces uzav°ení formulá°e
událost nastává po uzav°ení formulá°e a slouºí obdobn¥ jako událost Clos-
ing k provedení nezbytného úklidu
poslední spu²t¥ná událost
44 ale t¥sn¥ p°ed tím, neº je formulá° zobrazen. Rozdíl mezi touto operací a konstruktorem spo£ívá ve stavu formulá°e. P°i vyvolání události Load formulá° existuje, ale není viditelný. B¥hem £innosti konstruktoru formulá° postupn¥ vzniká. Událost Activated nastává, kdyº se formulá° stane viditelným a aktuálním. V ur£ité situaci lze toto po°adí mírn¥ upravit. Je-li b¥hem £innosti konstruktoru formulá°e vlastnost Visible nastavena na hodnotu true nebo je-li zavolána metoda Show, je událost Load aktivována okamºit¥. Protoºe se tím také formulá° nastaví jako viditelný a aktuální, je také vyvolána událost Activate. Jestliºe po nastavení vlastnosti Visible následuje kód, bude spu²t¥n. Událost spu²t¥ní by tedy mohla vypadat p°ibliºn¥ takto: KAPITOLA 4.
REALIZACE
1. Volání konstruktoru, aº po p°íkaz Visible = true 2. Load 3. Activate 4. Volání konstruktoru, za p°íkazem Visible = true To m·ºe vést k neo£ekávaným výsledk·m. Z hlediska optimálních postup· se zdá, ºe je nevhodn¥j²í umístit co nejv¥t²í £ást inicializace do konstruktoru. Co se nyní stane po uzav°ení formulá°e? Událost Closing umoº¬uje proces zru²it. Událost Closing p°ijímá jako parametr CancelEventArgs. Tento argument má vlastnost Cancel, která v p°ípad¥ nastavení na hodnotu true zru²í událost a formulá° z·stane otev°en. K události Closing dochází p°i uzav°ení formulá°e, zatímco událost Closed nastává po zav°ení formulá°e. Ob¥ události umoº¬ují provést nezbytný úklid. Poslední spu²t¥nou událostí bude událost Deactivate. 4.2.2 Ovládací prvek DataGridView
Tento ovládací prvek byl novinkou od Visual Studia 2005 a slouºí k zobrazení dat. Jiº v první verzi platformy .NET se vyskytoval ovládací prvek DataGrid, který byl sice funk£ní, ale z mnoha hledisek se nehodil pro pouºití v komer£ních aplikacích. Neumoº¬oval mimo jiné zobrazit obrázky £i rozevírací ovládací prvky nebo uzamknout sloupce. Tento ovládací prvek vºdy p·sobil nedokon£eným dojmem, takºe mnoho dodavatel· ovládacích prvk· poskytovalo vlastní m°íºky, které tyto nedostatky p°ekonávaly a také nabízely mnohem více funkcí. Od platformy .NET 2.0 je k dispozici dal²í m°íºka s názvem DataGridView. Tento prvek °e²í mnoho nedostatk· p·vodního ovládacího prvku a dopl¬uje mnoho dal²ích funkcí, které dosud poskytovaly pouze dopl¬kové produkty.
45 DataGridView má podobné moºnosti vazby jako p·vodní prvek DataGrid, takºe umoº¬uje vazbu na t°ídy Array, DataTable, DataView £i DataSet nebo na komponentu, která implementuje rozhraní IListSource nebo IList. Ovládací prvek DataGridView poskytuje r·zné pohledy na stejná data. V nejjednodu²²ím p°ípad¥ lze data zobrazit (obdobn¥ jako ve t°íd¥ DataGrid) nastavením vlastností DataSource a DataMember. Já vyuºil pro zobrazení dat pomocí DataGridView komponenty nastavení vlastností DataSource. DataGridView komponentu pouºívám pro ú£ely lad¥ní a testovaní k zobrazení vlastností u kaºdého jiº nau£eného slova, které je nabízené (predikované) a zobrazené, viz obrázek 4.2. Z t¥chto slov je moºné posléze vybírat ta slova, která m¥l v úmysl uºivatel vloºit na °ádek. 4.2.
POUITÉ KOMPONENTY TESTOVACÍ DEMO VERZE
Obrázek 4.2: Ukázka pouºité komponenty DataGridView. 4.2.3 Ovládací prvek TextBox
Je to jeden z nejpouºívan¥j²ích prvk· z panelu nástroj·. Ovládací prvky TextBox, RichTextBox i MaskedTextBox jsou odvozeny od t°ídy TextBoxBase. T°ída TextBoxBase poskytuje vlastnosti jako MultiLine a Lines. Vlastnost MultiLine je hodnota typu bool, která umoº¬uje ovládacímu prvku typu TextBox zobrazit text na více °ádcích. Kaºdý °ádek textového pole je sou£ástí pole °et¥zc·. Toto pole je zve°ejn¥no pomocí vlastnosti Lines. Vlastnost Text vrací celý obsah textového pole jako jediný °et¥zec. TextLength ur£uje celkovou délku °et¥zce vráceného textem. Vlastnost MaxLength omezí délku textu na uvedenou hodnotu. Ve své aplikaci pouºívám ovládací prvek TextBox jako nejd·leºit¥j²í vstup, viz obrázek 4.3. ili to, co daný uºivatel napí²e, pí²e práv¥ do TextBoxu, který daná data zpracovává dále a na základ¥ tohoto vstupu se predikují nabízená slova £i £ásti v¥t. Hotové v¥ty pak pomocí klávesy Enter vkládám do horního TextBoxu s vlastností Multiline a vlastností ReadOnly, kde se uchovávají hotové v¥ty, viz obrázek 4.3.
46
KAPITOLA 4.
REALIZACE
Obrázek 4.3: Ukázka pouºité komponenty TextBox a TextBox s vlastností Multiline a ReadOnly. 4.2.4 Gracké uspo°ádání komponent a jejich význam v demo aplikaci
Výsledné uspo°ádání vý²e popsaných komponent znázor¬uje obrázek 4.4. Nejvý²e je tedy umíst¥no jakoby výstupní za°ízení, tedy n¥jaké zobrazovací za°ízení, které je v demo aplikaci interpretováno komponentou TextBox s vlastností Multiline a ReadOnly. Ihned pod touto komponentou se nachází TextBox, do kterého uºivatel pí²e vstupní text, na jehoº základ¥ bude provád¥na predikce slov a v¥t. Pod touto komponentou, která je hlavním vstupem celé aplikace, se nacházejí zbylé dv¥ komponenty, tedy dva DataGridView, které vypisují a nabízejí predikovaná slova a v¥ty a to v£etn¥ jejich vlastností a vypo£ítaných vah.
Obrázek 4.4: Uspo°ádání komponent v GUI demo aplikace.
4.3.
4.3
POPIS EENÍ A VNITNÍ STRUKTURY KNIHOVNY
47
Popis °e²ení a vnit°ní struktury knihovny
Celá aplikace se skládá z n¥kolika t°íd, které spolu komunikují a tvo°í tak funk£ní knihovnu £i programový modul. Diagram t¥chto t°íd ukazuje následující obrázek 4.5.
Obrázek 4.5: Diagram t°íd. 4.3.1 T°ída SlovoZname
D·leºitou t°ídou je t°ída pojmenována SlovoZname. Tato t°ída denuje spoustu d·leºitých metod a uchovává d·leºitá data a jiº podle názvu dané t°ídy je jasné, ºe tato t°ída reprezentuje kaºdé jednotlivé slovo obsaºené v systémovém slovníku. Jedná se tedy o ta slova, která daný systém pouºívá k predikci. Tato slova mají spoustu vlastností popsaných vý²e a práv¥ tato t°ída je v²echny uchovává. Jako data (atribut) denuje tato t°ída samotné slovo, které je typem ur£eno jako textový °et¥zec. Toto je asi nejd·leºit¥j²ím prvkem celé t°ídy. Mezi dal²í data ukládaná ke kaºdému slovu pat°í datum posledního pouºití, které je typu DateTime, celkový po£et pouºití daného slova, které je typem integer a ident, který je typu integer. Dále pak do£asná váha typu integer, která je vypo£ítávána v závislosti na ve²kerých vlastnostech daných slov. Podle této hodnoty se pak °adí slova v nabízeném prediktivním seznamu. Dal²ími daty jsou pak dv¥ fronty,
48 které uchovávají £asové údaje pouºití daného slova za krat²í a del²í £asové údaje. Tyto údaje jsou typu DateTime. Jednou z nejd·leºit¥j²ích vlastností je pak seznam následných slov. Tato slova jsou instance t°ídy NasledneSlovo, kterou popí²i níºe. Jako dal²í se zde nachází vý£tový typ slovního druhu typu enum. Tento typ denuje bu¤ nic, £ili slovo není ur£eno ºádným slovním druhem, nebo podstatná jména, p°ídavná jména £i slovesa. Jiné slovní druhy nevyuºívám k predikci. Dal²í vý£tový typ denuje zabarvení daných slov. Op¥t se jedná o typ enum. Tento typ denuje slovo jako neklasikované, kladné, záporné £i negativní. Dále se zde objevují vlastnosti denující nastavení jednotlivých datových atribut·. Názvy t¥chto vlastností jsou vyobrazovány jako názvy jednotlivých sloupc· ve výsledném seznamu navrhovaných slov. Hodnoty t¥chto dat jsou pak hodnoty obsaºené v t¥chto sloupcích. Vlastnosti zde mám pro data Slovo, Váhování, Slovní druh, Následná slova, Zabarvení, Naposledy pouºito, Celkový po£et pouºití, Po£et pouºití za týden, Po£et pouºití za m¥síc, Pouºito p°ed x (dny) a Pouºito p°ed x (sekundami). KAPITOLA 4.
4.3.1.1
REALIZACE
Výpo£et váhy slova
Jedná se o metoda výpo£tu váhy kaºdého slova, tedy hodnoty, která ovliv¬uje práv¥ výstupní predikovaný seznam navrhovaných slov. P°ed výpo£tem této váhy je v²ak nejprve pot°eba vypo£íst n¥které hodnoty. Nejd°íve je nutné vypo£ítat týdenní váhu, tedy prom¥nnou tv a spolu s touto prom¥nou vypo£íst degradaci váhy d. Výsledná hodnota prom¥nné tv je ovlivn¥na podmínkou, pokud je celkový po£et pouºití daného slova za poslední týden pouºívání programu roven nule, pak prom¥nnou tv nastavíme hodnotou 0 a degradaci d zvý²íme o hodnotu 0.2. Jestliºe je £etnost pouºití daného slova fpt nenulová, pak prom¥nou tv nastavuji jako podíl: tv =
fpt 7
Obdobn¥ pak nastavuji hodnotu prom¥nné m¥sí£ní váhy mv. Pokud je po£et pouºití daného slova za poslední m¥síc roven nule, nastavuji prom¥nné mv hodnotu 0 a degradaci d zvy²uji o 0.1. Pokud v²ak pouºití daného slova za poslední m¥síc fpm není roven nule, pak prom¥nnou mv nastavuji jako podíl: mv =
fpm 30
Posledním krokem p°ed samotným výpo£tem celkové váhy je následující podmínka. Jestliºe hodnota pouºití p°ed n¥kolika dny nenabývá hodnoty 0, tedy dané slovo nebylo pouºito práv¥ dne²ní den, pak degradaci vyd¥lím po£tem dn·, kdy naposledy bylo dané slovo pouºito. Tedy pokud bylo slovo pouºito dnes, pak degradaci nesniºuji v·bec. Pokud bylo dané slovo pouºito p°ed jedním dnem, také nesniºuji. Jestliºe bylo slovo pouºito
49 p°ed p¥ti dny, d¥lím degradaci p¥ti. To znamená, ºe ve výsledném vzorci bude degradace d men²í, a tudíº degraduje operaci násobení celkové £etnosti pouºití cp daného slova více. Z toho vyplývá, ºe £ím del²í doba uplynula od pouºití daného slova, tím více bude celková váha cv tohoto slova degradována. Výsledný výpo£et váhy kaºdého slova je pak vyjád°en následujícím vzore£kem. Obecn¥ platí, ºe £ím vy²²í výsledná váha bude, tím bude dané slovo vý²e v predikovaném listu. Vzorec se tedy skládá ze t°í vnit°ních závorek. První z nich je degradace celkové £etnosti pouºití daného slova. Tato £etnost se za ur£itý £as pouºívání aplikace bude o£ekávat jako nejvy²²í hodnota ze v²ech vlastností, které se týkají £etnosti pouºití. Proto je dobré tuto vlastnost n¥jak degradovat. K této závorce se p°i£ítá závorka druhá, která konstantou násobí týdenní váhu, tedy £etnost pouºití daného slova za krat²í £asový interval, tedy týden. Dal²í závorka pak provádí obdobné s tím rozdílem, ºe konstantou násobí m¥sí£ní váhu, tedy £etnost pouºití za del²í £asový interval, to je za m¥síc. Rozdíl jenº je patrný na první pohled spo£ívá ve velikosti konstant. Týdenní váhu násobí konstanta v¥t²í, nebo´ tuto váhu up°ednost¬uji, protoºe vypovídá více o intenzit¥ pouºívání daného slova v aktuální dobu. Konstanta násobící m¥sí£ní váhu je pak men²í, nebo´ ji chci více degradovat. D·vodem je pak op¥t men²í vypovídání o aktuálním pouºívání. 4.3.
POPIS EENÍ A VNITNÍ STRUKTURY KNIHOVNY
= celková váha • d = degradace váhy • cp = celková £etnost pouºití • tv = týdenní váha • mv = m¥sí£ní váha • dv = do£asná váha • cv
cv = (100 ∗ ((d ∗ cp) + (5 ∗ tv) + (2 ∗ mv))) + dv;
Je tedy patrné, ºe zohled¬uji ve výpo£tu váhy zejména období, kdy bylo dané slovo pouºito. Pokud má nap°íklad dané slovo vysokou celkovou £etnost pouºití cp, ale nulovou £etnost pouºití za týden i m¥síc, bude degradace váhy d hodn¥ nízká, a tudíº i celková váha bude nízká. Pokud ov²em naopak bude celková £etnost pouºití nízká ve srovnání s ostatními slovy ve slovníku, ale vysoká £etnost pouºití za krat²í a del²í £asový okamºik vysoká, bude celková váha daného slova vysoká. Toto celé násobím vysokou konstantou, nebo´ se jedná o £ísla desetinná, av²ak výsledná váha kaºdého slova je typu integer, tedy celo£íselná.
50
KAPITOLA 4.
4.3.1.2
REALIZACE
Výpo£et do£asné váhy slova
Tímto v²ak nekon£í výpo£et váhy. K tomuto jiº tak velkému £íslu se dále p°ipo£ítává hodnota, která m·ºe v²e je²t¥ úpln¥ obrátit. Tedy pokud doposud vy²la váha nízká, je do£asná váha dv schopna tuto nízkou hodnotu p°evést na hodnotu vysokou a naopak. Coºe to ta do£asná váha dv vlastn¥ je? Na tuto do£asnou váhu dv mají vliv vlastnosti jako jsou následná slova, slovní druhy a zabarvenost. • Výpo£et do£asné váhy následných slov Tento výpo£et probíhá tak, ºe se systém podívá na p°edchozí slovo, tedy slovo dopsané jako poslední, a u n¥j prozkoumá jeho seznam následných slov. Pokud takový existuje, pak jej slovo po slovu projede a podívá se na jejich £etnosti v tomto seznamu. Poté kaºdému takovému následnému slovu nastavím do£asnou váhu podle následujícího vzorce: cn = £etnost následného slova pz = penalizace za dal²í napsané znaky dv = do£asná váha dv =
1000 ∗ cn
pz
Je z°ejmé, ºe £ím vy²²í £etnost pouºití daného následného slova cn je, tím vy²²í do£asná váha dv bude. Prom¥nná pz pak ur£uje kaºdý nový znak dal²ího slova. Prom¥nná pz nabývá jedni£ky implicitn¥ a to jen tehdy, je-li rozepsané slovo prázdné, tedy ºádné je²t¥ není napsané. Na °ádku nyn¥j²í situace tedy vypadá tak, ºe poslední dopsané slovo je ozna£eno jako slovo p°edchozí, a u jeho následných slov navy²uji do£asné váhy a up°ednost¬uji je tak v nabízeném seznamu. Pokud v²ak uºivatel za£ne psát dal²í slovo, je do£asná váha následných slov s kaºdým novým znakem penalizována. • Výpo£et do£asné váhy slovních druh· Zde systém zkoumá, zda daná práv¥ psaná v¥ta obsahuje n¥který ze slovních druh·, jako je podstatné jméno, p°ídavné jméno £i sloveso. Pokud v¥ta neobsahuje ºádný z t¥chto slovních druh·, pak tento slovní druh zvýhodním. Pakliºe zpo£átku není ve v¥t¥ obsaºen ani jeden z vý²e zmín¥ných slovních druh·, ned¥je se nic. Jakmile je ve v¥t¥ alespo¬ jedno slovo s klasikací n¥kterého slovního druhu, jsou ostatní slova v nabízeném seznamu, jenº mají jiný slovní druh, zvýhodn¥na nastavením vy²²í do£asné váhy. Nap°íklad máme ve v¥t¥ napsané sloveso, zvý²ím váhu u podstatných jmen a p°ídavných jmen.
4.3.
•
POPIS EENÍ A VNITNÍ STRUKTURY KNIHOVNY
51
Výpo£et do£asné váhy zabarvenosti Systém zkoumá jiº napsaná slova a zji²´uje u nich jejich zabarvenost. Pokud zjistí, ºe bylo napsané slovo zabarveno kladn¥, p°ipo£te k výsledné zabarvenosti v¥ty jedni£ku. Kdyº narazí na jiº napsané slovo, které je zabarvené záporn¥, ode£te od výsledné zabarvenosti v¥ty jedni£ku. S kaºdým napsaným slovem projíºdí systém seznam slov a podle výsledné zabarvenosti navy²uje do£asnou váhu u slov, která jsou zabarvená stejn¥ jako psaná v¥ta. Takto zabarvená slova jsou pak zvýhodn¥na v nabízeném seznamu.
4.3.1.3
Významné metody
Jednou z nejd·leºit¥j²ích metod je metoda PouzilJsem(). Tato metoda se pouºívá p°i u£ení systémového slovníku a to bu¤ z textového souboru, a nebo p°ímo z textu psaného uºivatelem. Metoda nastavuje datum posledního pouºití daného slova na aktuální £as, navy²uje £etnost pouºití, p°idává £asovou zna£ku do fronty krat²ího a del²ího £asového intervalu a následn¥ tyto intervaly kontroluje, zda neobsahují star²í data. Pomocí metody CompareTo() se°azuji v²echna slova podle jejich váhy. Na základ¥ toho pak vracím sestupn¥ se°azené seznamy slov, ze kterých si uºivatel následn¥ vybírá vhodná slova. 4.3.2 T°ída NasledneSlovo
T°ída NasledneSlovo denuje kaºdé následné slovo slova p°edchozího. U t¥chto následných slov si pamatuji jejich textovou podobu a jejich £etnost. Tyto dva atributy jsou nastavovány p°es vlastnosti. T°ída disponuje metodou NavysCetnost(), která navý²í £etnost daného následného slova. Dále je zde p°ekrytá metoda ToString(), kterou vyuºívám ke snadné textové reprezentaci objekt· a poté k zobrazení dat v GUI ( ) aplikace. Graphical User
Interface
4.3.3 T°ída SlovnikPouzivanychSlovAVet
Tato t°ída denuje metody pro práci se systémovým slovníkem pouºívaných slov. Nejprve bych na tomto míst¥ zmínil metody, o kterých jsem zapo£al psát v p°edchozím odstavci. • Metoda Save() P°edpokládejme, ºe jsme systém nau£ili n¥jaká slova do jeho slovníku generického typu Dictionary<string, SlovoZname>. Tento slovník umoº¬uje rychlé vyhledávání
52
KAPITOLA 4.
REALIZACE
a pro mé ú£ely je vhodn¥j²í neº-li seznam typu List. Metoda Save() bude zavolána p°i ukon£ení programu. Její úkol je snadný, uloºit tento slovník do XML souboru. K tomu bude v²ak pot°eba tento slovník zm¥nit na seznam typu List<SlovoZname> a to proto, ºe t°ída XmlSerialization neumí se slovníkem typu Dictionary pracovat. O tento p°evod se stará metoda SlovnikNaList(). Dále metoda Save() ukládá t°ídu VetyZname, tedy seznam slov tvo°ící v¥tu. Tato slova ukládá v £íselné podob¥ z d·vod· u²et°ení místa. • Metoda Load() Nyní p°edpokládejme, ºe spou²tíme program a jiº o£ekáváme, ºe se nám od minulého pouºití uloºila v²echna nov¥ nau£ená slova do XML souboru a nyní p°i spu²t¥ní se tato data z XML souboru na£tou do systémového slovníku. Tuto operaci obstarává tato metoda. Po na£tení slov do seznamu typu List<SlovoZname> je zapot°ebí op¥t tento list p°evést do slovníku typu Dictionary<string, SlovoZname>. O tento p°evod se stará metoda ListNaSlovnik(). Pokud je slovník prázdný po na£tení slov znamená to, ºe ºádná slova nebyla na£tena. Proto nau£ím systém základní sloví£ka z textového souboru obsahující tato sloví£ka. Metoda Load() také na£ítá soubor obsahující v¥ty. Po na£tení t¥chto v¥t metoda zjistí nejvy²²í £íslo identu, a pokud je toto £íslo rovno nule, nastala z°ejm¥ n¥kde chyba a bude t°eba tento seznam slov op¥t p°e£íslovat od jedni£ky vý²e. Toto p°e£íslování provádím vºdy p°i spu²t¥ní programu, kdy se práv¥ tato metoda Load() volá. Je totiº moºné, ºe n¥kde budou uloºena dv¥ slova s identem rovným nule, a pokud najdu jakýkoli ident roven nule, p°e£ísluji ho. • Metoda PridatNoveSlovo() Metoda PridatNoveSlovo() pat°í k nejd·leºit¥j²ím metodám celé aplikace, nebo´ umoº¬uje systém u£it se novým slov·m. Na vstupu je tedy prom¥nná slovo typu string, které obsahuje slovo, které se systém chystá nau£it. Metoda nejprve zjistí, jestli dané slovo jiº nemá nau£ené ve svém slovníku pouºívaných slov. Pokud ano, navý²í u n¥j £etnost a aktualizuje ostatní vlastnosti. Pokud v²ak systémový slovník neobsahuje toto slovo, pokusí se je nau£it. Nejprve metoda zjistí, zda se u£íme ze souboru a nebo z °ádky psané uºivatelem. Pokud se u£íme ze souboru, pak slovník nekontroluje existenci daného slova v £eském slovníku, ale rovnou dané slovo uloºí do systémového slovníku. P°ed samotným uloºením si najdu nejprve nejvy²²í hodnotu atributu ident, abych tuto hodnotu o jedni£ku navý²il a p°idal práv¥ ukládanému slovu. Nyní uº mohu vytvo°it novou instanci t°ídy SlovoZname, jehoº konstruktoru p°edám dané slovo a jeho ident, a tuto instanci vloºím do slovníku
4.3.
53 slov a do slovníku £ísel. Nyní navý²ím u tohoto nového slova jeho £etnost a zaktualizuji ostatní vlastnosti. Dále slovu p°idám slovní druh a ur£ím zabarvení. Ob¥ dv¥ tyto vlastnosti jsou p°edávány jako parametry s defaultními hodnotami neklasikováno. Pokud se dané slovo neu£ím ze souboru ale z °ádky psané uºivatelem, kontroluji, zda dané slovo existuje v £eském slovníku. Pokud ne, ignoruji jej. Pokud ano, p°idám jej stejným zp·sobem do slovník·.
POPIS EENÍ A VNITNÍ STRUKTURY KNIHOVNY
public void PridatNoveSlovo(string slovo, bool uceniZeSouboru, int slovniDruh = 0, int zabarveni = 0) { // slovo ve slovníku je²t¥ není, tak vytvo°ím novou // instanci a p°idám jej if (dictionary.ContainsKey(slovo) == false) { // pokud se u£ím ze souboru, nekontroluji nová slova a // p°edpokládám, ºe jsou správná if (uceniZeSouboru) { ... } // pokud se neu£ím dané slovo ze souboru, kontroluji, zda se // slovo nachází v £eském slovníku else { if (slovnikVsechSlov.ObsahujeCeskySlovnik(slovo)) { Console.WriteLine("Slovo: " + slovo + " je obsaºeno v £eském slovniku."); UInt16 identNew = slovnikPouzivanychSlov.maxIdent++; // vytvo°ím instanci nového slova SlovoZname nove = new SlovoZname() { Slovo = slovo, ident = identNew }; // následn¥ p°idám nové slovo do slovník· dictionary.Add(nove.Slovo, nove); dictionaryCisla.Add(identNew, nove); // navý²ím celkový po£et pouºití daného slova dictionary[slovo].PouzilJsem(); Console.WriteLine("P°idávám slovo: " + slovo + " do slovníku pouºívaných slov.");
54
KAPITOLA 4.
}
}
•
REALIZACE
} else { Console.WriteLine("Slovo: " + slovo + " není obsaºeno v £eském slovníku."); }
} else { // navý²ím celkový po£et pouºití daného slova, které jiº // ve slovníku existuje, a to jenom pokud u£ím ze souboru // a nebo vypr²el £asový interval od posledního uºití slova if ((uceniZeSouboru) || (dictionary[slovo].PouzilJsemPredSekundami > 20)) { dictionary[slovo].PouzilJsem(); Console.WriteLine("Navy²uji £etnost slova: " + slovo); } }
Metoda ZobrazPredikovanyListSlov() Metoda vracející list predikovaných sloví£ek na základ¥ vstupujícího posledního práv¥ psaného slova a nebo prázdného slova. Dal²ím vstupujícím slovem je slovo p°edchozí. Na základ¥ tohoto p°edchozího slova zji²´uji a predikuji slova následná. Toto slovo je defaultn¥ nastaveno na prázdný °et¥zec. Posledním parametrem je £íselná hodnota vyjad°ující po£et vrácených záznam·. Metodu rozd¥luje podmínka, která detekuje, zda text, na jehoº základ¥ se bude predikovat, £ili prom¥nná poslední slovo, je prázdná £i nikoli. Pokud poslední slovo není prázdné, pak zkoumám, zda neexistuje n¥jaké p°edchozí slovo. Pokud ano, pak si zjistím, zda dané p°edchozí slovo existuje ve slovníku a pokud ano, nechám si vrátit jeho seznam následných slov. U t¥chto slov navý²ím do£asn¥ jejich váhu, tudíº se ve vráceném predikovaném listu vystupujícího z této metody budou up°ednost¬ovat. Dále volám metodu VahaSlovnichDruhuAZabarveni(), která projede jiº napsanou v¥tu £i jediné slovo a také navý²í váhu v závislosti na slovních druzích obsaºených v jiº napsané v¥t¥ a v závislosti na celkovém zabarvení jiº napsané v¥ty. Dále projdu slovník, a pokud slova v n¥m obsaºená za£ínají na stejnou kombinaci znak· jako jiº napsané slovo, vloºím je do navrhovaného listu. Tento list následn¥ se°adím podle vypo£tené váhy a vrátím. Pokud je text, na jehoº základ¥ budu predikovat, prázdný, zjistím si, zda u existujícího p°edchozího slova se vyskytují jeho slova následná, a u t¥chto následných slov
55 navý²ím jejich do£asnou váhu. Dále op¥t zavolám metodu VahaSlovnichDruhuAZabarveni() a vrátím list v²ech slov ze slovníku se°azený podle váhy. • Metoda ZobrazPredikovanyListVet()
4.3.
POPIS EENÍ A VNITNÍ STRUKTURY KNIHOVNY
Metoda vrací seznam navrhovaných frází £i £ástí v¥t. Vstupem je seznam jiº napsaných slov a defaultní hodnota po£tu vrácených predikovaných v¥t. Metoda nejprve zkoumá, zda je po£et vstupujících slov do funkce v¥t²í neº jedna. ili neza£nu predikovat v¥ty, dokud do metody nevstupují alespo¬ dv¥ jiº celá napsaná slova. Následn¥ za£nu brát v¥tu po v¥t¥ v £íselném vyjád°ení a budu u nich po£ítat vzdálenost. Nejprve si kaºdou v¥tu p°evedu do textové podoby, tedy do jednoho °et¥zce reprezentujícího celou v¥tu. Pokud tento °et¥zec není prázdný, pokra£uji dál, jinak danou prázdnou v¥tu p°esko£ím. Ve stejném cyklu si tuto v¥tu po slovech také uloºím do seznamu jednotlivých slov a to v po°adí, jak jdou ve v¥t¥ za sebou. Nyní za£nu po£ítat vzdálenost. Nejprve si nastavím indexery práv¥ zpracovávaného slova zpracovávané v¥ty a slova napsaného na °ádku na -1. Nyní následují dva cykly. Vn¥j²í cyklus prochází slova napsaná na °ádku a vnit°ní cyklus prochází slova u práv¥ testované v¥ty. Pokud se ob¥ práv¥ zpracovávaná slova rovnají, nastavím p°íznak typu bool na hodnotu true. Tento p°íznak charakterizuje, ºe dané slovo napsané na °ádku je ve v¥t¥ obsaºeno, a na základ¥ této informace vím, ºe nebudu v¥t¥ nastavovat penalizaci za neobsahující slovo, a také znám oba dva indexy práv¥ testovaných slov. Ty od sebe ode£tu a absolutní hodnotu p°i£tu do vzdálenosti. Také vím, ºe danou v¥tu jiº nemusím procházet dál a ºe mohu p°ejít na rozbor dal²ího slova na °ádku. Pokud by dané slovo ve v¥t¥ nebylo nalezeno, nastavil bych dané v¥t¥ penále a p°i£etl tak do její vzdálenosti hodnotu 5. Nakonec v²echny v¥ty se°adím v závislosti na jejich celkové váze a vrátím je jako seznam predikovaných frází £i v¥t. • Metoda VahaSlovnichDruhuAZabarveni() Tato metoda p°ijímá jako parametr seznam jiº napsaných slov. Tato slova postupn¥ projde a zjistí stav jiº napsaných slovních druh·. Tedy jestli jiº ve v¥t¥ je obsaºen daný slovní druh. Slova doposud neuloºená ve slovníku ignoruji. Dále také vypo£ítám celkovou hodnotu zabarvení napsané v¥ty. Kdyº narazím na slovo zabarvené kladn¥, navý²ím celkovou hodnotu zabarvení v¥ty o jedni£ku. Pokud narazím na slovo záporné, sníºím celkovou hodnotu zabarvení v¥ty o jedni£ku. Nakonec projedu v²echna slova v systémovém slovníku a u kaºdého tohoto slova na základ¥ p°edchozích zji²t¥ní upravím do£asnou váhu. • Metoda NaucZeSouboru()
56
KAPITOLA 4.
REALIZACE
Metoda, jak jiº její název napovídá, u£í systémový slovník z textového souboru. Metoda si na£te textový soubor a £te jej do konce. Tento text nejprve separuji do jednotlivých v¥t, a aº poté kaºdou v¥tu separuji do jednotlivých slov. Dále tato slova procházím a u kaºdého zji²´uji, zda kon£í na £íslo, jestliºe ano, potom je slovo klasikováno n¥kterým ze slovních druh·. Dále je pot°eba toto £íslo odstranit. Poté zji²´uji, zda slovo neobsahuje je²t¥ p°íznak zabarvení, který hledám na po£átku kaºdého slova. Pokud slovo za£íná na znak "+", je klasikováno jako slovo kladné. Pokud dané slovo za£íná na znak "-", je slovo klasikováno záporn¥. Op¥t je nutné tento znak odstranit. Nyní následuje metoda pro p°idání t¥chto slov do systémového slovníku, £ili metoda PridatNoveSlovo(). Jako poslední v¥cí je zde nau£ení následných slov. K tomu slouºí metoda PridejNaslednaSlova(), která na vstupu dostává seznam slov obsaºených v dané v¥t¥. Zde bylo d·leºité separovat slova jedné v¥ty od slov v¥ty druhé, aby nedo²lo k chybnému nau£ení následného slova. • Metoda PridejNaslednaSlova() Na vstupu má metoda seznam slov tvo°ících práv¥ jednu v¥tu a u této posloupnosti slov denuje následná slova. Metoda projede v²echna slova v seznamu po dvojicích a p°edchozímu slovu ukládá slovo následné. Pokud p°edchozí slovo jiº obsahovalo slovo následné, navý²ím u n¥j pouze £etnost. 4.3.4 T°ída SlovnikPouzivanychSlov
Tato t°ída slouºí k ukládání dat do XML souboru. T°ída XmlSerialization umí totiº data ukládat pouze jako t°ídu celou. T°ída SlovnikPouzivanychSlov tedy denuje seznam generického typu List<SlovoZname>, ve kterém jsou uloºena v²echna slova systémového slovníku. Následná t°ída SlovnikPouzivanychSlovAVet pak denuje metody Save() a Load(), které ukládají/na£ítají tento seznam do/z XML souboru. 4.3.5 T°ída SlovnikVsechSlov
T°ída SlovnikVsechSlov reprezentuje slovník £eských slov. T°ída obsahuje dv¥ d·leºité metody. • Metoda NactiSlovnikCeskychSlov() Tato metoda, jak jiº její název vypovídá, se stará o na£tení velkého slovníku do seznamu typu System.Collections.Specialized.StringCollection. Tento typ jsem zvolil pro jeho výhodnost rychlého vyhledávání. eský slovník, který na£ítám, je velice objemný, a proto bude t°eba rychlého vyhledávání.
4.3.
•
POPIS EENÍ A VNITNÍ STRUKTURY KNIHOVNY
57
Metoda ObsahujeCeskySlovnik() Protoºe je tato metoda opravdu jednoduchá, je velice £asto vyuºívaná. Na vstupu dostává slovo, které se systém chystá nau£it, a po této metod¥ vyºaduje informaci, zdali je toto slovo opravdu £eské a zdali se je má tedy v·bec u£it.
4.3.6 T°ída VetaZnama
Tato t°ída obdobn¥ jako t°ída SlovoZname popisuje jednotlivou v¥tu. Tato v¥ta je popsána v £íslech, kdy kaºdé slovo obsahuje ident a posloupnost t¥chto £ísel tvo°í hotovou v¥tu. Dále je v¥ta vyjád°ena atributem i jako jeden textový °et¥zec. Obdobn¥ jako jsem po£ítal váhu u kaºdého slova, tak i zde po£ítám váhu u kaºdé v¥ty. Na základ¥ tohoto parametru jsou pak v¥ty °azeny a nabízeny v predik£ním seznamu uºivateli. 4.3.6.1
Výpo£et váhy v¥ty
Výpo£et váhy je provád¥n podle následujícího vzorce. etnost pouºití dané v¥ty d¥lím konstantou, která této £etnosti ubere na významu. Výsledná váha je pak podíl vzdálenosti dané v¥ty a jiº vyd¥lené £etnosti pouºití. Výsledné £íslo je následn¥ vynásobeno vysokou konstantou pro lep²í testování a lad¥ní. Za zmínku stojí °íci, ºe u váhy slov platí, ºe £ím vy²²í váhu mají, tím spí²e je nabízím. U v¥t je toto °e²eno p°esn¥ obrácen¥. Tedy £ím vy²²í váhu v¥ta má, tím mén¥ pravd¥podobn¥ji ji nabídnu v predikovaném seznamu. • cv = celková váha • v = vzdálenost • cp = celková £etnost pouºití cv = (100 ∗ (vz/
cp 3
));
4.3.7 T°ída VetyZname
Tato t°ída reprezentuje seznam v¥t, £ili seznam instancí t°ídy VetaZnama. T°ída disponuje dv¥ma d·leºitými metodami. • Metoda UlozVetu() Tato metoda na vstupu p°ijímá seznam £ísel. Metoda vytvo°í novou instanci t°ídy VetaZnama a tomuto objektu uloºí tuto £íselnou reprezentaci dané v¥ty. Dále metoda navý²í £etnost pouºití dané v¥ty o jedni£ku.
58
KAPITOLA 4.
•
REALIZACE
Metoda VratVsechnyVety() Metoda jednodu²e vrátí v²echny uloºené v¥ty, které se nacházejí v systémovém slovníku v¥t.
4.3.8 T°ída Hlavni
Jedná se o páte°ní t°ídu celé aplikace. T°ída zde vytvá°í instance t°íd SlovnikVsechSlov a SlovnikPouzivanychSlovAVet. Vytvá°í zde také instanci t°ídy Thread slouºící k predikci slov a v¥t na pozadí. Spu²t¥ní tohoto vlákna budu volat sám prost°ednictvím semaforu, £ili nepovoluji vláknu, aby se spou²t¥lo automaticky. Pokud tedy ud¥lám d·leºitou zm¥nu, spustím proces vlákna, který tuto zm¥nu zpracuje. T°ída obsahuje d·leºité metody. • Metoda InicializujAplikaci() Tato metoda je spu²t¥na bezprost°edn¥ p°i spu²t¥ní aplikace. Zde nastavuji jméno prolu, následn¥ na£ítám £eský slovník do systému a spou²tím metodu Load() t°ídy SlovnikPouzivanychSlovAVet. Po tomto kroku denuji a spou²tím vlákno. • Metoda ZmenProl() Metoda, jak její název napovídá, slouºící ke zm¥n¥ prolu a p°ijímá jako jediný parametr práv¥ název m¥n¥ného prolu. Pokud je na za£átku spln¥na podmínka, která se ptá, zda název zadaného m¥n¥ného prolu jiº existuje, pak pokra£uje metoda dál. Op¥t spustím metodu Load t°ídy SlovnikPouzivanychSlovAVet pro na£tení pouºívaného slovníku a denuji a spou²tím vlákno. • Metoda ZpracujVetu() Metoda pro zpracování dané v¥ty. Tato v¥ta je této metod¥ p°edána jako parametr v podob¥ seznamu jednotlivých slov dané v¥ty. Tato slova postupn¥ procházím a p°idávám je do systémového slovníku £asto psaných slov pomocí metody PridatNoveSlovo(). Dále si nadenuji seznam typu List
a do n¥j postupn¥ naskládám £íselnou reprezentaci slov dané zpracovávané v¥ty. Tuto v¥tu v £íselné reprezentaci následn¥ uloºím. Nakonec nau£ím následná slova této v¥ty. private void ZpracujVetu(List<string> slovaVety) { // definice listu reprezentujícího v¥tu v £íslech
4.4.
OMEZENÍ APLIKACE PRO PREDIKCI TEXTU
59
List vetaJakoCisla = new List(); // p°idáme slova do slovníku £asto pouºívaných slov foreach(string slovo in slovaVety) { // p°idá (nau£í) slovo do systémového slovníku slovnikPouzivanychSlovAVet.PridatNoveSlovo(slovo, false);
}
// pokud se dané slovo nep°idalo do slovníku, // tak nep°idávám ani jeho ident if (slovnikPouzivanychSlovAVet.dictionary.ContainsKey(slovo)) { vetaJakoCisla.Add(slovnikPouzivanychSlovAVet. dictionary[slovo].ident); }
// uloºím v¥tu, pokud se skládá z více jak jednoho slova if (vetaJakoCisla.Count > 1) { slovnikPouzivanychSlovAVet.vetyZname.UlozVetu(vetaJakoCisla); }
}
// p°idáme následná slova slovnikPouzivanychSlovAVet.PridejNaslednaSlova(slovaVety);
4.3.9 T°ída ZpracovaniSlov
T°ída obsahuje seznamy slov pro zpracování a p°íznaky, zda v¥ta jiº byla dopsána £i nikoliv. Tyto seznamy a p°íznaky vyuºívá vlákno. Dál²í t°ídou je t°ída SlovoProZpracovani, která reprezentuje kaºdé slovo na zpracování. 4.3.10 T°ída Prol
T°ída má na starost nastavení, zm¥nu a vytvo°ení prol·. T°ída uchovává název prolu a základní cestu do sloºky, kde se projekt nachází. Dále je zde metoda, která vytvá°í adresá° daného prolu a metoda, která zji²´uje, zda daný prol existuje. 4.4
Omezení aplikace pro predikci textu
Systém má jediné omezení a to takové, ºe pokud uºivatel napí²e na vstup nástroje sloºenou v¥tu, nástroj nebude schopný tuto v¥tu nau£it rozd¥lenou v závislosti na £árkách
60 a te£kách, ale nau£í celý textový °et¥zec, který mu byl p°edán. Systém v²ak kontroluje, zda daná slova, ze kterých je v¥ta sloºena, jsou slova správn¥ napsaná. Pokud ne, systém je neuloºí. Na obhajobu tohoto omezení bych rád zmínil, ºe cílová skupina bude nástroj pouºívat zejména pro sd¥lení informace a ºe tedy na kvalitu v¥ty nebude kladen p°íli² vysoký d·raz. P°i návrhu GUI ( ) ani znak £árky £i te£ky neuvaºuji. Pokud se systém nechá u£it z textového souboru, který pochopiteln¥ £árky a te£ky obsahuje, vezme toto systém v úvahu a text do jednotlivých v¥t rozd¥lí a teprve z nich se nau£í. Nejd·leºit¥j²í vlastnost, která by p°i ignoraci tohoto postupu rozd¥lení textu na jednotlivé v¥ty utrp¥la, je vlastnost následných slov. KAPITOLA 4.
Graphical User Interface
REALIZACE
Kapitola 5 Manuál aplikace pro predikci textu 5.1
Demonstra£ní aplikace
Tak jak obrázek 5.1 umíst¥ný níºe ukazuje, nachází se v levém horním rohu demo aplikace nabídka Soubor a nabídka Nápov¥da. Nabídka Soubor dále obsahuje dal²í moºnosti, které je moºné s aplikací provád¥t. Tyto moºnosti jsou: • Nau£it ze souboru - slouºí k nau£ení systémového slovníku slov z textového souboru, • Resetuj slovník - slouºí k resetování slovníku do p·vodního iniciálního stavu, tzn. v²echna jiº nau£ená slova budou vymazána a systém se nau£í pouze slova základní, • Odstra¬ vlastnosti - odstraní ve²keré vlastnosti ze systémového slovníku slov, • Zm¥¬ prol - umoº¬uje zm¥nit uºivatelský prol p°ímo za b¥hu aplikace, • Konec - ukon£í demo aplikaci a uloºí v²echna nov¥ nau£ená slova a v¥ty do XML soubor·. Nabídka Nápov¥da obsahuje pouze dv¥ podnabídky: • Jak aplikaci pouºívat - jedná se o krátké vysv¥tlení, jak danou aplikaci pouºívat, • O programu - ukazuje název aplikace, jeho autora a ú£el, pro jaký byla aplikace vytvo°ena. Pod t¥mito nabídkami se nachází polí£ko ²edé barvy zobrazující jiº napsané v¥ty. Tyto v¥ty se zde °adí vzestupn¥ podle data odeslání. Toto polí£ko je jakousi náhradou za opravdové výstupní za°ízení, jako m·ºe být nap°íklad obrazovka. Pod ním se nachází dal²í polí£ko tentokrát bílé barvy, do n¥hoº uºivatel pí²e text na jehoº základ¥ se bude provád¥t predikce slov a v¥t. Jedná se tedy o hlavní vstup celé aplikace. 61
62
KAPITOLA 5.
MANUÁL APLIKACE PRO PREDIKCI TEXTU
Pod tímto vstupem se nacházejí dv¥ tabulky. První interpretuje predikovaný seznam nabízených slov a druhá interpretuje seznam predikovaných v¥t. Jak je vid¥t z obrázku 5.1, kaºdá tato tabulka popisuje slovo a v¥tu více sloupci. Jedná se o jednotlivé vlastnosti na jejichº hodnotách se provádí výpo£et výsledné váhy. Podle této váhy se pak predikuje seznam nejvhodn¥j²ích kandidát·. Pod t¥mito tabulkami se nachází informa£ní li²ta, která ukazuje poslední úsp¥²n¥ provedenou akci. Uºivatel do vstupu aplikace za£ne psát text pomocí n¥jakého vstupního za°ízení a výstup této aplikace by m¥l v tomto psaní uºivateli být nápomocen. Nabídne mu dva predikované seznamy. V prvním seznamu budou predikovaná slova a to bu¤ slova následná, a nebo slova dokon£ující dané nedopsané slovo. Seznam predikovaných frází £i v¥t se bude uºivateli nabízet aº po nau£ení se t¥chto v¥t z napsaných v¥t uºivatelem. 5.2
Jak se aplikace u£í
Systém se bude u£it z napsaného textu uºivatelem ve chvíli, kdy uºivatel ode²le dopsanou v¥tu na výstupní za°ízení. Toto výstupní za°ízení m·ºe být nap°íklad n¥jaká obrazovka. Informaci o tom, ºe uºivatel dopsal v¥tu, sd¥lí systému uºivatel pomocí klávesy Enter. Ve chvíli, kdy uºivatel potvrdí, ºe dopsal v¥tu, se tato v¥ta vytiskne na výstup a systém se z ní nau£í. Bude se u£it jak jednotlivá slova a jejich následná slova, tak celou v¥tu. Tato slova a celou v¥tu si uloºí do systémového slovníku. P°i dal²ím psaní nové v¥ty jsou uºivateli tyto nov¥ nau£ené informace k dispozici. Systém je také moºné nau£it z textového souboru. Pokud má daný uºivatel k dispozici textový soubor, který sám n¥kdy napsal, a nebo tento textový soubor obsahuje text, který je uºivateli blízký, pak se systém nechá nau£it pomocí tohoto souboru a to pomocí nabídky Soubor -> Nau£it ze souboru. Slova tohoto textového souboru je také moºné je²t¥ dále klasikovat a to bu¤ zabarvením, a nebo slovním druhem. Pokud chceme nap°íklad klasikovat slovo "krásný", pak jako kladné zabarvení m·ºeme slovo oklasikovat po£áte£ním symbolem "+". Výsledné kladn¥ oklasikované slovo by tedy vypadalo "+krásný". Pokud bychom dané slovo cht¥li oklasikovat je²t¥ slovním druhem p°ídavného jména, pak na konec daného slova vloºíme £íselné vyjád°ení slovního druhu. Klasikované slovo slovním druhem p°ídavného jména a kladným zabarvením by tedy vypadalo "+krásný2". 5.3
Dal²í schopnosti
Systém je moºné dále resetovat do základního stavu pomocí nabídky Soubor -> Resetuj slovník. Resetování systému vymaºe ve²kerá nau£ená slova i v¥ty a systém nau£í pouze základní sloví£ka.
63 Nebo je moºné odstranit ve²keré vlastnosti u v²ech slov pomocí nabídky Soubor -> Odstra¬ vlastnosti. ili slova z·stanou uloºená, ale jejich £etnosti, následná slova, zabarvení, slovní druh a datum posledního pouºití budou vymazány. V neposlední °ad¥ je moºné zm¥nit prol na jiný existující prol a to pomocí nabídky Soubor -> Zm¥¬ prol. Ukon£ení aplikace a uloºení aktuálního stavu se skrývá pod nabídkou Soubor -> Konec. 5.4.
5.4
UKÁZKA HOTOVÉ DEMO APLIKACE
Ukázka hotové demo aplikace
Obrázek 5.1 ukazuje testovací rozhraní hotové aplikace. Na obrázku je moºné vid¥t jak nabídku predikovaných slov, tak nabídku predikovaných v¥t.
64
KAPITOLA 5.
MANUÁL APLIKACE PRO PREDIKCI TEXTU
Obrázek 5.1: Ukázka hotové aplikace.
Kapitola 6 Testování V této kapitole se pokusím n¥jakým zp·sobem otestovat vytvo°enou aplikaci. Pokusím se zjistit, jestli predik£ní systém skute£n¥ pracuje a do jaké míry je jeho £innost efektivní a zda napomáhá uºivateli p°i psaní textu. 6.1
Zp·sob, pr·b¥h a výsledky testování
Nejprve vyzkou²ím testovat s prázdným systémovým slovníkem £asto pouºívaných slov a v¥t. Poté systém nau£ím ze základního slovníku n¥kolik slov a pokusím se napsat dané v¥ty (testovací odstavec) znovu. Dále vyzkou²ím k tomuto základnímu slovníku dou£it slova z textového souboru, který není p°íli² podobný s psaným odstavcem. Systému samoz°ejm¥ dovolím se u£it z jiº napsaných v¥t. Testovat rychlost napsání testovacího odstavce nemá p°íli² význam, nebo´ cílová skupina uºivatel· je práv¥ po fyzické stránce postiºená. Testovat tedy budu minimální pot°ebný po£et stisk· klávesy a vºdy, kdyº to bude moºné, vyuºiji predikované nabídky. Kaºdý stisk jednoho znaku klávesnice a kaºdý klik do predik£ní nabídky si p°ipo£ítám a následn¥ výsledky zobrazím. Testovat budu na jednom testovacím odstavci. Bude se jednat o text o celkovém po£tu znak· (v£etn¥ mezer) 685. Základní slovník, kterým nau£ím systém je následující: a ale jak kde kdy jak proc protoºe nebo nebo´ chci nechci umím bolí nebolí k°e£ rychle pomale u£it nau£it pracovat utíkat b¥hat skákat mám nemám mít nemít milovat klamat lámat zlomit umím mohu nemohu
•
Test £íslo 1
Prázdný slovník slov a v¥t. Celkový po£et stisk· klávesy: 621. • Test £íslo 2 Slovník slov nau£en pouze základními sloví£ky. Celkový po£et stisk· klávesy: 605. 65
66
KAPITOLA 6.
•
TESTOVÁNÍ
Test £íslo 3
Slovník slov nau£en základními sloví£ky a dále je nau£en z textového souboru, který není p°íli² podobný s psaným odstavcem. Celkový po£et stisk· klávesy: 560. • Test £íslo 4 Slovník slov nau£en základními sloví£ky a dále je nau£en z textového souboru, který obsahuje p°ímo n¥kolik v¥t z daného odstavce. Celkový po£et stisk· klávesy: 423. Testovací odstavec, který jsem psal je následující. V n¥m jsou také vyzna£eny v¥ty, které jsem nau£il systém v testu £íslo 4. Slovem p°íb¥h obvykle ozna£ujeme dv¥ r·zné i kdyº navzájem propojené záleºitosti. , co se opravdu stalo, ozna£ujeme jím n¥jakou reálnou událost nebo i skupinu navzájem propojených d¥j· a událostí. N¥jaký skute£ný d¥j, , n¥co, co se opravdu stalo. , který se snaºí smy²leným p°íb¥hem zatajit, zakrýt £i vyt¥snit skute£ný pr·b¥h událostí, který je mu z n¥jakých d·vod· nep°íjemný (smy²lenka, kce, leº). M·ºe se ale jednat i o spole£enskou manipulaci, úmyslný ºert, um¥lecký zám¥r, um¥lecký popis skute£nosti apod. V hlavním významu p°íb¥h znamená n¥co
který m¥l sv·j jasný po£átek i z°etelný konec
U
smy²lených p°íb¥h· se m·ºe jednat jak o utilitární jednání n¥jakého jednotlivce
6.1.1 Zhodnocení testování
Jak je z°ejmé ze sniºujících se pot°ebných po£t· stisk· klávesy k napsání daného odstavce, aplikace pracuje správn¥. Co se jednotlivých test· tý£e, jsou výsledky celkových pot°ebných stisk· kláves samoz°ejm¥ rozdílné, a to postupn¥ klesající. Obrázek 6.1 ukazuje na grafu, jak si dané testy vedly. Osa y popisuje celkový po£et pot°ebných stisk· na napsání daného testovacího odstavce. Osa x pak popisuje po£et vyuºitých nabídek slov £i v¥t z predikovaného seznamu. Jak je vid¥t z grafu, nejmén¥ nabídek z predikovaného seznamu nabídl test £íslo 1. To proto, ºe na po£átku nem¥l ºádný základní slovník nau£ený a za£al se u£it postupn¥ s psaním textu. M¥lo by být také patrné, a to nejenom na testu £íslo 1, ºe klesající k°ivky by m¥ly stále více klesat. Znamená to, ºe systém má nau£ených více slov, a tudíº by m¥l poskytovat více vhodných nabídek. Skute£nost, ºe se modrá (plná) k°ivka, tedy k°ivka testu £íslo 1, dostala pod k°ivku £ervenou (prokládaná) a zelenou (£árkovaná) znamená pouze to, ºe je nejkrat²í a £ili není vykreslena aº do konce. Test £íslo 2 byl jiº více nau£ený v prvotní fázi, a tudíº celkov¥ poskytl více nabídek z predik£ního listu slov a celkov¥ tak oproti testu £íslo 1 sníºil celkový pot°ebný po£et
6.1.
ZPSOB, PRB
H A VÝSLEDKY TESTOVÁNÍ
67
Obrázek 6.1: Výsledky testování. úhoz·. Test £íslo 3 byl nau£ený je²t¥ více, a tudíº se projevil jako je²t¥ lep²í. eho jsem si v²ak v²iml bylo, ºe n¥kdy mén¥ znamená více. Kdyº bylo nau£eno více slov, musel jsem n¥kdy pro vhodné sloví£ko napsat více po£áte£ních znak·, aby se v predik£ním listu dostalo do první desítky. Na druhou stranu v²ak bylo slov nabízeno více, jak je vid¥t na grafu. Nejefektivn¥j²ím je samoz°ejm¥ test £íslo 4, nebo´ znal jiº velkou slovní zásobu, a k tomu se nechal nau£it p°ímo 3 celé v¥ty, které následn¥ byly také pouºity. Díky tomuto byla u²et°ena spousta úhoz·. Na grafu je z°eteln¥ vid¥t, kdy k dané nabídce t¥chto 3 v¥t do²lo a do jaké míry do²lo k u²et°ení po£tu úhoz·. První v¥ta byla nabídnuta jiº jako 3. v po°adí, 2. v¥ta jako 11. v po°adí a v¥ta 3. jako 17. v po°adí. Dále by bylo dobré zmínit, do jaké míry do²lo k u²et°ení celkového po£tu úhoz·. Toto ukazuje tabulka 6.1. Test
íslo 1 íslo 2 íslo 3 íslo 4 krát.
Celkový po£et znak· Po£et pot°ebných úhoz· Po£et u²et°ených úhoz·
685 621 64 685 605 80 685 560 125 685 423 262 Tabulka 6.1: Zhodnocení výsledk· testování. Poslední idealistický výsledek nám celkový po£et pot°ebných úhoz· sniºuje aº 2,6
Nakonec bych podtrhl, ºe nejefektivn¥j²í vlastností pro predikci následných £i práv¥ psaných slov je práv¥ vlastnost následná slova. Nejmén¥ efektní je pak vlastnost
68 zabarvení slova a slovní druh. Tyto vlastnosti by byly více efektivní, kdyby se systém nechal nau£it vhodn¥ oklasikovaným textem a následn¥ psaný text by byl spí²e zabarvený kladn¥ £i záporn¥. Slovní druhy by byly nejvíce efektivní, kdyby se psané v¥ty skládaly vºdy z práv¥ jednoho podstatného jména, jednoho p°ídavného jména a jednoho slovesa. Nic mén¥ ob¥ tyto vlastnosti byly p°i testováni n¥kolikrát vyuºity. KAPITOLA 6.
6.2
TESTOVÁNÍ
Srovnání s existujícími °e²eními
Pro srovnání jsem vybral dv¥ °e²ení, která jsou uvedena v £ásti existující implementace. Jedná se o aplikaci Dasher a Read & Write GOLD. Jak ale porovnat moji aplikaci s t¥mito docela odli²nými programy? Nejv¥t²ím problémem je jazyk, nad kterým byly ob¥ dv¥ aplikace tvo°eny. Jedná se o angli£tinu. Svoji aplikaci mám postavenou nad £eským jazykem. Co se tý£e programu Dasher, podporuje spoustu jazyk· a mezi nimi i £e²tinu. Oba dva programy byly v²ak implementovány pro jiný typ cílové skupiny uºivatel·. Program Dasher vyºaduje uºivatele, který je schopný reagovat na rychlou odezvu. Naopak má aplikace v·bec nevyºaduje rychlou odezvu uºivatele, a to p°edev²ím z d·vodu fyzického postiºení cílové skupiny uºivatel· mé aplikace. Byla snaha srovnat svoji aplikaci s t¥mito programy, ale jak se zmi¬uji vý²e, zjistily se rozdílnosti, kv·li kterým nejsem schopen ú£eln¥ porovnat svoji aplikaci s aplikacemi Dasher a Read & Write GOLD za b¥hu £i podle rychlosti psaní. Proto provedu srovnání alespo¬ z pohledu výhod a nevýhod jednotlivých °e²ení. Toto srovnání ukazuje tabulka 6.2.
6.2.
69
SROVNÁNÍ S EXISTUJÍCÍMI EENÍMI
Dasher
Výhody iroká ²kála moºností ovládání. Spousta jazyk· v£etn¥ £e²tiny. Zajímavé GUI, psaní textu p°ipomíná hraní hry.
Nevýhody Uºivatel musí postupovat pomalu a nesp¥chat. Nenabízí predikci v¥t. Pomalé psaní v¥t, uºivatel musí doslova vyhledávat písmenka.
Read & Write GOLD
Výhody iroká spousta dal²ích aplikací.
Nevýhody Nenabízí predikci v¥t.
Má aplikace
Výhody Umoº¬uje predikci slov i v¥t a k této predikci vyuºívá spoustu vlastností. Barevné Pouze Nenutí odli²ení více angli£tina. uºivatele pravd¥podobpsát rychle ných slov. £i naopak Moºnost pomalu. £tení Toto tempo nabízených si volí uºislov. vatel sám. e²tina. Tabulka 6.2: Výhody a nevýhody jednotlivých °e²ení.
Nevýhody Pokud nové slovo není v £eském jazyce, neuloºí se. P°i velké spoust¥ slov v systémovém slovníku dochází ke zpomalení predikce.
70
KAPITOLA 6.
TESTOVÁNÍ
Kapitola 7 Záv¥r Cílem této diplomové práce bylo navrhnout a implementovat nástroj pro predikci slov, frází £i £ástí v¥t. Hlavním ú£elem tohoto nástroje by tedy m¥lo být zjednodu²ení a zrychlení psaní textu. Nástroj by m¥l být vhodný pro cílovou skupinu uºivatel·, kte°í mají omezenou schopnost pohybu a reakce. Dále by se m¥l tento nástroj u£it z textu napsaného uºivatelem. Dal²ím cílem pak bylo také navrhnout velmi jednodu²e vhodné uºivatelské za°ízení. Implementace zapo£ala nejd°íve knihovní £ástí (aplika£ní) a aº následn¥ návrhem a implementací testovacího GUI ( ). Tvorba knihovní £ásti za£ala vytvo°ením t°ídy denující slovo. Poté na£tením velkého slovníku £eských slov a moºností vyhledávat zadaná slova v tomto velkém slovníku na základ¥ shodnosti po£áte£ních znak·. Postupn¥ se p°ipojovaly dal²í vlastnosti pro predikci, a to v£etn¥ predikce v¥t, a tak vznikl nástroj, který, jak sám pevn¥ v¥°ím, bude vyuºitý lidmi, kterým nemalou m¥rou pom·ºe p°i psaní textu. Práce vý²e zmín¥né cíle splnila. Navrhl jsem a implementoval nástroj, který na základ¥ uºivatelského vstupu dokáºe predikovat podle nejr·zn¥j²ích vlastností pom¥rn¥ efektivn¥ slova rozepsaná £i slova následná. Pokud systém jiº má n¥které v¥ty nau£ené od uºivatele, pak po napsání dvou a více slov dokáºe predikovat i tyto v¥ty. Nástroj se u£í na základ¥ vstupního textu, navíc se nástroj nechá nau£it i z textového souboru. V kapitole Testování jsem zjistil, ºe nástroj je schopný u²et°it danému uºivateli tém¥° aº jednu t°etinu pot°ebných úhoz·. Z tohoto vyplývá, ºe nástroj je efektivní a ºe skute£n¥ usnad¬uje a urychluje psaní. Co se tý£e návrhu GUI ( ), vyuºil jsem znalosti, ºe spoust¥ hendikepovaným lidem, kte°í nejsou schopni psát v²emi deseti, nevyhovuje klasické uspo°ádání klávesnice, ale spí²e preferují se°azení znak· podle abecedy. Do tohoto návrhu jsem vloºil pouze znaky pot°ebné k napsání jednoduchých v¥t s moºností pouºití £íslic. Dal²í tla£ítka jsou pak ta, která ovládají systém. 71 Graphical User Interface
Graphical User Interface
72
KAPITOLA 7.
ZÁV
R
Práce na tomto projektu byla pro m¥ zajímavou a p°ínosnou. Díky této práci jsem si dostate£n¥ osvojil programovací jazyk C#. Na práci je moºné v budoucnu zdokonalit výpo£et váhy u predikce slov a v¥t. Bylo by vhodné v¥novat nemálo £asu testování a up°esnit nastavení konstant, které danou predikci ovliv¬ují. I kdyº je výsledek práce uspokojivý, tak se p°i implementaci objevila spousta nápad·, kterými by se daná problematika samoz°ejm¥ nechala dále vylep²ovat.
Literatura [1] Predikce textu obecn¥ o predikci textu.
. [2] Dokon£ování slov obecn¥ o systémech s podporou dokon£ování slov. http://en.wikipedia.org/wiki/Word_completion. [3] Dokon£ování frází a v¥t obecn¥ o systémech s podporou dokon£ování frází a v¥t. http://en.wikipedia.org/wiki/Line_completion. [4] Dasher popis programu. http://en.wikipedia.org/wiki/Dasher/, stav z 15.2.2011. [5] Dasher podrobný popis funk£nosti programu. http://library.gnome.org/users/dasher/stable/basics.html.en. [6] David J. Ward, Alan F. Blackwell and David J.C. MacKay. Dasher - a Data Entry Interface Using Continuous Gestures and Language Models. . [7] Byron Knoll. Text Prediction and Classication Using String Matching. . [8] Read & Write popis funk£nosti programu. http://www.synapseadaptive.com/texthelp/read&write_gold/. [9] ClaroRead popis funk£nosti programu. http://help.clarodownloads.com/manuals/ClaroRead-5.5-en-gb.pdf. [10] T9 popis funk£nosti programu. http://en.wikipedia.org/wiki/T9_(predictive_text). [11] Slovní druhy slovní druhy v lingvistice. http://cs.wikipedia.org/wiki/Slovn%C3%AD_druh. http://en.wikipedia.org/wiki/Predictive_text#cite_note-1
Cavendish and
Computer Laboratory, Cambridge
Department
of Computer Science, University of British Columbia
73
74
LITERATURA
Kapitola 8 Seznam pouºitých zkratek Graphical User Interface PPM Prediction by Partial Match KMP Knuth-Morris-Pratt Algorithmus R&W Read & Write GOLD Program SMS Short Message Service URL Uniform Resource Locator PDF Portable Document Format CD Compact Disc GUI
75
76
KAPITOLA 8.
SEZNAM POUITÝCH ZKRATEK
Kapitola 9 Obsah p°iloºeného CD Na p°iloºeném CD ( PDF ( poskytne vedoucí práce.
Compact Disc
Portable Document Format
) nosi£i je uloºena sepsaná diplomová práce ve formátu ) a implementovaná diplomová práce. Dal²í informace
Obrázek 9.1: Obsah p°iloºeného CD 77