České Vysoké Učení Technické v Praze Fakulta Elektrotechnická Katedra počítačů
Bakalářská práce
Modul pro vyhledání informací pro Android Otakar Chasák
Vedoucí práce: Ing. Tomáš Novotný Studijní program: Elektrotechnika a informatika, strukturovaný, bakalářský Obor: Výpočetní technika
5. ledna 2012
Poděkování Rád bych poděkoval vedoucímu práce Ing. Tomáši Novotnému za cenné rady a pomoc při zpracování bakalářské práce.
Prohlášení Prohlašuji, že jsem svou bakalářskou 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 6.1.2012
…………………………………
Abstract The goal of this barchelor thesis was to design and implement an application for searching informations from different sources. This application is determined for Android operating system. Searching modules for information sources were implemented together with the application. Additional modules can be added to this application. Modules can save the obtained informations to database, which is located on SD card or can be downloaded from the sources.
Abstrakt V rámci této bakalářské práce byla navržena a implementována aplikace pro vyhledávání v informačních zdrojích. Aplikace je určená pro operační systém Android. Spolu s aplikací byly implementovány vyhledávácí moduly pro informační zdroje. O další moduly lze aplikaci rozšířit. Moduly mohou získané informace ukládat do databáze na SD kartu nebo je stahovat z informačních zdrojů.
Obsah 1. 2. 3.
Úvod ...............................................................................................................................1 Popis řešeného problému a požadavků...........................................................................3 Rešerše existujících řešení..............................................................................................5 3.1. Dictionary.com .......................................................................................................5 3.2. Advanced English & Thesaurus .............................................................................7 3.3. Multi Lang Dictionary ............................................................................................9 3.4. Wordmate .............................................................................................................10 3.5. Colordict ...............................................................................................................12 3.6. Překladač Google..................................................................................................14 3.7. Fora dictionary......................................................................................................15 3.8. Srovnávací tabulka ...............................................................................................18 3.9. Motivace ...............................................................................................................19 4. Analýza.........................................................................................................................21 4.1. Použité technologie...............................................................................................21 4.2. Použité zdroje informací.......................................................................................22 4.3. Případy užití..........................................................................................................23 5. Architektura ..................................................................................................................27 5.1. Uživatelské rozhraní .............................................................................................27 5.2. JavascriptInterface ................................................................................................31 5.3. ModuleInterface....................................................................................................32 5.4. Implementace databáze.........................................................................................33 6. Implementované moduly pro získávání informací .......................................................37 6.1. Modul SlovnikCz..................................................................................................37 6.2. Modul Wikipedia..................................................................................................38 6.3. Modul offline........................................................................................................39 6.4. Modul Wiktionary ................................................................................................40 6.5. Modul Bing Translate...........................................................................................40 6.6. Modul Google Translate.......................................................................................41 7. Tvorba nových modulů pro vyhledávání......................................................................43 8. Tvorba šablon pro zobrazení výsledků vyhledávání ....................................................45 9. Testování ......................................................................................................................47 10. Závěr.........................................................................................................................49 11. Seznam použitých zkratek ........................................................................................51 12. Literatura ..................................................................................................................53 13. Přílohy ......................................................................................................................55 13.1. Srovnání existujících řešení..............................................................................57 13.2. UML diagramy .................................................................................................58 13.3. Instalační příručka ............................................................................................62 13.4. Uživatelská příručka .........................................................................................62 14. Obsah přiloženého CD..............................................................................................65
Seznam obrázků Obrázek 1 Historie vyhledávání v aplikaci Dictionary.com...................................................7 Obrázek 2 Zobrazení výsledků vyhledávání v aplikaci Dictionary.com................................7 Obrázek 3 Našeptávač v aplikaci Advanced English & Thesaurus........................................8 Obrázek 4 Zobrazení výsledků v aplikaci Advanced English & Thesaurus ..........................8 Obrázek 5 Výsledek vyhledávání je zobrazen spolu s reklamou (aplikace Multi lang dictionary).............................................................................................................................10 Obrázek 6 Našeptávač v aplikaci WordMate .......................................................................12 Obrázek 7 Zobrazení výsledků vyhledávání v aplikaci WordMate .....................................12 Obrázek 8 Zobrazení výsledků v aplikaci ColorDict ...........................................................13 Obrázek 9 Nastavení slovníků aplikace ColorDict...............................................................13 Obrázek 10 Zobrazení výsledků vyhledávání v aplikaci Překladač Google ........................15 Obrázek 11 Zobrazení výsledků vyhledávání v aplikaci Fora dictionary ............................16 Obrázek 12 Případy užití ......................................................................................................24 Obrázek 13 Úvodní obrazovka spolu s menu implementované aplikace.............................29 Obrázek 14 Našeptávač implementované aplikace ..............................................................29 Obrázek 15 Zobrazení historie vyhledávání.........................................................................30 Obrázek 16 Nastavení modulů .............................................................................................30 Obrázek 17 Zobrazení výsledků vyhledávání ......................................................................31 Obrázek 18 Ukázka JSON objektu vráceného metodou getSources() .................................31 Obrázek 19 Schéma history databáze...................................................................................33 Obrázek 20 Schéma databáze modulů..................................................................................35 Obrázek 21 JSON s výsledky vyhledávání modulu SlovnikCz ...........................................38 Obrázek 22 JSON s výsledkem vyhledávání ve Wikipedii..................................................39 Obrázek 23 JSON s výsledky vyhledávání z modulu offline...............................................39 Obrázek 24 Formát JSON objektů modulu Wiktionary .......................................................40 Obrázek 25 Ukázka implementace metody getDownloadConnections().............................43 Obrázek 26 Ukázka html kódu pro spuštění dalšího vyhledávání........................................46 Obrázek 27 Ukázka použití ikony s vlajkou.........................................................................46 Obrázek 28 Použití novější verze JSON...............................................................................46 Obrázek 29 Diagram tříd v balíčku presentation..................................................................58 Obrázek 30 Diagram tříd výchozí aktivity ...........................................................................59 Obrázek 31 Diagram tříd aktivity pro nastavení modulů .....................................................60 Obrázek 32 Diagram tříd aktivity historie............................................................................60 Obrázek 33 Diagram tříd modulů.........................................................................................61 Obrázek 34 Adresářová struktura na přiloženém CD...........................................................65
Seznam tabulek Tabulka 1 Zhodnocení existujících aplikací.........................................................................18 Tabulka 2 Výchozí metody pro generování html kódu z JSON...........................................45 Tabulka 3 Srovnání existujících řešení.................................................................................57
1. Úvod V posledních letech prudce narostl počet mobilních zařízení, zejména tzv. „chytrých telefonů“. Mezi charakteristické znaky těchto telefonů patří pokročilý operační systém a funkce, které dříve zastávaly počítače (emailový klient, internetový prohlížeč apod.). Jedním z rozšířených operačních systémů používaných na mobilních zařízeních je OS Android. Jedná se o open source platformu, která je navržena pro použití na různém hardwaru. Android je nejrychleji rostoucí mobilní platforma na světě. Ve druhém čtvrtletí 2009 mělo 2,8 % prodaných mobilních zařízení platformu Android. O dva roky později již používalo tuto platformu 48 % zařízení.[1][2] Velký rozmach zažívá i trh s aplikacemi pro tato zařízení. Aplikace určené pro mobilní zařízení mají svá specifika a odlišnosti od aplikací určených pro jiná zařízení. Jedná se například o optimalizaci grafického rozhraní, důraz na dlouhou výdrž baterie nebo výpočetní výkon zařízení. V této práci jsem se zabýval aplikací pro vyhledávání informací pro operační systém Android. Podobné aplikace pro Android již existují, některé z nich popíši v kapitole Rešerše existujících řešení. Z porovnání těchto aplikací bude patrné, jaká funkcionalita by měla být implementována v aplikaci.
1
2
2. Popis řešeného problému a požadavků Zadání práce lze rozdělit na dvě části:
první částí je samotná aplikace, která spravuje jednotlivé vyhledávací moduly, jejich nastavení a zobrazení výsledků vyhledávání druhou část tvoří jednotlivé moduly pro vyhledávání informací.
Každý vyhledávací modul vyhledává v jednom zdroji informací. Tyto zdroje se mohou velmi lišit, co do typu poskytovaných informací, tak do způsobu jejich uložení, formátu, tak i způsobu jejich získávání. Může se jednat o různé druhy slovníků, encyklopedie, vyhledávače. Mohou být uloženy lokálně na mobilním zařízení (např. v databázi), přístupné pomocí API apod. Vzhledem k velkému počtu informačních zdrojů, jejich různorodosti, je třeba zajistit jednoduché rozšíření aplikace o nové moduly, včetně možnosti ovlivnit zobrazení jejich výsledků vyhledávání. Samotný vývoj pro platformu Android přináší některé odlišnosti od vývoje desktopové aplikace. Doporučení pro vývoj výkonnějších aplikací[3]:
Preferovat statické metody před instančními Nepoužívat settery a gettery Pro konstanty používat deklaraci static final
Funkční požadavky Funkční požadavky popisují funkce, které aplikace musí vykonávat. Některé z nich přímo vyplývají ze zadání bakalářské práce.
Aplikace bude vyhledávat v informačních zdrojích Aplikace umožňuje nastavení informačních zdrojů Aplikace uchovává historii vyhledávání Aplikace poskytuje možnost nastavení vyhledávaných jazyků
Nefunkční požadavky Nefunkční požadavky zachycují omezení uvalená na danou aplikaci.
Aplikace bude fungovat na operačním systému Android Aplikace bude mít přívětivé uživatelské rozhraní Snadná rozšiřitelnost aplikace o další vyhledávací moduly
3
4
3. Rešerše existujících řešení V současné době existuje mnoho aplikací pro vyhledávání informací pro operační systém Android. Mezi nejčastější patří slovníky, které obsahují různé datové podklady. Ty mohou být uloženy lokálně v telefonu, nejčastěji na SD kartě, nebo při vyhledávání používat data získaná vzdáleně ze serverů. Aplikace mohou kromě dvojjazyčných slovníků obsahovat i výkladové slovníky. Mezi služby vyžadující datové připojení patří Google Translate, pro kterou Google poskytuje API. Její výhodou oproti ostatním je překlad vět nebo celého textu. Další zdroj pro online překlady je Google Dictionary, zde již Google neposkytuje API. V tomto případě aplikace zobrazí přímo výslednou stránku této služby ve webovém prohlížeči. V případě offline zdrojů je často používaný formát StarDict. Tyto slovníky jsou volně ke stažení. Jedna z níže popsaných aplikací umožňuje tvorbu vlastních slovníků. Aplikace, které jsou v této kapitole popsané, jsem vybral na základě hodnocení a počtu instalací v Android Marketu1. Všechny níže popsané aplikace mají vysoké hodnocení(vždy více než čtyři hvězdičky z pěti možných). Počet instalací se pohybuje v rozmezí 50 000 – 100 000 (WordMate, Fora dictionary[4]) až po 10 000 000 – 50 000 000 (Google překladač, Dictionary.com[5]). Vybrané aplikace: Dictionary.com Advanced English & Thesaurus Multi Lang Dictionary Wordmate Colordict Překladač Google Fora dictionary U každé aplikace je posáno grafické uživatelské rozhraní, funkčnost a zdroje dat.
3.1.
Dictionary.com
Aplikace Dictionary.com vyhledává slova ve slovnících na serverech dictionary.com a thesaurus.com. Na serveru dictionary.com je výkladový slovník anglického jazyka obsahující 375 000 slov a definic, na thesaurus.com je slovník obsahující 300 000 synonym a antonym.[5] Data jsou stahována ze serverů při každém vyhledávání, proto je nutné připojení k internetu. Aplikace obsahuje historii vyhledávaných slov, umožňuje poslání odkazu na výsledek hledání pomocí SMS nebo emailu, popřípadě sdílení přes Facebook a Twitter.
Grafické uživatelské rozhraní a funkčnost Grafické rozhraní aplikace je rozděleno na tři části. U horního okraje obrazovky je textové pole pro vyhledávané slovo, pokud na něj uživatel klikne, aplikace zobrazí rozhraní pro vyhledávání. Pod textovým polem je prostor, kde jsou zobrazovány výsledky
1
Internetový obchod nabízející aplikace pro platformu Android
5
vyhledávání nebo položky historie atd. U dolního okraje obrazovky je lišta s tlačítky pro jednotlivé funkce. První tlačítko (Daily) zobrazuje slovo dne (word of the day), různá slova z angličtiny a španělštiny s definicí. Tlačítko (Favourites) zobrazuje seznam slov, která si uživatel označil jako oblíbená. Po kliknutí na slovo se zobrazuje výsledek vyhledávání z dictionary.com respektive thesaurus.com podle toho, který výsledek uživatel přiřadil do oblíbených. Další tlačítko (Search) zobrazuje seznam vyhledávaných slov seřazený podle času vyhledávání a vpravo od textového pole je ikona pro spuštění vyhledávání. Mezi lištou s tlačítky pro jednotlivé funkce a seznamem slov je tlačítko pro smazání, které zabírá více místa něž by bylo nutné, v historii se proto zobrazí méně položek, pokud chce uživatel další položky, musí rolovat. Pod textovým polem se pomocí tlačítka zvolí, který slovník bude prohledán. Aplikace zobrazuje výsledky buď ze zdroje dictionary, nebo thesaurus, mezi zdroji lze přepínat při vyhledávání nebo pomocí ikony přímo na stránce s výsledky. U hledaného slova je napsána výslovnost. Výsledky z výkladového slovníku (dictionary.com) jsou číslovány a rozděleny podle slovních druhů, samostatně jsou zobrazeny idiomy, u sloves také frázová slovesa. U nalezeného významu je zobrazena definice a příklad použití, popřípadě zda se jedná o slangové vyjádření. Jako poslední se zobrazuje stručný původ slova (letopočet a původní slova). Aplikace umožňuje také přehrání výslovnosti. V případě vyhledávání v thesaurus.com je pro každý význam nalezeného slova zobrazen slovní druh a definice, pak následuje výčet synonym a antonym. Pokud jsou nalezená synonyma či antonyma neformální, jsou označena. Aplikace pro Android zobrazuje podstatně méně hodnot než vyhledávač na serverech, při vyhledávání ve výkladovém slovníku zobrazuje výsledky ze slovníku Random House Dictionary. Webový vyhledávač nabízí výsledky i z jiných zdrojů, například Collins English Dictionary, Online Etymology Dictionary (historie a původ slova) nebo Dictionary of English Slang and Colloquial Expressions. V případě vyhledávání v thesaurus.com jsou zobrazené výsledky také pouze ze slovníku Random House Dictionary. Na rozdíl od webového vyhledávače neumožňuje program překlad mezi jazyky. Na stránce s výsledky lze kliknout na libovolné slovo a tím spustit nové vyhledávání, nalezené výsledky jsou zobrazeny ve stejné aktivitě, takže se nelze vracet pomocí klávesy zpět k předchozím vyhledáváním. K předchozím vyhledáváním se uživatel vrátí pouze přes položky v historii. Výsledek vyhledávání lze sdílet na Facebooku, Twitteru nebo odeslat SMS a emailem. Po sdílení nebo odeslání se nelze vrátit na stránku s výsledky, i když toto zobrazení obsahuje i tlačítko zpět, pomocí kterého se uživatel ale nevrátí na stránku s výsledky, ale do historie hledání. Pokud se chce vrátit na výsledky, musí vybrat hledané slovo z historie. Mezi navigační lištou se záložkami a výsledkem hledání je reklama, místo které by mohlo být zobrazeno více výsledků. Čtvrté tlačítko umožňuje vyhledávání pomocí hlasu, výsledky jsou poté zobrazeny stejně jako při vyhledávání pomocí textové vstupu. Poslední tlačítko obsahuje nastavení, kde lze měnit pouze pozadí aplikace.
6
Obrázek 1 Historie vyhledávání v aplikaci Dictionary.com
Obrázek 2 Zobrazení výsledků vyhledávání v aplikaci Dictionary.com
Srovnání Oproti většině ostatních aplikací poskytuje Dictionary.com data pouze z jednoho slovníku, nenabízí uživateli možnost doinstalovat vlastní slovník. Data získaná z toho slovníku jsou navíc rozdělena do dvou částí a uživatel mezi nimi musí přepínat. Výsledné zobrazení dat je přehledné, ale v části obrazovky, kde by mohlo být zobrazeno více výsledků, je reklama. Stejná situace je i v horní části obrazovky, kde jsou tlačítka pro přehrání výslovnosti, sdílení a přepínání slovníku, které by mohly být realizovány například pomocí menu. Aplikace celkově nevyužívá možnosti uživatelského rozhraní, které nabízí operační systém Android (spouštění nových aktivit, kontextové menu). Oproti ostatním aplikacím se špatně ovládá kvůli malým tlačítkům.
3.2.
Advanced English & Thesaurus
Program Advanced English & Thesaurus umožňuje prohledávání slovníku WordNet. Po nainstalování aplikace je stažen WordNet do telefonu, tím je umožněno vyhledávání i bez připojení k internetu. V nastavení aplikace lze zvolit úložiště pro slovníky (SD karta, nebo paměť telefonu). Při vyhledávání lze použít tři filtry. Aplikace poskytuje našeptávač.
Grafické uživatelské rozhraní a funkčnost Uživatelské rozhraní aplikace používá prvky z grafického rozhraní systému Android. V aktivitě pro vyhledávání se u horního okraje obrazovky nalézá vyhledávací pole, pod ním je seznam slov z WordNetu seřazený podle abecedy. Seznamem je možno procházet. Při psaní do vyhledávacího pole je seznam slov posouván, aby byla zobrazena slova, která nejvíce odpovídají vyhledávanému textu. Seznam je opět možno procházet oběma směry. Po kliknutí na výsledek vyhledávání je spuštěna nová aktivita, kde jsou zobrazeny podrobnosti o slovu. Pomocí hardwarové klávesy menu lze vyvolat menu programu. První položkou menu je Filter, který umožňuje volit filtr použitý při prohledávání slovníku. Při použití filtru je vpravo od vyhledávacího pole zobrazena ikona filtru, která se pohybuje, po skončení hledání je ikona statická. Fuzzy filtr lze použít, pokud si uživatel 7
není jist psanou podobou. Tento způsob vyhledávání je časově náročný. Po kliknutí na výsledek vyhledávání dojde ke spuštění nové aktivity se zobrazením podrobností o slově. Pomocí klávesy Zpět se lze vrátit do aktivity s výsledky vyhledávání. Wildcard filter umožňuje použití zástupných znaků - ? pro jeden znak a * pro skupinu znaků. Tento filtr je podstatně rychlejší než fuzzy filtr. Filtr keyword vyhledává zadané slovo i ve složených slovech. Při vypnutí filtru je použito abecední vyhledávání. Po zvolení položky history z menu je spuštěna nová aktivita, která zobrazuje posledních 50 vyhledaných slov. Po kliknutí na slovo je zobrazena aktivita s podrobnostmi o slově, po jejím zrušení je zrušena i aktivita s historií a je obnovena aktivita s vyhledáváním. Historii vyhledávání lze smazat z menu. Další položkou v menu je Settings, kde lze zvolit umístění pro uložení slovníků (SD karta, nebo paměť telefonu) a smazat data v cache. Položka More dictionaries spustí Android Market, kde jsou nabízeny ke stažení další produkty vývojáře. Pro zobrazení aktivit o konkrétních slovech je použit WebView. Nalezené významy jsou rozděleny podle slovních druhů a očíslovány. Pro každý význam je zobrazen synset (synonyma), ve kterém se slovo vyskytuje, jeho definice, ukázková věta a druh vazby (hyponymum, holonymum, antonymum…) a odkaz na synset, který s ním tvoří vazbu. Kliknutí na odkaz nebo libovolné slovo v textu spustí vyhledávání a novou aktivitu. Pokud se zobrazené výsledky nevejdou na jednu obrazovku a musí se rolovat, nelze kliknout na slovo či odkaz, který je úplně dole uprostřed, protože je překrytý tlačítky pro přiblížení a oddálení. Pomocí hardwarového tlačítka menu lze spustit menu, které obsahuje položky Back a Forward pro procházení spuštěných aktivit. Pomocí položky History můžete vyhledat například minulé slovo a potom pomocí Back a Forward přecházet mezi jednotlivými výsledky. Položka List slouží pro návrat do aktivity pro vyhledávání (aktivity s konkrétními slovy jsou zrušeny). Ostatní položky menu jsou shodné s menu v základní aktivitě.
Obrázek 3 Našeptávač v aplikaci Advanced English & Thesaurus
Obrázek 4 Zobrazení výsledků v aplikaci Advanced English & Thesaurus
8
Srovnání V porovnání s aplikací Dictionary.com používá Advanced English grafické uživatelské rozhraní pro Android, využívá i dalších možností jako je spouštění aktivit, využití historie ve WebView. Díky tomuto uspořádání lze porovnávat výsledky vyhledávání více slov pomocí procházení historie WebView. Lepší je i uspořádání grafických prvků tak, že zbývá více místa pro zobrazení výsledků. Tato aplikace vyhledává pouze ve slovníku WordNet, uživatel nemá možnost stáhnout nebo nahrát jiný slovník například ve formátu StarDict. Oproti ostatním aplikacím které umožňují vyhledávat ve Wordnet (ColorDict, WordMate, Fora dictionary) zobrazuje tato aplikace i vazby mezi jednotlivými synsety (hyperonyma, meronyma, …). Při vyhledávání ve WordNetu zobrazuje tato aplikace nejvíce podrobností o daném synsetu a jeho vazbách na ostatní synsety.
3.3.
Multi Lang Dictionary
Program Multi Lang Dictionary je dostupný v základní verzi a ve verzi PRO. Základní verze je zdarma a poskytuje překlady mezi více než 50 jazyky pomocí Google Translate a Wiktionary. V této verzi je vyžadováno připojení k internetu. Aplikace umožňuje stažení hlasového analyzátoru pro přehrání výslovnosti v různých jazycích. Ve verzi PRO je podpora pro offline slovníky uložené na SD kartě, 45 slovníků volně ke stažení a odstraněna reklama.
Grafické uživatelské rozhraní a funkčnost Grafické rozhraní má tři části. V horní části obrazovky je umístěna lišta s tlačítky pro volbu zdroje, spuštění vyhledávání a tlačítka pro nastavení vyhledávání. Pod lištou se nachází prostor pro zobrazení výsledků, ty se zobrazují ve WebView, který jde tlačítky přibližovat, respektive oddalovat. Ve spodní části obrazovky se nachází lišta s tlačítky pro přehrání výslovnosti (Speak), zakoupení licence pro verzi PRO (Pro Key) a pro zobrazení informací o programu a nápovědy (About). V levém horním rohu se nalézá tlačítko pro volbu zdroje, po stisku si uživatel může vybrat mezi Google Dictionary, Wiktionary nebo SD kartou. Tato nabídka je zobrazena na liště pod tlačítkem. Vpravo od tlačítka je vstupní pole pro vyhledávaný text a tlačítko pro spuštění vyhledávání. Při zvolení zdroje Google jsou pod vstupním polem zobrazena tlačítka pro volbu zdrojového a cílového jazyka a přepínání směru překladu. Po kliknutí na tlačítko pro volbu jazyka je zobrazen seznam dostupných jazyků. Při vyhledávání je ve WebView zobrazen výsledek. Překlady jsou rozděleny podle slovních druhů a očíslovány, poté je zobrazen seznam odkazů na fráze, ve kterých se dané slovo vyskytuje, a jejich překlady. Poté jsou zobrazeny definice nalezené na webu, například Wikipedia nebo WordNet. V základní verzi jsou zde zobrazeny reklamy. Po kliknutí na odkaz je spuštěna nová aktivita, kde je zobrazena kompletní stránka služby Google Dictionary. Tento WebView nelze zmenšovat resp. zvětšovat. Po kliknutí na tlačítko F-Screen je také spuštěna nová aktivita. Pokud je ze zdrojů vybrána Wiktionary, lze volit pouze jeden jazyk, ve kterém bude vyhledáváno, pokud uživatel zadá slovo v jiném jazyce, je prohledáván Wikislovník a zobrazen překlad. Výsledek vyhledávání je zobrazen stejně jako webová stránka Wiktionary, i zde jsou přidány reklamy. Výsledky vyhledávání ve Wiktionary se pro jednotlivá slova diametrálně odlišují. Někdy jsou obsaženy pouze překlady, jindy jednotlivé významy, etymologie slova, výslovnost, v češtině i tvary jednotlivých pádů. Oproti webovým stránkám Wiktionary v aplikaci nefungují odkazy. Pomocí tlačítka pod 9
vyhledáváním lze zobrazit Slovo dne (Word of the day), zobrazuje pouze anglická slova a jejich význam. Při dalším vyhledávání není spuštěna nová aktivita, k předchozím výsledkům se lze vracet pouze přes historii. Pokud je ve standardní verzi jako zdroj vybrána SD karta, je v horní liště zobrazeno tlačítko pro volbu offline slovníku a tlačítko pro přepnutí směru překladu. Při zakoupení verze PRO je každý offline slovník uložen v jedné Sqlite databázi na SD kartě. Návod aplikace předepisuje jednotné databázové schéma. V tabulce dbinfo jsou obecné informace o slovníku – název, autor, verze, směr překladu. V tabulce word je sloupec s primárním klíčem, sloupec wname, kde je hledané slovo, a sloupec wmean, kde je význam slova. Toto schéma je možné použít pouze pro jednoduchý překladový slovník, například strukturu WordNetu by zde nebylo možné zachytit. Placená verze umožňuje uživateli vytvářet si vlastní slovníky.
Obrázek 5 Výsledek vyhledávání je zobrazen spolu s reklamou (aplikace Multi lang dictionary)
Srovnání Multilang dictionary nepoužívá nativní grafické uživatelské rozhraní operačního systému Android. V základní verzi poskytuje menší funkčnost než například aplikace ColorDict, ve verzi PRO si uživatel může vytvářet nové slovníky, které jsou uložené v databázi SQLite. Všechny ostatní aplikace využívají různé formáty slovníků, ale nevyužívají databázi. Verze PRO obsahuje 45 připravených dvojjazyčných slovníků, nepodařilo se mi zjistit, z jakých zdrojů tyto slovníky pochází. Ve verzi PRO nabízí oproti ostatním aplikacím jen možnost uložení do databáze SQLite, podpora offline slovníků ve formátu StarDict je i v ostatních aplikacích.
3.4.
Wordmate
Program Wordmate umožňuje vyhledávat ve slovnících uložených na SD kartě. Základní slovníky je možné stáhnout přímo spolu s aplikací. Aplikace umožňuje vytvoření vlastních slovníků nebo použití slovníku ve formátu StarDict. Po uložení slovníků na SD kartu aplikace nevyžaduje připojení k internetu.
10
Grafické uživatelské rozhraní a funkčnost Grafické rozhraní využívá nativní prvky operačního systému Android, jeho uspořádání je podobné jako u aplikace Advanced English. V horní části obrazovky je tlačítko pro přepínání slovníků, textové pole pro vyhledávaný text, tlačítko pro spuštění vyhledávání a pro smazání celého textu. Všechny tyto položky jsou v jedné úrovni a zbytek obrazovky je použit pro zobrazení výsledků vyhledávání. Klávesa Menu spustí nabídku dalších funkcí. Položka nastavení (Settings) umožňuje volbu zobrazení výsledků vyhledávání (Enable Wordlist). Pokud je povolena, položky slovníku jsou zobrazeny v abecedním pořadí a lze mezi nimi rolovat. Při vyhledávání se na první pozici seznamu zobrazuje slovo s nejdelší shodou a pak následují další slova či slovní spojení podle abecedy, díky tomu lze vidět například fráze nebo frázová slovesa, ve kterých je vyhledávané slovo na prvním místě. Po kliknutí na položku seznamu je spuštěna nová aktivita, kde jsou zobrazeny informace o slově. Kliknutí na tlačítko pro vyhledávání zobrazí první položku seznamu. Stejným tlačítkem nebo klávesou Zpět lze přejít k seznamu slov. Pokud je tato volba zobrazení vypnuta, při vyhledávání jsou zobrazovány přímo informace o vyhledávaném slově. Tlačítko pro vyhledávání není zobrazeno. Pomocí tlačítek Prev word a Next word z menu lze přecházet k předchozím respektive k dalším položkám v seznamu. Při použití těchto tlačítek se informace zobrazují ve stejné aktivitě. Mezi jednotlivými slovníky lze přepínat tlačítkem, které je umístěno vlevo od textového pole. Po jeho stisku je zobrazen seznam aktuálně uložených slovníků na SD kartě. Aplikace umožňuje zvolit vždy jen jeden slovník, který bude prohledáván. Při zvolení položky menu Dict downloader je zobrazen seznam aktuálně dostupných slovníků ke stažení. Stáhnout lze anglické výkladové slovníky, WordNet, nebo překladové slovníky anglicko-německý, anglicko-francouzský a anglicko-španělský. Překladové slovníky nabízené ke stažení přímo v aplikaci umožňují pouze jednosměrné vyhledávání z angličtiny do jiného jazyka. Při použití slovníku WordNet jsou informace o slovech děleny podle slovních druhů. Pro každý význam je zobrazen synset, ve kterém se vyhledávané slovo vyskytuje, definice a příklad použití, pokud je k dispozici. Vazby mezi synsety (hyperonyma, synonyma, atd.) zde vůbec nejsou zobrazeny. V případě ostatních slovníků je pro nalezené slovo zobrazen slovní druh a překlady. Pokud má stejné slovo více slovních druhů je pro každý slovní druh položka v seznamu, o který slovní druh se jedná, lze zjistit až po otevření každé položky. Nevýhodou těchto slovníků je překlad pouze směrem z angličtiny do jiného jazyka. Z internetu lze stáhnout slovníky ve formátu StarDict, které stačí rozbalit a nakopírovat do samostatné složky v adresáři wordmate na SD kartě. Pro obousměrný překlad je nutné stáhnout dva slovníky a oba uložit na SD kartu. Přepínání směru překladu je potom možné přepnutím používaného slovníku pomocí tlačítka vlevo od textového pole. Ze stránek aplikace lze stáhnout program pro překlad textového souboru do formátu DWM. Tento slovník je po uložení na SD kartu zobrazen v nabídce slovníků programu Wordmate. Formát vstupního textového souboru je následující. Na prvním řádku je název slovníku (je zobrazen v nabídce slovníků), na druhém řádku je popis slovníku. Tyto informace lze získat přes položku Dict info v menu. Na třetím a každém dalším lichém řádku je text, který lze vyhledat. Na sudých řádcích text, který bude zobrazen po vybrání slova ze seznamu. Výsledný text lze formátovat pomocí vybraných html tagů (odřádkování, barva fontu, tučná písmena nebo kurzíva). Slovník opět umožňuje pouze jednosměrné vyhledávání.
11
Obrázek 6 Našeptávač v aplikaci WordMate
Obrázek 7 Zobrazení výsledků vyhledávání v aplikaci WordMate
Srovnání Aplikace používá grafické uživatelské rozhraní systému Android, jeho rozvržení je podobné jako u aplikace Advanced English Thesaurus, oproti předchozím aplikacím podporuje více slovníků, uživatel si může vytvořit vlastní nebo nahrát na SD kartu slovník ve formátu StarDict. Oproti aplikacím ColorDict a Fora Dictionary neumožňuje prohledávat více slovníků současně. V případě slovníku WordNet nezobrazuje antonyma a vazby mezi synsety. Překladové slovníky jsou dostupné pouze ve formátu StarDict, takže pro každý směr je nutné mít vlastní slovník a mezi nimi přepínat.
3.5.
Colordict
Aplikace podporuje vyhledávání přes Google Translate, nabízí ke stažení slovníky (např. WordNet), slovníky ve formátu StarDict, vyhledává také články na Wikipedii. Aplikace funguje i bez připojení k internetu, pro Wikipedii a Google Translate je připojení nutné. U slov nalezených ve slovníku WordNet nebo Google Translate lze přehrát výslovnost anglických slovíček. Lze doinstalovat slovníky i pro další jazyky (němčina, španělština, …) nebo slovník anglických nepravidelných sloves.
Grafické uživatelské rozhraní a funkčnost Grafické rozhraní je pomocí záložek (TabView) umístěných v horní části obrazovky rozděleno na tři části. V první záložce (Search) je textové pole a tlačítko pro spuštění vyhledávání. V průběhu psaní do textového pole jsou v seznamu pod ním zobrazovány shodné záznamy z offline slovníků, které lze procházet. Po stisknutí tlačítka je spuštěno vyhledávání prvního slova v seznamu. Případně lze zvolit jiné slovo ze seznamu. Při vyhledávání je seznam nahrazen prohlížečem s výsledky. Zároveň jsou prohledány všechny zapnuté slovníky. Výsledky jsou zobrazeny v pořadí slovníků v záložce Dicts a orámované barvou, která je zvolená u každého slovníku. 12
U vyhledávání ve WordNetu lze přehrát americkou a britskou výslovnost. U každého významu je zobrazen slovní druh, definice a příklad použití. Vazby mezi synsety (zde pouze synonyma a antonyma) jsou zobrazeny jako odkazy, po kliknutí na odkaz je spuštěno vyhledávání daného slova ve všech slovnících. Google translate zobrazuje jedno slovo pro každý směr překladu, který byl zvolen v nastavení slovníku. Kliknutí na tento výsledek zobrazí webovou stránku s výsledkem vyhledávání v Google Dictionary, v případě Wikipedie je zobrazení výsledků stejné. Ze záložky s vyhledáváním lze přes menu přistoupit do nastavení. Aplikace umožňuje nastavit font a velikost písma. V aktivitě s výsledky vyhledávání lze vyvolat Context menu, které umožňuje odeslat vybraný výsledek vyhledávání přes bluetooth, Gmail nebo SMS. Výsledek je možné zkopírovat do schránky. Po výběru položky Select a word je označený výsledek zvětšen a kurzorem lze vybrat slovo, které je vloženo do textové pole a dojde ke spuštění nového vyhledávání. Další slovníky lze doinstalovat přes tlačítko Download Dictionary Data, které je v záložce Vyhledávání po startu aplikace, uživateli jsou nabídnuty slovníky z Android Marketu. Po stažení a nainstalování se spustí samostatná aplikace, která zkontroluje, zda je nainstalována aplikace ColorDict, a překopíruje obsah slovníku na SD kartu a poté se odinstaluje. Slovník je poté dostupný přímo v aplikaci ColorDict, kde ho lze nastavit. Další možností je stažení slovníků ve formátu Stardict a jejich nahrání do složky dictdata na SD kartu. V druhé záložce (History) je seznam vyhledávaných slov a počet, kolikrát bylo slovo vyhledáváno. Položky historie lze řadit podle času, počtu vyhledání a abecedně. Historii je možné také smazat. Řazení i mazání je dostupné přes položky menu v záložce Historie. Třetí záložka (Dicts) obsahuje nastavení slovníků. Nainstalované slovníky lze vypínat, respektive zapínat. U Google Translate lze nastavit až tři směry překladu. U Wikipedie maximálně dva jazyky, ve kterých bude probíhat vyhledávání. Jednotlivé slovníky je možné přesouvat v seznamu a tím určit pořadí výsledků hledání.
Obrázek 9 Nastavení slovníků aplikace ColorDict
Obrázek 8 Zobrazení výsledků v aplikaci ColorDict
13
Srovnání Aplikace ColorDict spolu s aplikací Fora Dictionary umožňují vyhledávání ve více zdrojích současně. Výsledky jsou zobrazeny v pořadí, v jakém jsou nastaveny jednotlivé slovníky, to uživateli umožňuje porovnat například významy jednoho slova z více slovníků. Vyhledávání ve slovníku WordNet nezobrazuje jednotlivé vazby mezi synsety, jsou zobrazeny odkazy na synonyma (jednotlivá slova každého synsetu) a antonyma. Při kliknutí je spuštěno vyhledávání a k původním výsledkům se lze vrátit pouze přes historii nebo novým vyhledáváním původního slova. Aplikace používá nativní grafické uživatelské rozhraní, její ovládání je jednodušší než u aplikace Fora Dictionary, přitom poskytuje stejnou funkčnost. Ze všech zde popisovaných aplikací bych tuto hodnotil jako nejlepší.
3.6.
Překladač Google
Tato aplikace je verzí Google Translate a Google Dictionary pro operační systém Android. Program umožňuje překládat mezi více než 50 jazyky. Dále lze překládat přijaté SMS zprávy, odeslat překlad přes bluetooth, Gmail nebo SMS. Aplikace vyžaduje připojení k internetu.
Grafické uživatelské rozhraní a funkčnost Grafické rozhraní se skládá ze dvou tlačítek pro volbu jazyka, tlačítka pro změnu směru překladu a textového pole. Tyto prvky se nacházejí u horního okraje obrazovky. V dolní části jsou dvě tlačítka - pro překlad SMS a historie vyhledávání. Po stisknutí tlačítka pro volbu jazyka je zobrazen Spinner, kde je abecedně seřazený seznam jazyků, naposledy vybrané jazyky jsou znovu zobrazeny na prvních pozicích, je umožněna automatická detekce zdrojového jazyka. Při překladu SMS je spuštěna nová aktivita se seznamem přijatých SMS, po vybrání je SMS přeložena dle nastavených jazyků, popřípadě je umožněno pomocí stejného uživatelského rozhraní měnit jazyky a směr překladu. Vybrání historie spustí novou aktivitu se seznamem vyhledávaných slov včetně jejich prvního překladu. Kliknutím na položku seznamu je spuštěna nová aktivita s vyhledáváním podle parametrů použitých s danou položkou. Při zadávání vyhledávaného textu je k dispozici nápověda (Autocomplete), kde je obsažen i první překlad. Ve výsledcích je zobrazen překlad (Google Translate) a původní slovo, překlady rozdělené podle slovních druhů a odkazy na související slovní spojení, po kliknutí je spuštěno vyhledávání. Oproti webové verzi chybějí synonyma a definice. V menu je dostupné odeslání výsledku vyhledání – ve zprávě je obsažen zdrojový jazyk, vyhledávané slovo, cílový jazyk a překlad. U výsledků je také ikona pro přehrání výslovnosti hledaného slova a prvního nalezeného překladu.
14
Obrázek 10 Zobrazení výsledků vyhledávání v aplikaci Překladač Google
Srovnání Aplikace Google Translate pro Android nabízí lepší grafické zpracování stejné funkce jaké poskytuje například ColorDict. V současné verzi aplikace podporuje takzvaný Conversation mode zatím pouze anglicko - španělský, jedná se o překlad mluvené konverzace mezi lidmi. Díky této funkci by mohla aplikace v budoucnosti získat výhodu oproti ostatním při překladu mluveného projevu.
3.7.
Fora dictionary
Fora dictionary používá offline slovníky i online zdroje (Wikipedia, Google Translate). U offline slovníků je podporováno více formátů, např. StarDict nebo plain-text (oddělený tabulátory). Všechny zdroje jsou uloženy na SD kartě. Slovníky lze stáhnout přímo v aplikaci, nebo je nahrát na SD kartu. Některé online slovníky jsou dostupné pomocí DICT protokolu2. Aplikace umožňuje vytvoření více profilů, kde je možné mít odlišné nastavení slovníků. U nalezených slov je možné přehrání jejich výslovnosti nebo odeslání výsledků přes SMS, Gmail nebo bluetooth.
Grafické uživatelské rozhraní a funkčnost Grafické rozhraní aplikace je rozděleno na dvě části. U horního okraje obrazovky jsou v jedné úrovni zobrazeny tlačítko přehrání výslovnosti, textové pole a tlačítko pro vyhledávání. Zbytek obrazovky je použit pro zobrazení výsledků. Uživatel může použít nápovědu, která je realizována pomocí Autocomplete, při zadávání textu. Je zobrazena při podržení tlačítka pro vyhledávání. Pro zobrazení výsledků je použit WebView, každý zdroj je orámován. Při novém vyhledávání se nespouští nová aktivita. Mezi jednotlivými vyhledáváními se lze přesouvat pomocí tlačítek Next a Previous, která jsou ve WebView,
2
Slovníkový síťový protokol[6]
15
nebo pomocí stejně pojmenovaných položek v menu. Zde je dostupná i historie vyhledávání, jejíž položky jsou řazeny abecedně. V nastavení aplikace, položce Settings v menu, je možné měnit adresář pro uložení slovníků, font a velikost písma. Aplikace umožňuje zobrazit navigační lištu ve WebView s výsledky. Při použití navigační lišty je pro každý zdroj v liště graficky oddělená část, na kterou lze kliknout a tím se přesunout na začátek příslušného zdroje. Slovníky a jednotlivé zdroje se nastavují v menu v položce Manage. Zdroje lze vypínat respektive zapínat, měnit jejich pořadí a tím i umístění ve výsledcích vyhledávání, měnit barvy, které se zobrazují u položek v navigační liště. Aplikace umožňuje přidávat lokální zdroje (slovníky v podporovaných formátech uložené na SD kartě), Wikipedii a Google Translate (jazykové verze) nebo online slovníky podporující DICT protokol. Aplikace obsahuje přednastavené servery pro online slovníky, například dict.org, kde jsou dvojjazyčné slovníky. Jsou dostupné i některé offline slovníky, často pouze z angličtiny do jiného jazyka, ale slovník pro opačný směr překladu není dostupný. Uživatel také může slovník v podporovaném formátu nahrát na SD kartu, opět platí, že slovníky vyhledávají pouze jedním směrem. Položka menu Layout vytváří nové profily, které umožňují odlišné nastavení slovníků a zdrojů. Mezi profily lze přepínat pomocí položky Switch v menu nebo tlačítka ve WebView s výsledky vyhledávání. Pokud uživatel potřebuje vyhledat slovo obsažené ve výsledcích vyhledávání, může zvolit položku menu Pick, poté se zvolí zdroj a řádek, nakonec se vybere slovo, aplikace poté spustí nové vyhledávání. Tento způsob neumožňuje vybrat slovní spojení, které by uživatel chtěl vyhledat. Text lze také označit pomocí položky Select and Search v menu. Při použití této funkce uživatel nemůže rolovat zobrazenými výsledky, může označit úsek textu pouze v oblasti, která byla zobrazena před zvolením funkce Select and Search. Aplikace poté celý úsek vyhledá. Výsledky vyhledávání nebo historii lze odeslat pomocí SMS, bluetooth nebo Gmail nebo vyexportovat jako textový soubor či html stránku.
Obrázek 11 Zobrazení výsledků vyhledávání v aplikaci Fora dictionary
16
Srovnání Aplikace Fora Dictionary využívá nativní grafické rozhraní operačního systému Android. Aplikace umožňuje vyhledávání ve více zdrojích současně jako ColorDict, ale ovládání programu přes menu, kde je více než dvacet položek, je velmi nepřehledné. Odlišné je i formátování výsledků vyhledávání mezi jednotlivými slovníky v této aplikaci. Ve slovníku English Dictionary and Thesaurus jsou jednotlivé významy barevně odděleny od ukázkových vět, ve slovníku WordNet jsou významy i ukázkové věty formátovány stejně a výsledky tak nejsou přehledné.
17
3.8.
Srovnávací tabulka Klady -
Dictionary.com
-
obsáhlé slovníky
-
Advanced English
Multi Lang dictionary
-
-
jednoduché ovládání nejlepší zobrazení WordNetu
-
nelze instalovat další slovníky
-
oproti ostatním aplikacím malá funkčnost nepoužívá možnosti Android GUI nezobrazuje všechny vazby mezi synsety WordNetu pro každý směr vyhledávání vlastní StarDict slovník nutné přepínání mezi jednotlivými slovníky oproti ostatním aplikacím malá funkčnost pouze jeden online zdroj složité ovládání nepřehledné zobrazení výsledků u některých slovníků
použití Wiktionary -
Wordmate
-
jednoduché ovládání více slovníků
-
-
použití více slovníků zároveň
-
-
pěkné grafické zpracování Conversation mode použití více slovníků zároveň
-
Colordict Překladač Google Fora dictionary
Tabulka 1 Zhodnocení existujících aplikací
18
Zápory pouze online zdroje nelze instalovat další slovníky nepoužívá možnosti Android GUI nutné přepínání mezi jednotlivými slovníky
-
3.9.
Motivace
V tabulkách Tabulka 1 Zhodnocení existujících aplikací a Tabulka 3 Srovnání existujících řešení jsou zachyceny jednotlivé funkce a vlastnosti každé aplikace, kterou jsem vybral pro srovnání. Je patrné, že většina aplikací používá shodné slovníky (u online vyhledávání se jedná o Google Translate a Dictionary, u offline vyhledávání slovník WordNet). Větší rozdíly mezi aplikacemi byly v případě grafického uživatelského rozhraní. Funkčnost jednotlivých aplikací je velmi podobná. Na základě porovnání těchto aplikací jsem navrhl grafické uživatelské rozhraní pro vlastní aplikaci a vybral funkčnosti, které by měla splňovat. V následujících odstavcích jsou popsány stěžejní požadavky.
Funkčnost V předchozím srovnání se ukázalo, že u většiny aplikací jsou funkčnosti velmi podobné nebo úplně shodné. Klíčová funkčnost se zdá být prohledávání více zdrojů zároveň. Uživatel díky tomu nemusí přepínat mezi jednotlivými zdroji při vyhledávání stejného slova a výsledky vyhledávání může snáze porovnat. Ze srovnávaných aplikací toto umožňovaly pouze dvě – Colordict a Fora dictionary. Pokud aplikace umožňuje prohledávání více zdrojů současně, je vhodné, aby podporovala také nastavení jednotlivých zdrojů (vypínání/zapínání, pořadí výsledků vyhledávání z jednotlivých zdrojů). Aplikace by měla umožňovat zobrazení dříve hledaných slov (historii), toto bylo u většiny srovnávaných aplikací implementováno.
Grafické uživatelské rozhraní V uživatelském rozhraní byly rozdíly mezi aplikacemi větší. Některé aplikace nevyužívají možnosti, které nabízí grafické rozhraní systému Android. Například v aplikaci Dictionary.com by bylo možné jednotlivá tlačítka pro funkčnosti zobrazit po stisknutí klávesy menu a tím ponechat více místa pro zobrazení výsledků vyhledávání. Stejný problém je i u vyhledávacího pole u horního okraje obrazovky. Vyhledávací pole je malé, ale barevná lišta, ve které je umístěno, zabírá zbytečně mnoho místa. U aplikace Fora dictionary se ovládání stalo velmi nepřehledným kvůli nadměrnému množství položek v menu a použití více funkcí, které dělají téměř totéž nebo je lze rychleji spustit například z aktivity zobrazující výsledky vyhledávání. Pro zobrazení výsledků vyhledávání se jako nejlepší ukázalo použití samostatného webového prohlížeče, který byl umístěn přes celou obrazovku. Díky tomu uživatel vidí nejvíce informací najednou. Výsledky lze také formátovat pomocí html a kaskádových stylů. Na základě porovnávaných aplikací se nejlepší volbou pro implementovanou aplikaci ukázalo použití grafického rozhraní, které poskytuje operační systém Android. Důležité je přehledné zobrazení co nejvíce vyhledaných informací.
Slovníky Porovnávané aplikace používaly většinou totožné slovníky i způsob uložení. Offline slovníky byly u testovaných aplikací uloženy v textových souborech, nejčastěji ve formátu
19
StarDict. Nejspíše proto, že slovníky v tomto formátu jsou volně dostupné na internetu. Při použití tohoto formátu je nutné mít pro každý směr vyhledávání samostatný slovník. Z online slovníků byl používán Google Translate a Google Dictionary, aplikace Multi Lang Dictionary umožňovala vyhledávání ve Wiktionary. Kvalita offline českých slovníků v testovaných aplikacích byla špatná. Všechny aplikace používaly stejný slovník ve formátu StarDict. Nabízeny byly anglicko-český, česko-anglický, německo-český a česko-německý slovník. Ve většině aplikací byl použit slovník WordNet, který poskytuje podobné informace jako výkladové slovníky. Většina aplikací nezobrazuje všechny dostupné informace z WordNetu. Nejvíce jich zobrazí aplikace Advanced English and Thesaurus. Ostatní aplikací nezobrazují vazby mezi synsety. Pro ukládání slovníků v implementované aplikaci byla vybrána databáze SQLite, která je nainstalovaná v zařízeních s operačním systémem Android. Informace získané z online zdrojů budou uloženy do databáze, aby byly při příštím vyhledávání k dispozici bez nutnosti připojení k internetu. Takto získané překlady budou díky tomu dostupné i při použití opačného směru vyhledávání. Pokud bude při dalším vyhledávání dostupné připojení k internetu, bude provedena aktualizace získaných dat.
20
4. Analýza V této kapitole jsou popsány jednotlivé použité technologie, informační zdroje, které jsou použity ve vyhledávacích modulech. Jsou zde popsány také případy užití.
4.1.
Použité technologie
Při vývoji aplikací pro platformu Android lze využít oficiálně distribuovaný Android SDK[7], který poskytuje nástroje pro vývoj a testování aplikací jako např. jednotlivé verze operačního systému, emulátor mobilního zařízení, debugger. Aplikace lze psát v jazyce Java a použít aplikační framework, nebo psát nativní aplikace v jazyce C/C++. Pro vývoj v jazyce C lze použít Android NDK3. Pro vývoj aplikace jsem zvolil jazyk Java a to zejména kvůli přenositelnosti aplikace a použití aplikačního frameworku.
Operační systém Android Android je operační systém určený pro mobilní zařízení. O jeho vývoj se stará konsorcium Open Handset Alliance, kam patří společnosti jako Google, Samsung, HTC a mnoho dalších. Android se skládá z pěti vrstev.
Linuxové jádro – Android používá Linux ve verzi 2.6, tvoří abstraktní vrstvu mezi hardwarem a zbytkem softwaru Knihovny – knihovny napsané v jazyce C/C++ Android Runtime – Dalvik virtual machine Aplikační framework Android – umožňuje přístup k jednotlivým knihovnám Aplikace – psané v jazyce Java (využití aplikačního frameworku), lze však použít i jazyk C/C++
Aplikační framework Android Aplikační framework Android umožňuje vývojáři přistupovat ke stejnému API, které používají aplikace předinstalované v telefonu (uživatelské rozhraní, kontakty uložené v telefonu, zabudovaná SQLite databáze). Vývojář může použít všechny hardwarové komponenty mobilního zařízení, např. GPS zařízení. Framework umožňuje znovupoužitelnost komponent, díky kterému může aplikace využívat schopnosti ostatních aplikací nebo lze jednotlivé komponenty vyměnit. Každá aplikace běží ve vlastním procesu spolu s vlastní instancí Dalvik VM (virtual machine). Tento virtuální stroj je registrově orientovaný na rozdíl od Java VM, který má zásobníkově orientovanou architekturu.[9] Mezi nejdůležitější součásti frameworku patří:
3
View system – část frameworku podporující tvorbu uživatelského rozhraní Content Providers – umožňuje aplikacím přistupovat k datům jiných aplikací nebo sdílet vlastní data
Native Development Kit - umožňuje vývojáři psát části aplikace přímo v nativním kódu[8]
21
Resource Manager – poskytuje přístup ke zdrojům mimo vlastní kód, např. grafické prvky, xml soubory definující uživatelské rozhraní Activity Manager – řídí životní cyklus aplikací
Databáze SQLite Aplikační framework Android poskytuje API pro práci s databází SQLite. Většinou je databáze umístěna v interní paměti zařízení a je přístupná pouze aplikaci, která ji vytvořila. Kvůli předpokládanému nárůstu velikosti databáze a omezené interní paměti mobilních zařízení jsem jako úložiště databází zvolil SD kartu. Toto umístění přináší některá rizika, jako např. nedostupnost SD karty. SQLite je relační databázový systém napsaný v jazyce C. Svou koncepcí se liší od klasických databázových systémů, které využívají koncepci klient-server, zatímco SQLite je samostatná knihovna, která je přilinkována k aplikaci. Každá databáze je uložena v jednom samostatném souboru přímo v klientském zařízení. SQLite databáze je široce využívána ve webových prohlížečích (Mozilla Firefox, Opera) nebo mobilních zařízeních (Android, Symbian, Iphone).[10]
4.2.
Použité zdroje informací
Následující část obsahuje popis zdrojů informací použitých v modulech a přístupu k informacím, které poskytují.
Slovnik.cz Server slovnik.cz poskytuje překlady z českého jazyka do angličtiny, němčiny, francouzštiny, španělštiny, italštiny, ruštiny, latiny, esperanta, polštiny a portugalštiny nebo opačně. Neposkytuje překlad mezi libovolnými dvěma z těchto jazyků. Na server slovnik.cz se lze odkazovat externě pomocí URL. Není zde poskytováno žádné API pro přímý přístup, tudíž je nutné parsovat html kód stránky, kde jsou lexikograficky seřazená slova.[11]
Google Translate API Firma Google nabízí široké spektrum API, která jsou dostupná pro vývojáře na různých platformách. Jedním z nich je i Google Translate API, to poskytuje programový přístup ke Google překladači. Ten zajišťuje překlad slov, vět nebo webových stránek. Překlad je možný mezi 57 jazyky.[12] Pro přístup k tomuto API je nutné získat Google API key a zaplatit poplatek, protože od 1.12. 2011 je API přístupné pouze jako placená služba. API poskytuje tři operace: translate – překlad mezi dvěma jazyky languages – vrací seznam podporovaných jazyků detect – detekuje jazyk použitý v textu. Operace lze vyvolat přímo přes REST nebo vyvolat REST z Javascriptu. Google neposkytuje přístup přímo k resourcům, ale přístup ke službě. Uživatel ke službě přistupuje
22
pomocí HTTP GET požadavku. V URI HTTP požadavku operace translate je obsažen Google API key, text, zdrojový jazyk a cílový jazyk. Odpovědí je JSON.
Bing Translation API Bing Translation API od společnosti Microsoft nabízí stejnou funkcionalitu jako Google Translate API. Navíc nabízí například překlad pole textů. Pro přístup je potřeba mít vygenerované Bing App ID, které je stejně jako celé API zadarmo.[13] Přístup k API je možný přes Ajax, SOAP nebo HTTP interface. Já jsem ve své práci použil HTTP interface, který vrací xml. Nevýhodou tohoto API je fakt, že pokud hledané slovo v zadaném jazyce neexistuje (nebo ho překladač neumí přeložit), v xml je vráceno zadané slovo, ale není signalizováno, že neexistuje.
MediaWiki API MediaWiki API poskytuje přístup k datům obsaženým v databázích MediaWiki. MediaWiki je společný název pro skupinu projektů, kam mimo jiné patří Wikipedia a Wiktionary. Pomocí API se aplikace mohou přihlašovat, měnit obsah nebo získat data. API poskytuje více výstupních formátů, např. JSON, xml nebo YAML.[14] K API se přistupuje pomocí HTTP požadavku.
4.3.
Případy užití
Případy užití zachycují funkční požadavky na systém. V systém bude vystupovat pouze jedna role – uživatel.
23
Obrázek 12 Případy užití
Vyhledávání Hlavní úspěšný scénář: 1. 2. 3. 4.
Uživatel napíše vyhledávané slovo nebo slovní spojení do textového pole Systém zobrazí seznam nalezených výsledků Uživatel vybere jeden výsledek nebo spustí vyhledávání zadaného slova Systém zobrazí všechny dostupné informace o slovu, které uživatel zvolil
Rozšíření: 4.a: Systém nenalezl žádný výsledek .1 Systém zobrazí varování, že nenalezl žádný výsledek .2 Uživatel může vyhledávat znovu, pak návrat do bodu 1
Zobrazení historie vyhledávání Hlavní úspěšný scénář: 1. Uživatel zvolí položku Historie v menu 24
2. Systém zobrazí seznam vyhledávaných slov seřazených podle času vyhledávání 3. Uživatel vybere jednu položku z historie 4. Systém zobrazí všechny dostupné informace o výsledku, který uživatel zvolil Rozšíření: 3.a: Uživatel zvolí smazat položku .1 Systém smaže položku v historii vyhledávání .2 Scénář pokračuje bodem 3
Nastavení primárního jazyka Hlavní úspěšný scénář: 1. Uživatel zvolí položku Primární jazyk v menu 2. Systém zobrazí seznam jazyků 3. Uživatel vybere jeden jazyk
Nastavení sekundárního jazyka Hlavní scénář: 1. Uživatel vybere tlačítko pro změnu sekundárního jazyka 2. Systém zobrazí seznam jazyků 3. Uživatel vybere jeden jazyk
Nastavení vyhledávacích modulů Hlavní úspěšný scénář: 1. Uživatel zvolí položku Nastavení modulů v menu 2. Systém zobrazí seznam nainstalovaných modulů
Nastavení vyhledávacího modulu Hlavní úspěšný scénář: 1. 2. 3. 4.
Uživatel spustí Nastavení vyhledávacích modulů Uživatel vybere požadovaný modul Systém zobrazí možnosti nastavení vybraného modulu Uživatel změní nastavení
Vypínání/Zapínání vyhledávacího modulu Hlavní úspěšný scénář: 1. Uživatel spustí Nastavení vyhledávacích modulů 2. Uživatel vybere možnost vypnout slovník
25
Rozšíření: 2.a: Slovník je vypnutý .1 Uživatel vybere možnost zapnout slovník
Nastavení pozice vyhledávacího modulu Hlavní úspěšný scénář: 1. Uživatel spustí Nastavení vyhledávacích modulů 2. Uživatel pomocí tlačítka změní pozici slovníku v seznamu
26
5. Architektura Aplikace je napsána v programovacím jazyce Java a používá aplikační framework Android. Jednotlivé moduly jsou zodpovědné za vyhledávání v rámci svého zdroje. Pro zobrazení výsledků vyhledávání je použit webový prohlížeč, jehož obsah je modifikován pomocí javascriptu. Aplikaci lze rozdělit na dvě části. První část zajišťuje kompletní uživatelské rozhraní pro vyhledávání, zobrazení výsledků, nastavení aplikace a vyhledávacích modulů a historii vyhledávání. Stará se i o přenos výsledků vyhledávání mezi moduly a uživatelským rozhraním. Při vyhledávání volá funkce vyhledávacích modulů. Tato část je popsána v kapitolách Uživatelské rozhraní, JavascriptInterface a Implementace databáze. Druhou část tvoří jednotlivé vyhledávací moduly. Každý modul je zodpovědný za vyhledávání informací v informačním zdroji a předání výsledků vyhledávání do aplikace. Případné ukládání dat zajišťuje také modul. Při návrhu aplikace byl kladen důraz na její snadnou rozšiřitelnost o další moduly. Každý modul musí implementovat rozhraní, kde jsou definovány metody pro práci s modulem. Správu modulů zajišťuje třída net.extbrain.android.app.lookup.tools.ModulesHolder. Zde jsou vytvářeny instance jednotlivých modulů a načítáno jejich nastavení (vypnutí/zapnutí, pořadí). Tato část je popsána v kapitolách ModuleInterface, Implementace databáze a Implementované moduly pro získávání informací. Výsledky vyhledávání jsou předávány do webového prohlížeče ve formě JSON objektů. V prohlížeči jsou parsovány Javascriptem, který zajišťuje jejich zobrazení ve webové stránce. Tento přístup umožňuje změnit styl webové stránky a nebo zobrazení výsledků z jednotlivých modulů. Vytvoření nové šablony je popsané v kapitole Tvorba šablon pro zobrazení výsledků vyhledávání.
5.1.
Uživatelské rozhraní
V této kapitole je nejprve popsán princip fungování grafického uživatelského rozhraní na platformě Android, poté konkrétní implementace, která je použita v aplikaci.
Uživatelské rozhraní v aplikačním frameworku Android Uživatelské rozhraní se v Androidu skládá z objektů typu android.view.View, android.view.ViewGroup nebo jejich potomků. Třída View slouží jako rodičovská třída pro všechny grafické prvky nazývané „widgets“, jedná se například o tlačítko, textové pole atd. Třída ViewGroup je rodičovská třída pro prvky označované jako „layouts“, které definují rozložení grafických prvků v okně. Aplikační framework Android umožňuje definovat vzhled uživatelského rozhraní v xml souborech nebo programově při běhu aplikace. Výhodou použití xml souborů je oddělení prezentační vrstvy od kódu aplikace. Pokud potřebujeme s prvky pracovat programově, můžeme je přiřadit do proměnných a poté s nimi v kódu pracovat. Tento postup jsem použil v celé aplikaci.
27
Každá aplikace se typicky skládá z komponent, tzv. aktivit. Jedná se o třídy typu android.app.Activity nebo jejich potomky. Každá instance této třídy vytvoří okno, do kterého lze nahrát uživatelské rozhraní z xml souboru nebo ho programově vytvořit. Jedna aktivita je definována jako hlavní, ta je spuštěna při startu aplikace. Další aktivity lze spouštět pomocí metody startActivity() a parametru typu android.content.Intent, který popisuje jakou aktivitu chceme spustit. Vždy při spuštění nové aktivity je stávající aktivita zastavena a uložena na zásobník. Při skončení aktivity je ze zásobníku vyjmuta předchozí aktivita a opět spuštěna. Každá aplikace obsahuje soubor nazvaný AndroidManifest.xml, který poskytuje základní informace o aplikaci. Jsou zde uvedeny aktivity (jinak by je nebylo možné spustit) nebo přístup k SD kartě a internetu.
Implementace uživatelského rozhraní Celá
aplikace
se
skládá
z
pěti
aktivit, které jsou umístěny v balíčku net.extbrain.android.app.lookup.presentation. Obrázek 29 Diagram tříd v balíčku presentation zobrazuje diagram aktivit. Aktivita SlovnikList je nastavena jako hlavní, tudíž je spuštěna při startu aplikace. Její vzhled je definován v souboru listlayout.xml. Tato aktivita slouží pro zadání vyhledávaného slova nebo slovního spojení. Při zadání tří a více znaků poskytuje našeptávač v podobě seznamu slov, který je zobrazen pod polem pro zadávání textu. V seznamu jsou nejprve abecedně seřazená slova z primárního jazyka, poté ze sekundárního a nakonec abecedně seřazená slova z ostatních jazyků, které aplikace podporuje. Našeptávač je realizován grafickým prvkem ListView. Vzhled řádku našeptávače je definovaný v souboru wordrow.xml. Pro vyhledání položek našeptávače jsou použity vnitřní třídy GetWordsFromOfflineDatabase, která prohledává offline databázi na SD kartě telefonu, a GetWordsFromWiki, která používá MediaWiki API (popsáno u modulů Wiktionary a Wikipedia) pro získání seznamu hesel ze serveru wikipedia.org. Obě třídy mají společného předka, tím je třída android.os.AsyncTask. Třída AsyncTask zajišťuje své vykonání v samostaném vlákně a poté předání výsledku zpět do vlákna uživatelského rozhraní.[15] Toto je velmi důležité právě u časově nebo výpočetně náročných operací, které jsou spouštěny z jednotlivých aktivit. Pokud bychom nepoužili samostatné vlákno, došlo by k zablokování vlákna, které se stará o běh uživatelského rozhraní. Nalezené výsledky pro našeptávač jsou vloženy do seznamu pomocí metody update() ve vnitřní třídě WordListAdapterWrapper. Tím je zaručena synchronizace mezi více vlákny, která nahrávají položky do našeptávače.
28
Obrázek 13 Úvodní obrazovka spolu s menu implementované aplikace
Obrázek 14 Našeptávač implementované aplikace
Při každém vyhledávání je hledané slovo nebo slovní spojení uloženo do databáze history. Historie hledání je zobrazena ve třídě HistoryView. Pro zobrazení je opět použit grafický prvek ListView, vzhled řádku je definován v souboru historyrow.xml. V historii lze smazat buď jednotlivé položky – kliknutím na ikonu křížku v řádku seznamu nebo celou historii – přes položku v menu. Pomocí ikony Lupa lze spustit nové hledání v rámci stejných jazyků, pro které byla položka vyhledávána. Kliknutím do řádku seznamu dojde k ukončení aktivity historie a slovo z historie bude nakopírováno do textového pole hlavní aplikace, která je spuštěna místo stávající aktivity. Slovo lze poté upravit a nebo spustit vyhledávání v rámci jiných jazyků. Pro déle trvající operace (vyhledávání a mazání v databázi) je opět použit potomek třídy AsyncTask, aby nedošlo k zablokování uživatelského rozhraní. Nastavení aplikace je řešeno v aktivitě Preferences, její vzhled je definovaný v souboru preferences.xml. Aplikační framework Android poskytuje grafické prvky pro tvorbu nastavení. Jedná se například o přepínače, textové pole, prvek pro výběr jedné hodnoty z více (ListPreference). Hodnoty získané z nastavení lze uložit přímo v systému Android. Třída android.content.SharedPreferences poskytuje metody pro uložení a získání dvojic klíčhodnota, kde mohou být uloženy primitivní typy. Tato data zůstávají persistentní i po ukončení aplikace.[16] V nastavení aplikace lze zvolit primární jazyk, maximální počet paralelně běžících vláken pro stahování a nastavit vzhled pro webový prohlížeč, který definuje naformátování výsledků vyhledávání. Pro uchování všech hodnot nastavení používám již zmíněnou třídu SharedPreferences.
29
V aktivitě ModulesSettings je možné nastavovat jednotlivé moduly pro získávání informací. Uživatelské rozhraní je opět realizováno pomocí prvku ListView, jehož řádek je definovaný v souboru dictionaryrow.xml. Jednotlivé moduly lze vypínat, resp. zapínat a měnit jejich pořadí. Změna pořadí se provádí tažením za ikonu úplně vlevo na každém řádku. Její funkcionalitu poskytuje třída com.android.music.TouchInterceptor. Pokud má modul možnost vlastního nastavení, je u něj zobrazena ikona spouštějící samostatnou aktivitu. Za její chování je zodpovědný patřičný vyhledávací modul. Typicky se jedná například o nastavení přístupových údajů ke službě poskytující informace (např. Google API key).
Obrázek 15 Zobrazení historie vyhledávání
Obrázek 16 Nastavení modulů
Aktivita ResultsWebView spouští webový prohlížeč pro zobrazení výsledků vyhledávání. Její vzhled je definovaný v souboru webviewlayout.xml. Pomocí metody addJavacriptInterface() je k prohlížeči připojen objekt. Metody tohoto objektu lze volat z Javascriptu běžícím ve webovém prohlížeči a naopak.
30
Obrázek 17 Zobrazení výsledků vyhledávání
5.2.
JavascriptInterface
Aplikační framework Android umožňuje do webového prohlížeče zapojit objekt, jehož metody lze volat z Javascriptu. Objekt se zapojí voláním metody addJavascriptInterface() na instanci webového prohlížeče. První parametr je typu java.lang.Object (objekt, jehož metody lze volat z Javascriptu), druhý parametr je název interfacu. Objekt zapojený jako JavascriptInterface běží v jiném vlákně, než byl vytvořen.[17] Z Javascriptu lze volat metody objektu pomocí tečkové notace: nazevInterfacu.nazevMetody. Metody Javascriptu lze z Javy volat pomocí metody loadUrl() na instanci prohlížeče. Parametrem je URL, které začíná javascript: a následuje volání funkce (např. javascript:fill();). V aplikaci tuto funkcionalitu používám pro předávání informací mezi Javascriptem běžícím ve webovém prohlížeči a zbytkem aplikace. Přes JavascriptInterface jsou předávány jednotlivé JSON objekty s výsledky vyhledávání, z Javascriptu lze volat funkce, které poskytují informace o vyhledávání – primární a sekundární jazyk, seznam zapnutých modulů, spuštění vyhledávání apod. V aplikaci
je
k
webovému
prohlížeči
připojena instance třídy net.extbrain.android.app.lookup.bussiness.WebViewInterface. Metoda getSources() vrací JSON objekt, ve kterém je pole s názvy zapnutých vyhledávacích modulů, pole je seřazeno podle pořadí nastaveného v aktivitě DictionarySettings.
Obrázek 18 Ukázka JSON objektu vráceného metodou getSources()
31
Metody getPrimaryLanguage() a getSecondaryLanguage() vracejí primární, resp. sekundární jazyk. Metoda getSearchedWord() vrací hledané slovo nebo slovní spojení. Metoda getNothingFound() vrací textový popis pro případ, že nebylo nic nalezeno, návratovou hodnotu z metody getNext() lze použít pro generování informace, že zdroj může hledat další data. Poslední dvě jmenované metody načítají hodnoty z resourců, lze je tedy použít při případné lokalizaci aplikace. Metoda retrieveData() spustí samostané vlákno, které provede vyhledávání ve všech zapnutých modulech, podle jejich nastaveného pořadí. Nejprve spustí asynchronní stahování dat pro všechny moduly, které to vyžadují. Poté postupně prohledá lokální databáze zdrojů podle nastaveného pořadí. JSON s výsledky vyhledávání je okamžitě předán Javascriptové funkci, která je parametrem funkce retrieveData(), aby je mohla zobrazit v prohlížeči. Poté jsou jednotlivým modulům předány odpovědi, které byly staženy. Odpovědi jsou do modulů předávány dle pořadí, ve kterém byly staženy, aby nedocházelo ke zdržení (např. timeout, vytížené servery apod.). JSON objekty z jednotlivých modulů jsou opět ihned přeposílány do prohlížeče. Nakonec je nad jednotlivými moduly volána funkce pro uložení aktualizovaných dat. Metoda retrieveNextData() spustí další vyhledávání v modulu, který byl zadán v parametrech funkce. Průběh metody je shodný s předchozí metodou, pouze je vyhledávání prováděno v rámci jednoho modulu a jednoho směru vyhledávání. Tato metoda je potřebná pro zdroje, kde nelze všechny informace k vyhledávanému slovu stáhnout jedním požadavkem. Jedná se například o slovnik.cz, kde je maximální počet položek v jednom požadavku 50, pro stažení dalších je potřeba parsovat další webovou stránku.
5.3.
ModuleInterface
Třída net.extbrain.android.app.lookup.bussiness.ModuleInterface definuje rozhraní, které musí implementovat každý vyhledávací modul. Rozhraní definuje následující metody: getName() – vrací jméno modulu, např. Wiktionary, SlovnikCz hasSettings() – vrací hodnotu typu boolean, zda má modul vlastní nastavení startSettings() – spustí vlastní nastavení slovníku getDownloadConnections() – vrací seznam instancí typu HttpConnection pro oba směry vyhledávání, které budou spuštěny ve funkci retrieveData() v javascriptInterfacu getDatabaseRecords() – vrací výsledky nalezené v lokální databázi pro oba směry vyhledávání getUpdates() – vrací výsledky nalezené při aktualizaci, v této metodě doporučuji provést porovnání s lokálními výsledky, aby se do prohlížeče neposílala dvakrát stejná data insertUpdates() – zde se implementuje uložení získaných aktualizací Následující metody provádějí stejnou funkcionalitu jako předchozí metody. Funkcionalita se provádí pro další vyhledávání a stahování. Vyhledává se pouze jedním směrem.
32
getNextDownloadConnection()
getNextDatabaseRecords()
getNextDatabaseUpdates() insertNextUpdates()
Pokud modul nepotřebuje funkcionalitu pro další vyhledávání a stahování, lze ho vytvořit děděním od abstraktní třídy net.extbrain.android.app.lookup.bussiness.BaseModuleClass.
5.4.
Implementace databáze
V aplikaci jsou dva typy databází. První je databáze history, která uchovává historii vyhledávání včetně jazyků. Druhý typ databáze používají jednotlivé moduly pro uložení získaných dat. Každý modul, který svá data ukládá, má vlastní databázi, její jméno se shoduje se jménem modulu.
Databáze history Databáze history slouží pro ukládání historie vyhledávání. V databázi je uloženo vyhledávané slovo nebo slovní spojení spolu s jazyky, pro které bylo vyhledávání provedeno. V aktivitě HistoryView jsou poté záznamy seřazeny sestupně podle sloupce Date v tabulce Words.
Obrázek 19 Schéma history databáze
Databáze pro vyhledávací moduly Pro vyhledávací moduly jsem vytvořil univerzální databázové schéma, které umožňuje ukládat více typů informací než pouze překlady. V této kapitole je popsán projekt WordNet, ze kterého jsem při návrhu schématu vyšel, poté je vysvětlen význam jednotlivých tabulek a sloupců v databázi a nakonec příklady, jak schéma použít při ukládání informací ze slovníků. WordNet je lexikální databáze anglického jazyka vyvíjená na univerzitě Princeton od roku 1985. V databázi jsou obsažena podstatná a přídavná jména, slovesa a příslovce. Jednotlivá slova jsou seskupována do synonymických řad, tzv. synsetů. Ke každému synsetu poskytuje WordNet krátké definice nazývané gloss a k většině i příklady použití.
33
Jednotlivé synsety jsou vzájemně spojeny vazbami. Ty se liší v závislosti na slovním druhu. U podstatných jmen to jsou například: nadřazený, vztah celek-část a obráceně. U sloves se jedná například o: nadřazený pojem, tzv. troponymum (sloveso Y je troponymem ke slovesu X, jestliže Y znamená dělat X nějakým způsobem). Vztahy mezi synsety jsou definovány i pro přídavná jména a příslovce.[18] WordNet je použitelný jako výkladový slovník a zároveň jako thesaurus4, uplatnění má v textové analýze a umělé inteligenci.[19] Názvy tabulek v databázovém schématu jsou shodné nebo podobné s terminologií používanou v projektu WordNet. Základem je tabulka Synsets, která obsahuje cizí klíče do tabulek Languages, Sources a WordClasses. V tabulce Languages jsou uloženy jednotlivé jazyky. Tabulka Sources obsahuje výčet jednotlivých zdrojů, např. slovnik.cz, wikipedia nebo wiktionary. Tabulka WordClasses určuje slovní druh synsetu. V tabulce VocableSynsets je ve sloupci Vocable uložena slovo nebo slovní spojení, které patří do synsetu. Sloupec WordOrder určuje pořadí mezi jednotlivými slovy v synsetu. Tabulka SynsetLinkSynsets zachycuje vazby mezi jednotlivými synsety. Typ vazby je popsán v tabulce LinkTypes, např. překlad, antonymum, 1. pád atd. Sloupce SourceSynsetOrder a TargetSynsetOrder popisují pořadí jednotlivých synsetů, které jsou ve vazbě. To lze použít u překladů, pokud je pevně dáno pořadí přeložených synsetů. Tabulka Glosses zachycuje text, který je připojen k jednotlivým synsetům. Typ textu bude uložen v tabulce GlossType, např. definice, použití, poznámka atd. Tabulka GlossSynsets je pouze vazební tabulka. Pro zrychlení vyhledávání jsem přidal indexy pro následující sloupce: Vocable a SynsetId v tabulce VocableSynsets, SourceId a TargetId v tabulce SynsetLinkSynsets.
4
Slovník nabízející seznam synonym
34
Obrázek 20 Schéma databáze modulů
Použití databáze pro překladový slovník ukáži na použití v modulu SlovnikCz. V tomto modulu probíhá překlad vždy mezi českým jazykem a jedním z podporovaných cizích jazyků nebo opačně. Pro každé slovo v každém jazyce jsem vytvořil jeden záznam v tabulce Synsets, který má přiřazen právě jeden záznam v tabulce VocableSynsets (z tohoto zdroje nelze určit, zda překlady získané pro jednotlivá slova jsou synonyma), zde je vyplněný sloupec Vocable a cizí klíč odkazující na záznam v Synsets. V tabulce Sources je jediný záznam – SlovnikCz. Každý záznam v tabulce Synsets obsahuje cizí klíč právě na záznam v tabulce Sources. Vazba mezi záznamy v tabulce Synsets (záznam v tabulce LinkType) je pouze translation. Pořadí jednotlivých překladů udává TargetSynsetOrder, pokud sloupec SourceId obsahuje id synsetu, který je vytvořen pro hledané slovo. Pokud je id synsetu ve sloupci TargetId, pořadí určuje SourceSynsetOrder. 35
Při ukládání překladů, tj. vazeb mezi synsety jsem nejprve pomocí metody compareTo() porovnal jazyky obou synsetů. Podle návratové hodnoty funkce jsem určil buď sloupec SourceId, nebo TargetId. Při vyhledávání stačí opět porovnat jazyky a víme, v jakém pořadí provázat tabulky. Při ukládání dat z výkladového slovníku by byly použity tabulky VocableSynsets, Synsets, Sources a Languages stejně jako v předchozím případě. Doplňující informace k jednotlivým slovům by byly uloženy v tabulce Glosses. V tabulce GlossType by byl uložen typ informace, např. definice. Pokud by bylo potřebné zachytit vazby mezi jednotlivými slovy nebo synsety, použila by se tabulka SynsetLinkSynsets jako v předchozím případě.
36
6. Implementované moduly pro získávání informací Pro informační zdroje popsané v kapitole Použité zdroje informací jsem vytvořil moduly. Zdroj MediaWiki je použit v modulu Wikipedia a Wiktionary. Modul offline používá překladový slovník, který je ke stažení na stránkách dict.info5. Všechny moduly musejí implementovat rozhraní ModuleInterface, nebo být potomkem třídy BaseModuleClass. V následujících kapitolách je popsána struktura jednotlivých modulů, konkrétní implementace přístupu ke zdrojům informací a případné odlišnosti od implementace, která je popsána v kapitole ModuleInterface.
6.1.
Modul SlovnikCz
Implementace modulu se nachází v balíčku net.extbrain.app.lookup.modules.slovnikcz. Třída SlovnikCzModule implementuje rozhraní ModuleInterface. Protože tento modul získává překlady ze serveru Slovnik.cz, poskytuje překlady pouze mezi českým jazykem a cizím jazykem nebo obráceně. To je kontrolováno v metodách getDownloadConnections() a getDatabaseRecords(). Pro vyhledávání v databázi používá modul třídu TranslationDAO. Kvůli pozdějšímu porovnání výsledků z databáze a aktualizovaných výsledků je z databáze použito prvních padesát nalezených překladů. Nalezené výsledky jsou přiřazeny do instanční proměnné pro pozdější porovnání. Výsledky z databáze jsou předány do webového prohlížeče v JSON reprezentaci na obrázku 21. Hodnoty Source obsahuje název modulu, LanguageFrom udává jazyk, ve kterém bylo hledáno zadané slovo, a LanguageTo jazyk výsledku. Hodnota hasNext udává, zda jsou v databázi další výsledky, Count určuje pořadí vyhledávání v databázi (při každém vyvolání funkce getNext() v javascriptInterfacu je hodnota inkrementována). Překlady jsou uloženy v poli, kde je pro každé nalezené slovo (WordFrom) jeden JSON objekt. Hodnota Words je pole s přeloženými výrazy.
5
Server nabízející volně dostupné online i offline slovníky
37
Obrázek 21 JSON s výsledky vyhledávání modulu SlovnikCz
Pro aktualizaci dat je potřeba poslat HTTP GET požadavek na server Slovnik.cz. Odpověď je poté v metodě getUpdates() předána do třídy SlovnikCzParser, kde jsou v metodě translate vyparsovány překlady. Protože server Slovnik.cz neposkytuje API pro přístup ke slovníkům, je zde parsován html kód stažené stránky. Pro parsování je použit XmlPullParser, který je součástí Androidu. Pomocí jednoho požadavku lze získat maximálně 50 položek. Tyto položky jsou abecedně seřazeny, při parsování proto kontroluji, zda je získaná hodnota shodná nebo začíná hledaným slovem. Pokud tato podmínka platí u všech padesáti položek je vyparsována i adresa další stránky. Formát JSONu posílaného do prohlížeče je totožný s JSON objektem posílaným s výsledky z databáze.
6.2.
Modul Wikipedia
Modul Wikipedia vyhledává články na serveru wikipedia.org. Úvodní sekce nalezeného článku je zobrazena ve webovém prohlížeči aplikace spolu s odkazem na stránku s celým článkem. Pokud uživatel klikne na odkaz, stránka je otevřena ve výchozím webovém prohlížeči mobilního zařízení. Všechny překlady jsou staženy jedním požadavkem, proto není nutné implementovat funkce pro další vyhledávání. K obsahu Wikipedie je použito MediaWiki API. Konkrétně akce parse[20], která vrací html kód požadované stránky. Tato akce je volána pro primární i sekundární jazyk zvlášť. Získaná odpověď je předána metody parseResponse() ve třídě WikipediaParser. Pomocí JSoup6 parseru je z html kódu vyparsován text úvodní sekce a podle jazyka sestavena adresu odkazu na mobilní verzi Wikipedie. Formát JSON objektu posílaného do webového prohlížeče má následující formát. Hodnota Leading Section je text v úvodní sekci, Page Address je adresa článku na serveru wikipedia.org.
6
HTML parser
38
Obrázek 22 JSON s výsledkem vyhledávání ve Wikipedii
6.3.
Modul offline
Modul offline vyhledává překlady pouze v lokální databázi uložené na SD kartě. Data do této databáze byla stažena ze serveru dicts.org v podobě xml souborů. Pro naparsování vstupních souborů byl použit XmlPullParser ve třídě OfflineParser. Naparsovaná data jsou v databázi offline. Modul je potomkem třídy BaseModuleClass, protože zde modulu není potřeba funkce pro další vyhledávání Vyhledávání v databázi je implementováno ve třídě OfflineTranslationDAO. Vyhledávání probíhá vždy z primárního, resp. sekundárního jazyka do všech ostatních jazyků, které jsou v databázi. V JSON objektu jsou zahrnuty všechny výsledky. Hodnoty LanguageFrom a LanguageTo jsou jazyky nastavené pro vyhledávání. Výsledky jsou uloženy v poli, pro každý směr vyhledávání jeden JSON objekt. Hodnota LanguageTo v tomto objektu určuje v jakém jazyce byl výsledky (Words) nalezeny.
Obrázek 23 JSON s výsledky vyhledávání z modulu offline
39
6.4.
Modul Wiktionary
Modul Wiktionary získává překlady ze serveru wiktionary.org, pro přístup k datům používá MediaWiki API. Struktura získaných dat je stejná jako v modulu offline (tj. jedním vyhledáváním lze získat překlad z jednoho jazyka do více jazyků). Rozdíl oproti ostatním modulům je v počtu HTTP požadavků pořebných pro získání dat. Tento modul potřebuje dva požadavky, ostatní pouze jeden. Implementace modulu je v balíčku net.extbrain.android.app.lookup.modules.wiktionary. Z metody getDownloadConnections() je vrácen seznam s prvky typu WiktionaryHttpConnection, který je potomkem třídy HttpConnection. V této třídě je nejprve volána akce query[21] z MediaWiki API, která vrátí seznam článků a jejich identifikátorů, jejichž název odpovídá hledanému slovu. Tato odpověď je parsována pomocí třídy ApiParser. Dále je vytvořena nová instance typu HttpConnection, která stáhne obsah (akce parse[20]) požadovaného článku. Odpověď je předána do třídy WiktionaryParser, která pomocí XmlPullParseru vyparsuje jednotlivé překlady z html kódu stránky. Formát JSON objektu s výsledky databáze je shodný s formátem použitým v offline modulu. JSON s výsledky vyhledávání ze serveru má navíc hodnotu Page Address, která udává adresu mobilní verze stránky s hledaným slovem.
Obrázek 24 Formát JSON objektů modulu Wiktionary
6.5.
Modul Bing Translate
Tento modul používá pro získání překladů Bing Translation API, získané překlady jsou ukládány do databáze. Vyhledávání probíhá vždy mezi primární a sekundárním jazykem, nebo opačně. Všechny překlady jsou staženy jedním požadavkem, proto není nutné implementovat funkce pro další vyhledávání. Implementace modulu se nachází ve třídě net.extbrain.android.app.lookup.modules.translate.BingTranslateModule. Vyhledávání v databázi je implementováno ve třídě OneToOneTranslationDAO. Stažená odpověď je 40
předána do metody translate() ve třídě BingParser. Pro parsování staženého xml je použit XmlPullParser. Formát JSON objektu posílaného do prohlížeče je shodný s formátem JSON objektu použitého v modulu Slovnikcz.
6.6.
Modul Google Translate
Google Translate modul je velmi podobný modulu Bing Translate, pouze používá Google Translate API. Rozdíl je v typu, který vrací API. V tomto module se jedná o JSON oproti xml v Bing Translate modulu. Na rozdíl od všech ostatních modulů má Google Translate modul možnost vlastního nastavení. Implementace modulu je v balíčku net.extbrain.android.app.lookup.modules.translate.google. Vlastní vyhledávání je implementováno ve tříde GoogleTranslateModule. Metoda hasSettings() musí vracet hodnotu true, aby byla zobrazena ikona pro nastavení modulu. Metoda startSettings() spustí aktivitu definovanou ve třídě GoogleTranslatePreference. Grafický vzhled nastavení modulu je definovaný v souboru googletranslatepreference.xml, v tomto případě se jedná pouze o textové pole, které slouží pro zadaní klíče pro přístup ke službě Google Translate. Jeho hodnota je uložena pomocí dříve popsané třídy android.content.SharedPreferences.
41
42
7. Tvorba nových modulů pro vyhledávání Nový modul pro vyhledávání informací lze vytvořit velmi jednoduše a to implementací rozhraní ModuleInterface. Pokud modul nepodporuje funkce pro další vyhledávání, stačí rozšířit třídu BaseModuleClass. Dále je potřeba přidat do konstruktoru třídy ModulesHolder – dictionaries.add(new Module());. Modul musí mít definovaný název, který je dostupný pomocí metody getName(). Tento název musí být unikátní v rámci všech nainstalovaných modulů. Pro každé vyhledávání jsou vytvořeny nové instance všech vyhledávacích modulů. Tudíž lze výsledky z lokálního zdroje přiřadit do proměnné instance a využít při pozdějším porovnání s aktualizovanými výsledky. Pokud má metoda v ModuleInterface parametry primaryLanguage a secondaryLanguage je volána pro každé vyhledávání pouze jednou, proto je potřeba do návratové hodnoty zahrnout všechny směry vyhledávání.
Stahování dat Veškeré
stahování
dat
musí
zajišťovat třída net.extbrain.android.app.lookup.tools.ConnectionManager, která hlídá maximální počet paralelně běžících stahování. Pokud modul vyžaduje stahování dat, měl by implementovat funkci getDownloadConnections(), kde vrátí seznam instancí třídy HttpConnection, nebo jejích potomků. Tato funkce je volána pro každé vyhledávání pouze jednou, proto je potřeba vrátit seznam, který obsahuje instance HttpConnection pro všechny směry vyhledávání. O správné stažení těchto vláken se postará implementace javascriptInterfacu. Odpovědi z těchto stahování modul dostane jako parametr response ve funkci getUpdates(). Příklad implementace je z modulu Bing Translate, kde je vidět, že modul vrací instance HttpConnection pro oba směry vyhledávání.
Obrázek 25 Ukázka implementace metody getDownloadConnections()
Získání informací ze stažených dat Parsování dat z HTTP odpovědí je implementováno v metodě getUpdates(). Tato metoda je zavolána pro každé dokončené stahování (každá instance HttpConnection, která byla vrácena z metody getDownloadConnections()). 43
Pro parsování dat lze použít nekterá API dostupná přímo v Androidu. Pro xml například XmlPullParser, pro JSON objekty například balíček org.json. Návratová hodnota funkce getUpdates() je ResultInterface. Pokud by pro Váš modul nevyhovovala žádná implementace v aplikaci vytvořte si vlastní pomocí implementování rozhraní ResultInterface. V metodě getJSON() vytvořte JSON objekt, který bude poslán do webového prohlížeče. Pokud nový modul vrací JSON shodný s JSON objektem, který vrací již existující modul, stačí patřičně upravit Javascriptovou funkci fill(), aby podle názvu modulu volala funkci pro tvorbu html kódu z JSON objektu. Pokud jste vytvořili zcela nový JSON, je potřeba vytvořit také funkci, která se postará o vytvoření html kódu z tohoto JSON objektu. Poté upravte funkci fill(), aby zavolala Vaši novou funkci. Funkce fill() se nachází ve složce assets v souboru default.js.
Přístup do databáze Pro přístup do databáze je použita třída SQLiteHelper, která je potomkem třídy android.database.sqlite.SQLiteOpenHelper.[22] Tato třída vytváří databáze umístěné ve složce cz.slovnik/databases na SD kartě. Schéma databáze je popsáno v kapitole Databáze pro vyhledávací moduly. V aplikaci je jedna instance této třídy pro každou databázi, odkaz na instanci získáte voláním metody getInstance(). Pokud potřebujete databázi s jiným schématem doporučuji postupovat obdobně. Vytvořit vlastní třídu, která bude potomkem SQLiteOpenHelper. Pro každou databázi, kterou tato třída spravuje, musí být v aplikaci jediná instance, čímž se zaručí vláknová bezpečnost. Tato třída se postará i o zavírání databáze, to se hodí zejména při přístupu k databázi z více vláken. Při volání konstruktoru nadtřídy lze použít novou instanci třídy DatabaseContext jako parametr, tím je zajištěno vytvoření databáze ve výše zmiňované složce na SD kartě. Vlastní SQL příkazy pro definic dat jsou v metodě onCreate().
Vyhledávání dalších informací Pro vyhledávání dalších informací slouží metody getNextDownloadConnection(), getNextDatabaseRecords(), getNextUpdates() a insertNextUpdates(). Jejich smysl i implementace jsou velmi podobné jako u metod popsaných v této kapitole. Všechny tyto metody jsou volány pouze pro jeden směr překladu. Parametr count určuje kolikáté vyhledávání má být provedeno. V dříve popsaných funkcích měl hodnotu 1, nejmenší hodnota pro tyto funkce bude 2. Při implementaci těchto funkcí je třeba pamatovat, že jejich vykonávání může být vyvoláno ihned po vrácení výsledku vyhledávání z metody getDatabaseRecords() a funkce getUpdates() a insertUpdates() nemusejí ještě být vykonány.
44
8. Tvorba šablon pro zobrazení výsledků vyhledávání Aplikace umožňuje uživateli definovat vlastní vzhled webové stránky s výsledky vyhledávání. Každá šablona je html soubor, který je v průběhu vyhledávání modifikován na základě JSON objektů Javascriptem. Ve vlastní šabloně může uživatel definovat nový vzhled webové stránky a nebo změnit způsob zobrazení výsledků z jednotlivých vyhledávacích modulů. Mezi šablonami lze přepínat v nastavení aplikace, položka WebView layout. Výchozí šablona je umístěna ve složce assets, jedná se o soubory default.html, default.css a default.js. Vlastní šablony se umísťují do složky cz.slovnik/layouts na SD kartě. Ve výchozí šabloně je pro každý modul vygenerován nadpis zobrazující jméno modulu. Pro každý směr vyhledávání v rámci modulu je vygenerován element (span), který má nastaven parametr class na hodnotu open, resp. closed. Element s hodnotou closed je pomocí kaskádových stylů skryt. Po kliknutí na odkaz s opačným směrem je pomocí javascriptu hodnota obrácena, tím dojde k zobrazení opačného směru vyhledávání. Pomocí javascriptu je poté měněn obsah těchto elementů podle JSON objektů s výsledky vyhledávání.[23] Při implementaci vlastní šablony lze využít funkce, které se nacházejí v souboru default.js, jedná se předevšim o funkce:
getSearchedWord() – vrací hledané slovo getPrimaryLanguage() – vrací aktuálně nastavený primární jazyk getSecondaryLanguage() – vrací aktuálně nastavený sekundární jazyk retrieveData() – spustí vyhledávání ve všech zapnutých modulech
vyvolat i voláním interface.nazevFunkce (např. interface.getPrimaryLanguage()). Funkce retrieveData() musí být volána pouze jednou pro každé hledání, například při události onLoad. Soubor default.js lze k šabloně začlenit pomocí odkazu: src=file:///android_asset/default.js a obdobně i soubor default.css. Po zavolání funkce retrieveData() bude aplikace volat funkci, jejíž název jste použili jako parametr function, vždy po prohledání každého modulu. V této funkci je třeba vygenerovat z JSON objektu (parametr funkce) html kód, který vložíte do stránky. Funkce má jeden parametr – JSON objekt. Pro již nainstalované moduly lze použít výchozí funkce pro generování html kódu, které se nacházejí v souboru default.js. Formáty JSON objektů jsou definovány v kapitole Implementované moduly pro získávání informací. Tyto
funkce
lze
Vyhledávací modul Výchozí metoda pro generování html kódu SlovnikCz fillSlovnikCz() Wiktionary fillWiktionary() Offline fillOneToManyLanguages() Google Translate fillOneToOne() Bing Translate fillOneToOne() Wikipedia fillWikipedia() Tabulka 2 Výchozí metody pro generování html kódu z JSON
45
Pokud potřebujete spustit vyhledávání dalších výsledků, je třeba zajistit zavolání funkce retrieveNextData(). Toho lze docílit například pomocí odkazu nebo tlačítka.
Obrázek 26 Ukázka html kódu pro spuštění dalšího vyhledávání
Ikony s vlajkami pro jednotlivé jazyky jsou ve složce assets. Název souboru je shodný s názvem jazyka, přípona je png.
Obrázek 27 Ukázka použití ikony s vlajkou
Kvůli problémům s Javascriptem, který se objevil při testování na telefonech s verzí operačního systému Android 2.3.3 doporučuji vložit do hlavičky html stránky následující kód.
Obrázek 28 Použití novější verze JSON
46
9. Testování Testování bylo zajištěno vedoucím práce a probíhalo průběžně při vývoji. Zjištěné nedostatky byly opraveny. Na základě reference od uživatelů byl vybrán způsob zobrazení výsledků vyhledávání ve webové stránce. Modul Google Translate nemohl být otestován, vzhledem ke zpoplatnění služby Google Translate. Při testování byly odhaleny a odstraněny následující problémy:
Bylo přidáno upozornění na špatné verze databáze U verze 2.3.3 se objevil problém s parsováním JSON objektů, projevem byla prázdná webová stránka, kde měly být zobrazeny výsledky. Toto bylo odstraněno změnou verze JSONu, viz kapitola Tvorba šablon pro zobrazení výsledků vyhledávání
47
48
10. Závěr V rámci bakalářské práce jsem navrhl a implementoval aplikaci pro vyhledávání informací pro Android a šest vyhledávacích modulů. Aplikace využívá možnosti poskytované aplikačním frameworkem Android. Při návrhu jsem vycházel ze srovnání již existujících podobných aplikací pro Android. V průběhu implementace byly zapracovány přípomínky a náměty vzešlé z testování aplikace. V této fázi aplikace kromě samotného vyhledávání umožňuje nastavení vyhledávacích modulů, zobrazuje historii vyhledávání, lze definovat vlastní šablony pro zobrazení výsledků. V rámci práce jsem implementoval šest modulů pro vyhledávání informací. Pro zdokumentování aplikace jsem použil UML diagramy a JavaDoc pro zdokumentování kódu, aby další vývojář mohl pokračovat ve vývoji. Uživatelské rozhraní bylo navrženo a implementováno na základě porovnání rozhraní u stávajících aplikací a námětů z testování.
Další vývoj aplikace Další rozšíření aplikace lze rozdělit na dvě skupiny.
Rozšíření samotné aplikace Dopsání dalších modulů nebo rozšíření těch stávajících
Vzhledem k použití doporučeného postupu při vývoji uživatelského rozhraní (všechny texty jsou v xml souborech) lze aplikaci snadno lokalizovat. V rámci historie by mohlo být implementováno více možností řazení a podpora oblíbených položek. Aplikace umožňuje jednoduché rozšíření o nové moduly. Postup je popsán v kapitole Tvorba nových modulů pro vyhledávání. Nový modul by mohl podporovat například vyhledávání ve slovníku WordNet. Co se týče rozšíření stávajích modulů, modul Wiktionary by šlo rozšířit o další informace (význam slova, historie apod.). Databáze modulu offline může být rozšířena o nové zdroje, tím by se obohatila i nabídka našeptávače.
49
50
11. Seznam použitých zkratek API AJAX HTML HTTP JSON NDK REST SDK SQL URI URL OS XML YAML
Application Programming Interface Asynchronous Javascript and Xml HyperText Markup Language HyperText Transfer Protocol Javascript Object Notation Native Development Kit Representational State Transfer Software Development Kit Structured Query Language Uniform Resource Identifier Uniform Resource Locator Operační Systém Extensible Markup Language YAML Ain’t Markup Language
51
52
12. Literatura [1]
Android (operační systém) [online]. [cit. 2010-01-02]. Dostupné z WWW:
[2]
Android (operating system) [online]. [cit. 2012-01-02]. Dostupné z WWW:
[5]
Designing for Performance [online]. [cit. 2012-01-02]. Dostupné z WWW: Aplikace Fora dictionary [online]. [cit. 2011-03-15]. Dostupné z WWW: Aplikace Dictionary.com [online]. [cit. 2011-03-15]. Dostupné z WWW:
[6]
DICT [online]. [cit. 2011-17-03]. Dostupné z WWW:
[3] [4]
[7] [8] [9]
Android SDK [online]. [cit. 2011-12-27]. Dostupné z WWW: Native Development Kit [online]. [cit. 2011-12-28]. Dostupné z WWW: What is Android [online]. [cit. 2011-12-26]. Dostupné z WWW:
[10] SQLite [online]. [cit. 2011-12-28]. Dostupné z WWW: [11] O slovníku.cz [online]. [cit. 2011-12-25]. Dostupné z WWW: Google Translate API v2 [online]. [cit. 2011-12-28]. Dostupné z WWW:
[12]
Using the free Bing Translation APIs [online]. [cit. 2011-12-26]. Dostupné z WWW:
[13] MediaWiki API [online]. [cit. 2011-12-26]. Dostupné z WWW:
[14]
AsyncTask [online]. [cit. 2011-12-28]. Dostupné z WWW:
[15] Shared Preferences [online]. [cit. 2011-12-27]. Dostupné z WWW:
[16] [17] [18]
Metoda addJavascriptInterface() [online]. [cit. 2001-12-28]. Dostupné z WWW: Wordnet [online]. [cit. 2011-12-28]. Dostupné z WWW:
[19] WordNet [online]. [cit. 2011-12-28]. Dostupné z WWW: Action parse [online]. [cit. 2011-12-25]. Dostupné z WWW:
[20]
Action query [online]. [cit. 2011-12-25]. Dostupné z WWW:
[21]
SQLiteOpenHelper [online]. [cit. 2012-01-02]. Dostupné z WWW:
[22]
53
Javascript and HTML DOM Reference [online]. [cit. 2011-12-12]. Dostupné z WWW:
[23]
54
13. Přílohy
55
56
13.1.
Srovnání existujících řešení Dictionary.com
Advanced English
Multi Lang Dictionary Google translate, Google dictionary, Wiktionary Ve verzi PRO
Wordmate
Colordict
Překladač Google
Fora dictionary
-
Google translate, Google dictionary, Wikipedia
Google translate, Google dictionary
Google Translate, Wikipedia, slovníky přes dict protokol
WordNet,
WordNet
-
57
Online zdroje
Dictionary.com, thesaurus.com
-
Offline zdroje
-
WordNet
Formát offline zdrojů
-
StarDict
databáze
StarDict, DWM
StarDict
-
Historie Oblíbené
ano ano
ano -
ano -
ano ano
ano ano
Nastavení
pozadí
místo uložení slovníku
-
Zobrazení seznamu slov, nebo zobrazení slova
font, velikost textu
Převod textu na řeč, použití našeptávače, režim konverzace
Přehrávání výslovnosti
ano
-
ano
ano
ano
ano
ano
Vyhledávací filtry
-
Fuzzy, wildcard, keyword
-
-
-
-
-
-
-
-
-
ano
-
ano
-
-
Ve verzi PRO
ano
ano
-
ano
ne
ano
ne
ano
ano
ano
ano
Použití více slovníků současně Použití dalších slovníků Našeptávač
Tabulka 3 Srovnání existujících řešení
English Dictionary and Thesaurus StarDict, XDXF, DSL, DICTD a plain-text (oddělený tabulátory) ano ano místo uložení slovníků, vypínaní/zapínání našeptávače, font, velikost textu,
13.2.
UML diagramy
Obrázek 29 Diagram tříd v balíčku presentation
58
Obrázek 30 Diagram tříd výchozí aktivity
59
Obrázek 31 Diagram tříd aktivity pro nastavení modulů
Obrázek 32 Diagram tříd aktivity historie
60
Obrázek 33 Diagram tříd modulů
61
13.3.
Instalační příručka
Pro instalaci aplikací, které nejsou staženy z Android Marketu je třeba mít tuto možnost povolenou v nastavení zařízení. Je třeba zaškrtnout možnost: menu/Nastavení/Aplikace/Neznámé zdroje(Povolit instalaci aplikací z jiných trhů). Poté stačí instalační soubor slovnik.apk, který se nachází na přiloženém CD v adresáři bin/, zkopírovat do mobilního zařízení (např. na SD kartu). Pomocí správce souborů otevřít instalační soubor, potom dojde k instalaci. Aplikace je nyní nainstalována v systému pod jménem Slovnik. Po jejím spuštění jsou na SD kartě vytvořeny adresáře: cz.slovnik/databases a cz.slovnik/layouts. Do adresáře cz.slovnik/databases nakopírujte databázi offline, která je na přiloženém CD v adresáři Project/databases/. Aplikace je připravena k používání.
13.4.
Uživatelská příručka
Po spuštění programu je zobrazena úvodní aktivita, kde je textové pole pro zadání vyhledáváné fráze, tlačítko s ikonou lupy pro spuštění vyhledávání. V pravém horním rohu je tlačítko s ikonou aktuálně zvoleného sekundárního jazyka. Kliknutím na tlačítko je zobrazen seznam jazyků, ze kterých může uživatel vybírat. Uprostřed obrazovky je tlačítko pro změnu primárního jazyka. Pod ním se nachází seznam aktuálně nainstalovaných vyhledávacích modulů. Po stisku hardwarového tlačítka Menu je vyvoláno menu pro přepínání mezi jednotlivými aktivitami aplikace.
Položka Modules Settings slouží pro spuštění nastavení vyhledávacích modulů Položka History zobrazí historii vyhledávaných frází. Položka Settings spustí nastavení aplikace.
Stisknutím hardwarového tlačítka Zpět se vrátíte do úvodní aktivity.
Nastavení aplikace V nastavení aplikace lze zvolit primární jazyk (položka Primary Language), maximální počet současně běžících vláken pro stahování (položka Number of download threads) a šablonu pro zobrazení výsledků vyhledávání (položka WebView Layout).
Nastavení vyhledávacích modulů V nastavení vyhledávacích modulů lze měnit jejich pořadí a tím určit jejich pozici na stránce s výsledky vyhledávání. Pořadí modulu změníte tažením za ikonu, která se nachází 62
vlevo u každého modulu. Dále lze modul vypnout, resp. zapnout pomocí zaškrtávacího tlačítka u pravého okraje. Pokud vyhledávací modul umožňuje nastavení, je u něj zobrazena ikona ozubeného kolečka, jejímž stisknutím spustíte aktivitu s nastavením modulu.
Historie vyhledávání Historie vyhledávání zobrazuje vyhledávané fráze seřazené podle času vyhledávání. U každé fráze je zobrazeno v rámci jakých jazyků byla vyhledávána. Každou položku lze vyhledat znovu kliknutím na ikonu lupy (spustí vyhledávání v rámci jazyků zobrazených u položky). Kliknutím na ikonu křížku vymažete položku z databáze. Kliknutím na řádek je fráze nakopírována do textového pole v úvodní aktivitě a aktivita historie je vypnuta. To umožňuje například opravit vyhledávanou frázi nebo spustit vyhledávání této fráze v rámci jiných jazyků. Historii vyhledávání můžete smazat kliknutím na položku Clear history v menu aktivity Historie.
Vyhledávání Vyhledávanou frázi nebo její začátek napiště do textového pole v úvodní aktivitě. Pod textovým polem jsou zobrazovány položky našeptávače, pokud jich je více lze mezi nimi rolovat. Položky jsou zobrazovány z offline databáze a ze serveru Wikipedia. U každé položky je zobrazen jazyk, ve kterém byla nalezena. Samotné vyhledávání spustíte kliknutí na ikonu lupy vpravo od textového pole. Druhou možností je kliknutí na vybranou položku z našeptávače. Pokud jazyk u vybrané položky neodpovídá aktuálně zvolenému primárnímu nebo sekundárnímu jazyku, je provedeno vyhledávání mezi jazykem u vybrané položky a aktuálně nastaveným sekundárním jazykem. Mezi směry vyhledávání lze přepínat přímo v aktivitě zobrazující výsledky vyhledávání kliknutím na vlajku v horní části obrazovky.
Vlastní šablony Aplikace umožňuje definovat vlastní šablonu pro zobrazení výsledků vyhledávání. Návod pro její vytvoření je v kapitole Tvorba šablon pro zobrazení výsledků vyhledávání. Vytvořenou šablonu umístěte do složky cz.slovnik/layouts/. V aplikaci lze mezi šablonami přepínat v nastavení aplikace položka WebView Layout.
63
64
14. Obsah přiloženého CD Na přiloženém CD je následující adresářová struktura:
Obrázek 34 Adresářová struktura na přiloženém CD
Obsah adresářů:
Application – obsahuje instalační soubor aplikace JavaDoc – JavaDoc dokumentace ke zdrojovému kódu Project o Databases – offline databáze pro použití v aplikaci o Slovnik – projekt pro Eclipse Texts – Text bakalářské práce ve formátech doc a pdf, instalační a uživatelská příručka
65