MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY Inteligentní vyhledávač hodnocení knih Bakalářská práce Tomáš Kácel Brno, 2012
Prohlášení Prohlašuji, že tato práce je mým původním autorským dílem, které jsem vypracoval samostatně. Všechny zdroje, prameny a literaturu, které jsem při vypracování používal nebo z nich čerpal, v práci řádně cituji s uvedením úplného odkazu na příslušný zdroj. V Brně dne 20. května 2012 podpis
Poděkování Na tomto místě bych rád poděkoval RNDr. Aleši Horákovi, PhD. za jeho odborné vedení, trpělivost a čas, který věnoval mé bakalářské práci.
Shrnutí Tato práce se zabývá analýzou serverů, které se věnují české literatuře a uchovávají data vztahující se k hodnocení knih. Dále se práce zaměřuje na analýzu systému, který má za úkol vyhledat na těchto serverech zmíněné hodnocení a informace o knize, popřípadě autorovi. Dle této analýzy je potom daný software naprogramován. Klíčová slova Analýza systému, vyhledávač hodnocení knih, vyhledávač knih, knižní databáze, návrh grafického uživatelského rozhraní, návrh systému.
Obsah: 1 Úvod... 8 2 Projekty hodnocení knih... 9 2.1 Analýza stránky cbdb.cz... 9 2.2 Analýza stránky databazeknih.cz... 11 2.3 Analýza serveru knihi.cz... 12 2.4 Analýza serveru kdb.cz... 13 3 Knihovní katalogy... 15 3.1 Analýza knihovního katalogu aleph.muni.cz... 15 3.2 Analýza knihovního katalogu carmen.kjm.cz... 16 4 Analýza a návrh systému Vyhledávač hodnocení knih... 18 4.1 Nalezení sjednocujících prvků knižních databází... 18 4.2 Nalezení podobných aplikací... 19 4.3 Specifikace a popis účelu systému... 19 4.3.1 Způsob řazení a vyhledávání výsledů... 20 4.3.2 Vlastní databáze systému... 21 4.4 Návrh systému zaměřený na úlohy uživatele... 23 4.4.1 Identifikace uživatelů a specifikování jejich úloh... 23 4.4.2 Určení, pro jaké uživatele je návrh vytvářen... 24 4.4.3 Návrh grafického uživatelského rozhraní... 25 4.4.4 Vertikální průchod systému... 26 5 Implementace a předvedení systému... 29 5.1 Zvolení programovacího jazyka... 29 5.2 Technologie Common Gateway Interface... 30 5.3 Popis tříd a CGI skriptů aplikace... 30 5.3 Implementace databáze... 35 5.4 Nadstavba systému... 35 5.5 Předvedení systému... 36 6 Závěr... 40 Seznam použitých zdrojů:... 41 Seznam obrázků... 44 Seznam tabulek... 44
Seznam elektronických příloh a přiloženého cd... 45 Seznam příloh... 45
1 Úvod V dnešní době vychází nespočet knižních titulů, jak v elektronické, tak v tištěné podobě. V tomto ohromném množství knih je velmi obtížné se orientovat. O knihách vychází spousta časopisů s recenzemi, Internet je zaplněn nejrůznějšími knižními servery, jako jsou oficiální stránky vydavatelů, nakladatelů a kritiků. V elektronické podobě nalezneme také knižní databáze. Společnosti jako Google [1] nabízejí služby pro vyhledávání knih na Internetu s možností nahlédnutí do obsahu díla. Na spoustě serverů je možnost si knihu přímo zakoupit. Tato bakalářská práce se věnuje především serverům typu knižní databáze. Tento druh databáze a webových stránek slouží především k tomu, aby si uživatel nalezl subjektivní hodnocení knihy od ostatních uživatelů a podle toho mohl rozhodnout, co si přečte za další titul. Hodnocení bývá reprezentováno číselnou hodnotou, popřípadě tato hodnota je doprovázena stručným komentářem hodnotícího. Registrovaní uživatelé knižních databází mohou také své názory a hodnocení přidávat. Na českém Internetu nalezneme takovýchto stránek hned několik. Každý, kdo ovládá alespoň základy tvorby webových stránek a tvorbu databází, může podobný server vytvořit. Proto jsem se zaměřil na první čtyři české databáze, které nalezl internetový vyhledávač Google [2]. Cílem této práce je vytvořit inteligentní vyhledávač hodnocení knih, který z nejrůznějších knižních databází získá hodnocení a ucelené informace o knize. Celkový výsledek ze všech serverů potom zobrazí uživateli. Práce se zaměřuje na české knižní servery, proto jsou preferovány české názvy knih. Pouze některé databáze umožňují při vyhledávání používat i originální názvy nebo anglické názvy knih. Z tohoto důvodu je práce zaměřena na češtinu. Výsledkem je webová aplikace, do níž uživatel zadá název knihy (popřípadě autora). Program nalezne potřebná data na každém serveru zvlášť a přehledně zobrazí výsledek uživateli. Účel programu je zjednodušit hledání knižních hodnocení a informací o knize. Uživatel tak nemusí hledat informace na každém serveru zvlášť a zadávat neustále dokola stejná klíčová slova. Další funkcí aplikace je zjištění, jestli se zadaný titul nalézá v knihovně. V případě, že se v knihovně nalézá, tak aplikace zjistí, zda je možné si daný titul vypůjčit nebo je právě vypůjčen jiným uživatelem. Práce vychází jak z vlastní analýzy dostupnosti informací o české literatuře na Internetu, tak z vlastní analýzy systému. Analýze systému je věnovaná značná část této práce. Systém také obsahuje vlastní databázi, do které je možné po zadání hesla vkládat autory a knižní tituly. Bakalářská práce je součástí Laboratoře zpracování přirozeného jazyka, z tohoto důvodu byl zvolen skriptovací jazyk Python [4]. V tomto programovacím jazyce je naprogramovaná značná část projektů a prací v laboratoři, proto nebyl důvod programovací jazyk měnit. Další jazyky, které jsou v této práci použity, jsou jazyky HTML a SQL. Část práce se věnuje návrhu grafického uživatelského rozhraní, ve kterém bude uživatel pracovat. Webové rozhraní je zde podrobně popsáno, jak z grafického hlediska, tak z pohledu ovladatelnosti. Tyto kapitoly by měly uživatele naučit správně a efektivně používat daný software. 8
2 Projekty hodnocení knih V dnešní době na internetu nalezneme mnoho typů internetových stránek, které se zabývají literární tématikou. Tato kapitola se zabývá analýzou serverů, které se zaobírají subjektivním hodnocením knih. Jedná se o databázové systémy, jejichž úkolem je shromažďovat informace o vydaných knihách. Mezi tyto informace patří hodnocení a komentáře registrovaných uživatelů, recenze, popis knih, životopisy autorů a jiné. Jako první krok při hledání takovýchto stránek byl použit internetový vyhledávač Google [2]. Mezi nejvýše vyhledanými nalezl tyto domény: www.cbdb.cz www.databazeknih.cz www.knihi.cz www.kdb.cz www.legie.info www.knihovnice.cz www.kndb.cz Tato práce se soustřeďuje na první čtyři výše uvedené zdroje. Stránka www.legie.info je určena pouze pro fantasy literaturu a na doméně www.knihovnice.cz je k nalezení pouze několik set záznamů. Databáze www.kndb.cz je zcela nefunkční. Z těchto důvodů nebyly brány tyto zdroje jako relevantní. Účel analýzy je nalézt odpověď na následující otázky: Jakým způsobem zadává uživatel dotaz na knihu, popřípadě autora? Jakým způsobem internetová stránka zobrazuje výsledky? Jaké informace server poskytuje uživateli? Tyto informace jsou důležité z toho důvodu, že musíme přesně vědět, co za konkrétní data se na daném serveru vyskytují. Nalezené výsledky jsou později použity při analýze nového systému, který se zaměřuje na skloubení dat z každého jednotlivého serveru. Po získání informace, jakým způsobem jednotlivé stránky vyhledávají data, se můžeme zaměřit na analyzování techniky, kterou použijeme pro získání výsledků vyhledávání z každého portálu. 2.1 Analýza stránky cbdb.cz Tento webový portál charakterizuje své cíle následujícím způsobem: Cílem projektu je shromáždit co nejvíce informací a recenzí o knihách vydaných v českém jazyce i jejich autorech a také vás informovat o všech novinkách v knižním světě (www.cbdb.cz, 2012). Na této stránce [7] můžeme dále zjistit počet knih v databázi. Toto číslo převyšuje 60 000. Autorů 9
v databázi je více jak 26 000. Stránka poskytuje uživateli jednoduché vyhledávání, které neobsahuje možnost určení parametrů hledání. Formulář pro vyhledávání se nachází v pravém horním rohu. Uživatel může zvolit možnost pokročilého vyhledávání, zde je možné upřesnit parametry hledání. Po zadání klíčového slova do formuláře, se zobrazí výsledek rozdělený do tří kategorií. Kategorie jsou následující: Nalezeno v českých názvech Nalezeno v originálních názvech Nalezeno ve jménech autorů Obrázek č. 1: znázornění výstupu serveru www.cbdb.cz po zadání dotazu Krakatit [8] Každá kniha a každý autor má svůj vlastní profil. V profilu knihy nalezneme údaje o autorovi, knižní přebal, žánr, do kterého kniha spadá, ISBN knihy, názvy nakladatelství, ve kterých byla kniha vydána a rok vydání. Dále je součástí profilu procentuální hodnocení, popis knižního titulu a komentáře uživatelů. V profilu autora nalezneme jeho jméno, procentuální hodnocení, místo a rok narození, knihy autora a životopis. Některé profily neobsahují všechny údaje. Obrázek č. 2: ukázka profilu knihy Krakatit na serveru www.cbdb.cz [9] 10
2.2 Analýza stránky databazeknih.cz Web DatabazeKnih.cz má za cíl shromažďovat co možná nejvíce informací o autorech a jejich knihách, OFICIÁLNĚ vydaných na území České republiky a Slovenska. Projekt byl spuštěn v prosinci roku 2008 a každým dnem je vylepšován a rozšiřován (http://www.databazeknih.cz/o-databazi-knih, 2012). Na tomto serveru [10], na spodní liště, nalezneme informace o počtu knih a autorů. Počet knih je větší než 117 000. Počet autorů je zde kolem 38 000. Vyhledávání je umožněno pomocí formuláře, který se vyskytuje v pravém horním rohu stránky. Do tohoto formuláře se zadává, jak název knihy, tak název autora. Není zde možnost hledání pouze v autorech nebo pouze v knihách. Výsledek zobrazený uživateli je roztříděný do kategorií, podle toho, kde byl hledaný výraz nalezen. Nalezené údaje jsou zobrazeny uživateli pouze v kategoriích, kde byla nalezena shoda. Kategorie jsou následující: Knihy Autoři Knižní edice Obrázek č. 3: znázornění výstupu serveru www.databazeknih.cz po zadání dotazu Krakatit [11] Profil knihy obsahuje údaje o autorovi, procentuální hodnocení knihy, obrázek přebalu knihy, žánr, rok vydání, první rok vydání, ISBN, počet stran, druh vazby a popis knihy. Registrovaní uživatelé mohou zadávat své komentáře. Profil autora poskytuje jeho jméno, zemi původu, roky života a životopis. Uživatel má možnost kliknout na odkazy zobrazující úplný seznam knih autora, jeho povídky a citáty. 11
Obrázek č. 4: ukázka profilu knihy Krakatit na serveru www.databazeknih.cz [12] 2.3 Analýza serveru knihi.cz Knihi.cz je prostorem pro všechny čtenáře a jejich oblíbené knihy. Každý si u nás může založit svůj on-line čtenářský deník a vkládat do něj knihy dle libosti. Všechny přečtené knihy pak může hodnotit a své postřehy sdílet s ostatními čtenáři. Našim cílem je seznámit vás se zajímavými tituly, které by vám jinak unikly. Všechny údaje o knihách máme od podobně nadšených čtenářů, jako jste vy. Naše hodnocení a doporučení jsou proto mnohem reálnější, než žebříčky knihkupců nebo recenze v novinách (http://www.knihi.cz/help.php, 2012). Tímto způsobem se prezentuje tento internetový portál. V databázi na tomto serveru [13] se vyskytuje více jak 37 000 knih a téměř 20 000 autorů. Pokud na této stránce chceme vyhledávat v jejich databázi, musíme zvolit, ve které kategorii bude hledaný výraz vyhledáván. Ve formuláři, jenž je umístěn na levé straně stránky, uživatel musí zvolit z následujících možností: Kniha Autor Čtenář Obrázek č. 5: znázornění výstupu serveru www.knihi.cz po zadání dotazu Krakatit [14] Profil knihy obsahuje informace o autorovi, procentuální hodnocení knihy, typ knihy, popis knihy, další knihy autora, který napsal zvolenou knihu, komentáře registrovaných uživatelů. I tento portál obsahuje detail autora. Každá stránka, jejíž účel je poskytovat informace o autorovi, obsahuje data o jménu autora, procentuální hodnocení, počet knih, životopis autora, seznam vydaných titulů a komentáře uživatelů. 12
Obrázek č. 6: ukázka profilu knihy Krakatit na serveru www.knihi.cz [15] 2.4 Analýza serveru kdb.cz Oficiální popis stránky, kterým se server představuje je následující: Lidstvo od svého vzniku nashromáždilo obrovské množství publikací, ve kterých je velmi těžké se orientovat. Čtenáři jsou tak často nuceni vybírat knihy na základě neúplných informací o jejich žánru, kvalitě nebo obsahu. Na serveru KDb.cz můžete veškeré informace hodnotit, komentovat, recenzovat, což by mělo pomoci tento nedostatek odstranit (http://www.kdb.cz, 2012). V databázi této stránky figuruje téměř 50 000 knih a 14 000 spisovatelů [16]. Internetová stránka www.kdb.cz poskytuje jednoduché vyhledávání pomocí formuláře na hlavní stránce. Existuje zde i možnost pokročilého vyhledávání, které je umístěno v záložce knihy a záložce spisovatelé. Jednoduché vyhledávání hledá ve všech kategoriích a posléze zobrazuje vytříděné výsledky do tří skupin: Dle názvu knihy Dle jména spisovatele Dle originálního názvu knihy Obrázek č. 7: znázornění výstupu po dotazu Krakatit na serveru www.kdb.cz [17] 13
Profil Každé knihy obsahuje jméno autora, jazyk knihy, žánr knihy, procentuální hodnocení, obálky knihy, seznam vydání. V profilu je možné se přesunout odkazem do jednotlivých vydání. Zde nalezneme jméno nakladatele, ISBN, EAN, termín a pořadí vydání, místo vydání, rozsah a formát titulu, druh vazby, knižní edici a anotaci knihy. Profil autora poskytuje uživateli informace o národnosti, místu a datu narození, datum úmrtí a pohlaví. Dále je možné zjistit informace o procentuálním hodnocení jednotlivých uživatelů, přečíst si životopis autora a prolistovat seznam vydaných knih. Obrázek č. 8: ukázka profilu knihy Krakatit na stránce www.kdb.cz [18] 14
3 Knihovní katalogy V České republice je obrovské množství knihoven. Velká část z nich se prezentuje na Internetu. Na svých stránkách často poskytují přístup ke knihovním údajům, kde jsou k nalezení informace o dostupnosti knih v pobočkách knihovny. Tato část práce se soustřeďuje na analýzu takovýchto knihovních katalogů. Byly vybrány následující adresy katalogů: http://carmen.kjm.cz http://aleph.muni.cz Analýza má za úkol zjistit následující fakta: Způsob zadávání dotazu uživatelem na dostupnost titulu v knihovně Způsob, jakým se vyhledaná data prezentují uživateli Jaké konkrétní informace o dostupnosti portál poskytuje Získání těchto informací byl základní požadavek, bez kterého by nešlo vytvořit analýzu nově vytvářeného systému. 3.1 Analýza knihovního katalogu aleph.muni.cz Masarykova univerzita poskytuje svým studentům a zaměstnancům možnost vypůjčení knih. Jak zmiňuje Bartošek [21], univerzita však nemá centrální knihovnu, ale několik knihoven, které jsou rozmístěny v prostorách jednotlivých fakult. V roce 2002 přešla celá univerzita na software od společnosti ExLibris, která působí v Izraeli. Tento systém umožňuje vztahovat dotazy na všechny knihovny Masarykovy univerzity. Jedná se o knihovní katalog aleph Masarykovy university. Z tohoto důvodu, byla tato stránka zařazena do projektu. Základní vyhledávání umožňuje vyhledat údaj podle slova nebo slovního spojení. Toto slovo je vyhledáváno v různých částech katalogu. Katalog je rozdělen podle samostatných fakult a středisek univerzity. V jaké části bude vyhledávač hledat, je volbou uživatele, stejně tak uživatel určuje, v jakém poli 1 proběhne vyhledávání. Dále může zadávající zvolit, zda slova ve slovním spojení, které zadal, mají být pouze vedle sebe nebo mohou obsahovat i další vsunutá slova. Obrázek č. 9: ukázka vyhledávání na serveru aleph.muni.cz [12] 1 Pole udává, zda hledané slovo určuje název knihy, autora,isbn či jinou vlastnost 15
Vyhledané výsledky jsou prezentovány pomocí tabulky. Tato tabulka ukazuje jméno autora, název díla, rok vydání, na jakém orgánu univerzity se titul nalézá, počet výtisků a číslo, které udává počet vypůjčených knih. Pro bližší informace se dají jednotlivé výsledky rozkliknout. Obrázek č. 10: ukázka vyhledaných údajů v knihovním katalogu aleph.muni.cz [19] 3.2 Analýza knihovního katalogu carmen.kjm.cz Katalog Carmen je katalogem Knihovny Jiřího Mahena v Brně. Jak uvádí na svých internetových stránkách [29], jedná se o druhou největší městskou knihovnu v České republice. Při zadávání slovního spojení určujeme místo, kde bude hledaný výraz vyhledán: Všude V názvech V autorech V tématech Obrázek č. 11: ukázka vyhledávání na serveru carmen.kjm.cz [30] Jako výsledek vyhledávání dostáváme odkazy do profilů knih, autorů a témat, které se shodují se zadaným slovem. V každém profilu knihy nalezneme základní informace o názvu, vydání, ISBN, rozsahu a ceně. Profily bývají doprovázeny krátkou textovou anotací knihy a tabulkou 16
určující dostupnost titulu v provozovnách knihovny. Tato tabulka udává adresu pobočky, kde se daný výtisk nalézá. Celkový počet dostupných kusů a počet vypůjčených kusů. Obrázek č. 12: ukázka detailu knihy Krakatit v knihovním katalogu Carmen [31] 17
4 Analýza a návrh systému Vyhledávač hodnocení knih Před samotnou implementací každého projektu, by mělo dojít k analýze a specifikaci požadavků na vytvářený systém. Výsledek analýzy směřuje a pomáhá programátorům vytvořit funkční program. Účelem této kapitoly je určit, co by měl program nabízet a jakým způsobem docílit výsledného efektu. 4.1 Nalezení sjednocujících prvků knižních databází Kapitola 2 se orientovala na analyzování dostupných knižních databázových serverů. Bylo zjištěno, jaká data jsou na těchto serverech k dispozici. Další částí je vyhodnocení, které informace jsou dostupné současně na všech serverech. Výsledný program se nezabírá informacemi, které nejsou dostupné nebo nejsou slučitelné na všech čtyřech stránkách. Seznam prvků, které jsou k nalezení na stránkách databází a jsou slučitelné, pro jednotlivou knihu, je následující: Název knihy Jméno autora Hodnocení knihy Popis knihy Výše zmíněné čtyři vlastnosti jsou základní součástí každého knižního profilu. Jméno autora není vyplněno pouze v případě, když je autor neznámí. Hodnocení není známo, jen za předpokladu, že nikdo daný titul neohodnotil. U některých knih chybí popis. Popis může být vždy doplněn některým uživatelem nebo pracovníky databázového serveru. Jednou z vlastností knižního profilu, který se v nějaké podobě objevuje, na všech čtyřech stránkách, je žánr knihy, popřípadě kategorie knihy. Problémem je, že tato vlastnost je neslučitelná. Jako příklad mohu uvést knihu Krakatit od spisovatele Karla Čapka a jednotlivé zařazení dle žánru, na jednotlivých databázových serverech: Na stránce knihi.cz figuruje v kategorii beletrie [15] Na stránce kdb.cz jako česká a slovenská próza, či jako sci-fi [18] Na stránce cbdb.cz jako česká literatura/román/utopické [9] Na stránce databazeknih.cz jako literatura česká romány [12] Z výše uvedeného příkladu jednoznačně plyne, že nelze knihu zařadit do žánru pod jeden název nebo pojem. Z tohoto důvodu nebyl žánr, v další fázi vývoje, brán v potaz. Vlastnost ISBN knihy není součástí všech profilů, stejně tak počet stran a seznam vydání. Tato práce je zaměřena především na hodnocení a na zjištění základních informací o knize, a z tohoto důvodu nebyly tyto informace brány jako podstatné. 18
Dále bylo nutné specifikovat sjednocující prvky, které vychází z analýzy profilu autora na jednotlivých serverech. Sjednocující prvky autora jsou následující: Jméno autora Hodnocení autora Doprovodný text, popřípadě životopis Knihy autora Vlastnosti jako rok narození, místo působení a národnost nejsou zastoupeny ve všech profilech, a proto se těmito údaji dále práce nezabývá. Stejně jako u knihy, nemusejí být všechny vlastnosti řádně vyplněny. 4.2 Nalezení podobných aplikací Jednou z prvních fází vývoje systému je zjištění aktuálního stavu nabízených produktů, které se zabývají podobnou problematikou. Tento stav se zjišťuje za účelem, aby další produkt nebyl stejný či velmi podobný již nabízenému produktu a také pro vyvarování se stejných chyb, kterých se dopustili předchozí vývojáři. Při hledání podobných produktů, jako je ten, kterým se zabývá tato bakalářská práce, však nebyla nalezena žádná shoda. Na Internetu se vyskytuje značné množství stránek, které jsou věnované autorům či konkrétním oblíbeným knihám. Můžeme se setkat se službou Knihy Google [1], tato služba umožňuje nahlédnout do obsahu knihy, některé knihy jsou zde dokonce v celém svém rozsahu a v několika jazycích. Portál, který by slučoval výsledky nebo vyhledával informace na jiných zdrojích a potom je zobrazoval uživateli, však nebyl nalezen. Proto je velmi pravděpodobné, že aplikace Inteligentní vyhledávač hodnocení knih je první svého druhu. Vytvoření specifikace se tedy neopírá o žádný již vytvořený software. 4.3 Specifikace a popis účelu systému Systém na vyhledávání hodnocení knih je navržen jako webová aplikace, jejímž účelem je nalézt informace o knižních titulech a autorech. Vyhledávač je spojen se čtyřmi databázovými internetovými stránky, které se zabývají subjektivním hodnocení knih a autorů. Adresy těchto stránek jsou následující: www.cbdb.cz www.databazeknih.cz www.knihi.cz www.kdb.cz 19
Uživatel systému zadává klíčové slovo, podle kterého se bude vyhledávat na každé výše zmíněné stránce. Systém prochází výsledky vyhledávání a podle parametrů, které uživatel před vyhledáváním zvolil, jsou výsledky zveřejněny. Hlavním účelem vyhledávání je identifikovat a nalézt hodnoty sjednocujících prvků každé knihy a každého autora. Tedy k vyhledávané knize jsou nalezeny údaje o hodnocení, názvu, jménu autora a popis knihy. U autora jsou separovány hodnoty udávající jméno autora, hodnocení, životopis a vydané knihy autora. Systém je spojen s knihovními katalogy a jeho úkolem je separovat informace o dostupnosti titulu v knihovně. Tyto informace jsou následně zveřejněny uživateli. Systém komunikuje s knihovnou Jiřího Mahena v Brně a knihovním katalogem Masarykovy univerzity. Systém, kromě hledání informací ve vnějším světě, také obsahuje vlastní databázi. Tato databáze má za úkol uchovávat data o knihách a autorech. Jednotlivé atributy databáze jsou sjednocující prvky knih a autorů. 4.3.1 Způsob řazení a vyhledávání výsledů Po zadání slova, které se má vyhledávat, má zadávající možnost zvolit, v jaké kategorii bude dané slovo, popřípadě slovní spojení vyhledáno. Kategorie jsou následující: Vyhledávání v názvu knih Vyhledávání v názvu autorů Poté má uživatel možnost zvolit, jakým způsobem budou data tříděná a seřazená. Lze vybrat z následujících možností: Dle abecedy sestupně Dle abecedy vzestupně Dle hodnocení vzestupně Dle hodnocení sestupně Dle serveru 2 Další možnost vyhledávání je průměrování hodnocení knižního titulu. A to následujícími způsoby: Průměr všech nalezených knih, se stejným autorem a jménem knihy, které se přesně shoduje se zadaným názvem knihy Průměr všech takových knih, které napsal stejný autor a název zadaný uživatelem je součástí názvu knihy U tohoto druhu vyhledávání je nutné, aby uživatel znal název knihy, nebo alespoň část názvu v přesném tvaru (velká a malá písmena nehrají roli). Vyhledávání, kde je slovní spojení součástí názvu knihy, je zařazeno z důvodu toho, aby v případě knih, které obsahují více 2 Podle pořadí, v jakém postupně servery knihy nabízely 20
svazků nebo povídek, mohlo být zařazeno do průměrování každé dílo, které obsahuje daný svazek. Dalším důvodem je, že zadavatel nemusí znát název díla v plném rozsahu, ale jen část názvu. Dále má systém možnost nalézt knihy autora. Pro tento druh vyhledávání je také důležité, aby znal uživatel celé jméno autora. Systém vyhledá pouze autory s přesně se shodujícím názvem a dále jejich knihy na každém serveru. Pokud by měl systém hledat knihy všech autorů, kteří jsou vyhledání po zadání klíčového slova. Čas vyhledávání by byl příliš dlouhý. Z tohoto důvodu se musí jméno autora shodovat se jménem zadaným uživatelem. Uživatel má také právo omezit všechna vyhledávání číselnou hodnotou. Možnost vyhledávání v autorech, se zadaným klíčovým slovem a bez možnosti nalezení knih autora Vyhledej údaje Nové vyhledávání Možnost vyhledávání v autorech, se zadaným klíčovým slovem s možností nalezení knih autora Vyhledej údaje Možnost vyhledávání v knihách, se zadaným klíčovým slovem a zvoleným způsobem řazení Vyhledej údaje Možnost vyhledání knih autora Výsledky vyhledávání autorů Výsledky vyhledávání knih Vyhledej údaje Výsledky vyhledání autorů 2 Požádání o nalezení knihy v knihovním katalogu Vyhledej údaje v knihovních katalozích Výsledky vyhledávání v knihovním katalogu Obrázek č. 13: přechodový diagram systému Inteligentní vyhledávač knih Přechodový diagram znázorňuje, za jakých podmínek je systém posunut do další fáze. Počáteční stav určuje šipka bez výchozího stavu. Po splnění podmínky, která je nad vodorovnou čarou aplikace provede akci, která se nachází pod vodorovnou čarou a systém přejde do stavu, ke kterému vede šipka. 4.3.2 Vlastní databáze systému Systém kromě vyhledávání údajů na jiných serverech také umožňuje spravovat vlastní databázi. Databáze je v systému navržena z toho důvodu, aby aplikace neposkytovala pouze služby vyhledávání, ale aby také vytvářela možnost ukládání dat o autorech a knihách. Tyto 21
data aplikace posléze zobrazuje uživateli stejným způsobem, jako by data byla vyhledána na některé internetové stránce z vnějšího světa. Obrázek č. 14: ERD diagram systému Databáze obsahuje dvě entity. První entitou je kniha a druhou je autor. Primárním klíčem knihy je číslo, které ji jednoznačně identifikuje. Jméno knihy nemohlo být zvoleno jako primární klíč z toho důvodu, že může existovat několik různých knih s totožným názvem. Dalšími parametry knihy jsou slučitelné vlastnosti, které byly identifikovány v předchozí kapitole. Jediný rozdíl je takový, že namísto jména autora zde figuruje cizí klíč. Tento cizí klíč je primárním klíčem autora. Takto se zajistí jasné přiřazení autora ke knize. V entitě autora nebylo zvoleno jméno autora za primární klíč ze stejného důvodu jako u knihy. Mohou existovat autoři, jenž mají stejné jméno. Uživatel, který má přístup do databáze, ji spravuje přes grafické uživatelské rozhraní aplikace. Takový návštěvník stránky, má oprávnění přidávat knihy do databáze. Ke každé nově vytvořené knize má možnost vyplnit její vlastnosti. Jediný atribut, který musí zadavatel zadat povinně je jméno knihy a jejího autora. Ostatní údaje může zanechat nevyplněné. Při určování autora lze vybrat ze tří možností. Ty jsou následující: Zadat identifikační číslo autora Zadat autora jako neznámého Zvolit možnost vytvoření nového autora Identifikační číslo autora je primárním klíčem autora v místní databázi systému. Můžeme se setkat s mnoha knihami, které nemají autora. Jedná se především o knihy lidové tvorby jako jsou mýty, pověsti a legendy. Z tohoto důvodu je v nabídce možnost autora označit za neznámého. U možnosti vytvoření nového autora, je nutné zadat alespoň jméno autora. Ostatní atributy mohou zůstat nevyplněny. Identifikační číslo autora systém generuje automaticky, jeho hodnota se posléze ukáže uživateli. Při každém pokusu o vytvoření nové knihy nebo autora aplikace zkontroluje, zda se již v databázi autor či kniha se stejným názvem nevyskytuje. Je volbou zadávajícího povolit zapsání prvků se stejným názvem. Pokud uživatel trvá na zapsání již existující knihy se stejným autorem, ale například jiným hodnocením, může zadat možnost zapsání prvku do databáze, i navzdory jeho existenci v ní zastoupené. 22
4.4 Návrh systému zaměřený na úlohy uživatele Pokud vytváříme nový software. Je dobré se zaměřit na zákazníky, kteří jej budou používat. Pokud vytváříme návrh zaměřený na úlohy dle Lewise a Riemana [22], musíme nejprve identifikovat a vyřešit čtyři problémy. Problémy jsou následující: 1. Identifikovat uživatelů a specifikovat jejich úkoly 2. Dále je nutné určit, pro které z identifikovaných uživatelů bude návrh vytvářen 3. Vytvoření návrhu grafického uživatelského rozhraní 4. Vyhodnotit návrh procházením úlohami, které jsme dříve vytvořili 4.4.1 Identifikace uživatelů a specifikování jejich úloh První fází návrhu je nalezení odpovědi na otázku, kdo bude systém používat. Systém není navržen pro úzkou skupinu uživatelů, ale pro širokou veřejnost. Každý člověk, který má přístup k internetu, může daný software používat. Aplikace je určena pro zákazníky, kteří mají dobrý vztah k literatuře a potřebují nalézt odpovědi na otázky, které se vztahují především k hodnocení knih. Věk uživatele nehraje v tomto případě téměř žádnou roli. Může být použit jak školáky, tak seniory. I zdravotně postižení uživatelé, jako zrakově postižení, mohou mít zájem vyhledat data o knihách. Úlohy určují, co konkrétně chce za akce uživatel provádět nad systémem. Základní rozdělení uživatelů je následující: Uživatel, který chce vyhledat data Uživatel, který má oprávnění zapisovat do databáze Uživatelem, který chce vyhledat data, se rozumí takový uživatel, který navštívil internetovou stránku s aplikací za účelem vyhledání dat v místní databázi a na internetových stránkách se kterými systém pracuje. Do této kategorie můžeme řadit následující konkrétní uživatele: Student chce vyhledat informace o knize, o které má napsat referát, potřebuje nalézt popis knihy Student potřebuje vyhledat životopis autora, o kterém píše referát Vášnivý čtenář chce vědět, jaké je průměrné hodnocení jím zvolené knihy Čtenář chce dle hodnocení nalézt knihy jím zvoleného autora Čtenář chce nalézt veškeré dostupné informace o knize, bohužel si není zcela jistý názvem knihy Čtenář chce vědět, jaké hodnocení má jím zvolený autor, ale není si zcela jist jménem autora Čtenář chce vědět, zda se kniha nalézá v knihovně Uživatel by rád nalezl svou oblíbenou knihu v knihovně a posléze si ji zarezervoval 23
Uživatel by rád viděl názory jiných čtenářů na knihu a přidal svůj vlastní Uživatel se zrakovým postižením by si rád našel informace o knize Cizinec by rád nalezl informace o knize ve svém rodném jazyce Malé dítě by chtělo vědět, v kolika knihách vystupuje postava Krtečka Uživatelem, který má oprávnění zapisovat do databáze, se rozumí takový uživatel, který je opatřen přístupovými údaji do místní databáze a může tuto databázi přes grafické uživatelské rozhraní spravovat. Uživatel chce zapsat svou oblíbenou knihu do databáze a chce sdílet svůj názor na hodnocení Uživatel chce zapsat svého oblíbeného autora do databáze Čtenářovi se nelíbí hodnocení nějaké knihy a chce jej změnit Uživatel chce smazat knihu z databáze Uživatel chce smazat autora z databáze 4.4.2 Určení, pro jaké uživatele je návrh vytvářen Žádný software na světě nedokáže uspokojit všechny, kteří s ním chtějí pracovat. Stejně tak nedokáže provést veškeré úkoly, které si uživatel vymyslel. Z tohoto důvodu je důležité specifikovat, pro jaké uživatele bude systém navržen, a které úkoly bude moci úspěšně splnit. Systém nepočítá s žádným hlasovým, popřípadě zvukovým doprovodem. Systém tedy není určen pro osoby s vážným zrakovým hendikepem. Stejně tak systém počítá s tím, že zadávající umí v dostatečné míře číst a psát v českém jazyce, a proto by se systémem neměly pracovat malé děti a osoby neovládající v dostatečné míře český jazyk. Návrh je tedy určen pro jedince s dosaženým alespoň prvním stupněm základního vzdělání, bez vážného zrakového postižení. Horní věková hranice nehraje roli. Senioři, se základní počítačovou průpravou, by neměli mít problém systém ovládat. Aplikace je navržena tak, aby splňovala dostatečné množství předem stanovených úloh. Některé úlohy však prostředí neumožňuje. Aplikace jako taková, komunikuje s veřejnými knihovními katalogy, které nepotřebují možnost registrace. Aplikace v žádném případě neumožňuje registrovat se, přes ni, do jiných systémů. Proto možnost, zarezervování knihy v knihovně, nemůže být splněna. Uživatel nemá možnost měnit již zadané a obsahující údaje v databázi. Může pouze knihu do databáze přidávat a to po zadání hesla. Zapisování pouze autora, bez žádné knihy, není uživateli povoleno. Účelem tohoto opatření je, aby v databázi nefigurovalo příliš mnoho autorů, ke kterým není přidělena žádná kniha. Systém neumožňuje analyzování obsahů děl. Není zde žádná možnost volby, díky které by uživatel mohl zjistit, v kolika knihách se vyskytuje konkrétní postava. Uživatel si může zvolit možnost vyhledávání z menu. Některé další volby aplikace jsou dostupné, až software nalezne nějaké výsledky. 24
4.4.3 Návrh grafického uživatelského rozhraní K aplikaci se přistupuje přes grafické uživatelské rozhraní (GUI). Jedná se webovou aplikaci, ke které mají přístup všichni uživatelé Internetu. GUI je navrženo co nejjednodušším způsobem, tak aby nerozptylovalo uživatele nadbytečnými prvky. Návrh rozhraní se zaměřuje na popis jeho funkčních prvků a rozložení. Velikost prvků, jejich přesná poloha a konkrétní grafické provedení je určováno až při implementaci. Úvodní obrazovka aplikace obsahuje prvky pro vložení údajů určených pro vyhledávání. Na obrazovku se stejným vzhledem jsou poté vypisovány výsledky. Jak je patrné na obrázku č. 15, rozhraní dominuje zvýrazněný nadpis, který představuje název systému. Nadpis je oddělen jemnou oddělovací čárou. Pod touto čárou je prostor určený pro zadávání údajů uživatelem. Bílé pole představuje místo pro vložení textu. Modré pole představuje jednoduché rolovací menu. Nejvýše usazené rolovací menu nabízí možnost, zda se bude vyhledávat v knihách, nebo autorech. Nižší rolovací menu udává způsob řazení. Nejnižší potom počet odkazů, které systém projde na každém serveru. Šedé tlačítko vyhledat spustí proces vyhledávání. Prostor pro vypisování nalezených výsledků je oddělen oddělovací čarou od prostoru určeném pro vkládání parametrů vyhledávání. Každá vlastnost knihy je vypisována na vlastní řádek. Křížky značí náhodný text. Červený kruh reprezentuje zaškrtnuté tlačítko, které upozorňuje na možnost vyhledání titulu v knihovně. Pod tímto tlačítkem se nachází potvrzující tlačítko. Po jeho zmáčknutí systém vyhledá daný titul v knihovních katalozích. Vypisování výsledků u autora se shodným názvem pracuje na stejném principu, místo možnosti vyhledat knihu v knihovně, je zde možnost vyhledání knih autora. Každý jednotlivý výsledek je oddělen vodorovnou linkou. Po ní následuje další výsledek. Obrázek č. 15: skica představující návrh grafického uživatelského rozhraní hlavní obrazovky 25
Další obrazovkou je obrazovka umožňující přidat knihu do databáze (na obrázku č. 16). Tato obrazovka je oddělena od hlavní obrazovky, která je určená jen pro vyhledávání a vypisování výsledků. Obrazovka se skládá se stejných prvků jako obrazovka předcházející. Uživatele vyzívá k zadání údajů. U možnosti zadání autora má zadávající možnost zvolit ze tří způsobů zadávání do databáze. Tyto způsoby byly specifikovány v kapitole Vlastní databáze systému. Jedná se o možnosti zadat autora pomocí identifikačního čísla, zvolit autora za neznámého, nebo vytvořit autora nového. Červené tlačítka umožňují zadat data do systému i za předpokladu, že se již prvky se stejným názvem v databázi vyskytují. Systém může uživatele informovat o chybě ve způsobu, jakým zadal parametry ve vyhledávání nebo při přidávání prvků do databáze. Chyby, způsobené při zadávání parametrů pro vyhledávání, jsou zadávajícímu znázorňovány místo konkrétních výsledků. Obrázek č. 16: skica představující návrh grafického uživatelského rozhraní obrazovky ke správě databáze 4.4.4 Vertikální průchod systému Poslední fází návrhu systému zaměřený na úlohy je vybrání specifických úloh a následně testování, jakým způsobem bude uživatel se systémem pracovat, aby nalezl požadovaný výsledek. 26
Z několika úloh byly vytvořeny následující scénáře: Scénář 1: Studen má za úkol do školy napsat referát. Jeho úkolem je zjistit něco o životě spisovatele Karla Čapka a z dostupných zdrojů sepsat jeho životopis. Dále má za úkol sestavit žebříček jeho nejlepších knih a k prvním dvěma knihám zjistit o čem knihy jsou. Scénář 2: Vášnivý čtenář přečetl knihu Krakatit a chtěl by se podělit o své hodnocení, které je 80 %, dále by chtěl popsat knihu dalším případným zájemcům. Čtenář nechce vyplňovat údaje o autorovi, protože předpokládá, že ho každý zná. Scénář 3: Maminka potřebuje nalézt knihu o výchově dětí. Bohužel si nepamatuje název zcela přesně, pouze ví, že v názvu je slovo výchova. Chtěla by knihu s nejlepším hodnocením. Následně byly scénáře použity k testování grafického uživatelského rozhraní. Fakta o autorech a knihách jsou smyšlená. Jejich účel je demonstrativní. Obrázek č. 17: vertikální průchod návrhem pro scénář č. 1 27
Při průchodu scénářem číslo 1 uživatel nejprve zadá slovo Karel Čapek do kolonky pro vyhledávání, následně zvolí vyhledávání v autorech a potom nastaví hledání s možností nalezení knih autora. Po nalezení výsledků autora se u něj zvolí možnost nalezení jeho knih. Systém nalezne knihy autora a spočítá jejich průměrná hodnocení a zobrazí jednotlivé informace o každé knize od nejvyššího hodnocení. Číslo autora v místní databázi: 25 Kniha Krakatit byla vložena do databáze Obrázek č. 18: vertikální průchod systémem pro scénář č. 2 Jako první si uživatel nechá vyhledat autora Karla Čapka a ověří si, že autor je již v databázi. Zjistí, že jeho identifikační číslo je 25. Poté klikne na přidání knihy do databáze u hlavního menu. Uživatel je vyzván k vyplnění údajů, které vyplní a následně nechá tlačítkem potvrdit zapsat autora do databáze. Aplikace potvrdí zapsání do databáze krátkou zprávou. Průchod scénářem 3 se nalézá v příloze č. 1. 28
5 Implementace a předvedení systému Po vytvoření analýzy se přechází k implementaci systému. Tato část práce se zabývá, jakým způsobem byl systém naprogramován a jaké techniky k tomu byly použity. Poté se věnuje předvedení systému. 5.1 Zvolení programovacího jazyka Před samotnou implementací je nutné rozhodnout, jakými technikami docílíme požadovaného výsledku. Jednou z hlavních otázek je, jaký zvolit programovací jazyk. Existuje mnoho programovacích jazyků, patřící do mnoha paradigmat. Výstup této bakalářské práce je aplikace přístupná na internetu. Proto bylo nutné použít takový jazyk, jehož výsledná aplikace lze umístit na internetové stránky. K programování webových aplikací se velmi často využívají skriptovací jazyky [5]. Mezi skriptovací jazyky patří jazyky jako Python, PHP (Hypertext Preprocessor), JavaScript, Perl, Ruby. Vzhledem k tomu, že tato práce spadá také pod Laboratoř zpracování přirozeného jazyka, kde je většina projektů programovaná v programovacím jazyce Python, bylo rozhodnuto, že v tomto programovacím jazyce bude aplikace vytvářena. Jak uvádí Mark Summerfield ve své knize [4], Python je velmi snadno osvojitelný a programy napsané v tomto jazyce zaberou méně řádků kódu, než stejné programy v jiných jazycích. Dále je v této knize zdůrazněn fakt, že programovací jazyk Python je multiplatformní, tedy že jej lze přenášet mezi různými operačními systémy a lze v něm programovat objektově i procedurálně. Další rozhodnutí bylo, jakou verzi programovacího jazyka Python použít. Vzhledem k tomu, že programovací jazyk Python je v dnešní době používán ve dvou verzích, a to ve verzi 2 a verzi 3. Bohužel tyto dvě verze nejsou navzájem slučitelné. To znamená, že kód napsaný ve verzi Python 2 nelze bez úprav použít v programech napsaných ve verzi 3. Vzhledem k tomu, že jsem neměl předchozí zkušenosti s programováním ve verzi 2, jsem se rozhodl naučit se verzi 3. Přišlo mi zbytečné učit se programovat ve starší verzi programovacího jazyka, když je již pár let verze nová. Je pravda, že pro novou verzi není napsáno mnoho knihoven. Předpokládám však, že tato situace se během nadcházejících let změní a nová verze plně nahradí svého úspěšného předchůdce. Dalším programovacím jazykem, na kterém je tato aplikace postavena je HyperText Markup Language (HTML). Tento jazyk byl vytvořen pro tvorbu internetových stránek. I tento jazyk existuje v několika verzích. Nejnovější verze tohoto jazyka je verze 5. Rozdíl ve verzích však není tak markantní, jako u výše zmíněného jazyka Python. Tato aplikace používá pouze základy HTML, které jsou ve všech používaných verzích stejné. Jazyk HTML je často doprovázen kaskádovými styly (CSS) [6]. CSS popisuje, jakým způsoben budou zobrazovány prvky HTML. Tato aplikace však kaskádové styly nepoužívá. 29
5.2 Technologie Common Gateway Interface Po určení programovacího jazyka je nutné určit, jak docílit toho, že výsledný software bude mít podobu webové aplikace. Je nutné nalézt způsob, jak skloubit zvolený programovací jazyk s webovým programováním. K takovému programování se mohou používat různé frameworky. Jedním se známých frameworků je například projekt zvaný Django. Jak uvádí na svých stránkách [23], jedná se o framework, který byl napsán v jazyce Python. Tento nástroj má usnadňovat tvorbu webových aplikací. Problémem ovšem je, že tento software stále nepodporuje Python ve verzi 3. Nalezení takového frameworku, který by se dal sloučit s Pythonem 3, se stalo bohužel neřešitelným problémem. Z tohoto důvodu byla vybrána jednoduchá technologie Common Gateway Interface (CGI). Jak uvádí wikipedie [24], CGI je protokol, který slouží k propojení aplikace s webovým serverem. Jedná se o skripty, ve kterých se dají používat klasické html tagy a psát kód ve skriptovacích jazycích. Je to jeden z nejjednodušší způsobů psaní webových aplikací. CGI skript se pozná dle přípony cgi, internetový prohlížeč tyto skripty dokáže přečíst stejně jako soubory s příponou html. Nevýhodou je jejich rychlost a to, že skript se musí načíst celý a poté co se načne, tak v něm nejdou dělat žádné interaktivní změny. Po změně se musí načíst celý znovu. 5.3 Popis tříd a CGI skriptů aplikace Aplikace se skládá z několika vlastních modulů, které obsahují třídy a několika skriptů. Vlastní moduly jsou následující: Shelf obsahující třídu Book Autor obsahující třídu Autor Parserss obsahující třídy, jejichž rodičem je třída html.parser.htmlparser základní knihovny Pythonu 3 Třída Book reprezentuje knihu. Objekty této třídy jsou vytvářeny po nalezení dat na serverech nebo v databázi. Pomocí funkcí jsou poté jejich data vypisovaná uživateli. Na stejném principu je založena třída Autor, která zastupuje osobu spisovatele. V následujících tabulkách můžeme vidět atributy a funkce, které tyto dvě třídy poskytují. 30
Modul Shelf Třída Book Atributy: autor score text source name Funkce: Modul Autor Popis: Třída Autor Atributy: score text source name Funkce: writeautor() writescore() writename() writetext() writesource() _lt_() getscore() getname() getautor() knowsource() Popis: Vypíše data o autorovy Vypíše data o hodnocení Vypíše data o jméně knihy Vypíše popis knihy Vypíše zdroj informací Určuje řazení dle abecedy Vrací číslo hodnocení Vrací jméno bez koncových mezer Vrací jméno autora bez mezer Pokud je source číslo vrací False writescore() writename() writetext() writesource() _lt_() getscore() getname() knowsource() Vypíše data o hodnocení Vypíše data o jméně autora Vypíše popis autora Vypíše zdroj informací Určuje řazení dle abecedy Vrací číslo hodnocení Vrací jméno bez koncových mezer Pokud je zdroj číslo vrací False Tabulka č. 2: popis třídy Autor Tabulka č. 1: popis třídy Book Jak uvádí oficiální dokumentace [25], třída html.parser.htmlparser se zaměřuje na jednoduché třídění a získávání dat z html kódu. V této práci je tato třída velmi používaná. Je vytvořeno několik podtříd, které mají za úkol vyhledat konkrétní data na konkrétních stránkách. Tyto podtřídy přepisují některé základní metody, tak aby mohl být parser použit na třídění dat o knihách a autorech. Metody, které jsou přepisovány, jsou následující: handle_starttag (tag, attrs) handle_endtag (tag) handle_data (data) Metoda handle_startag() dostává jako parametr každý úvodní tag kódu a všechny jeho atributy. Tato metoda se používá hlavně k zachycení určité části kódu, ze které potřebujeme data dostat, nebo k uchování přímo atributů určitých tagů. Tímto způsobem se dají získat URL adresy stránek. Metoda handle_endtag() dostává jako parametr všechny koncové znaky. Používá se hlavně k tomu, abychom nepřekročili úsek v html kódu, ze kterého potřebujeme dostat data. Metoda handle_data() se stará o samotný text, který je zobrazován prohlížečem uživateli. Metoda slouží převážně k tomu, abychom mohli uložit data, která jsme si ohraničili pomocí výše zmíněných dvou metod. 31
Modul Parserss Modul Parserss Modul Parserss Třída LinksParser parser pro odkazy na stránce Atributy: recording data value find data2 tag Třída AutorParserKnihi parser pro profil autorů na serveru knihi Atributy: recording data Třída TextParser parser pro text knih serveru knihi Atributy: rec rec2 data value name tag2 tag1 Funkce: Funkce: Funkce: handle_starttag () handle_endtag () handle_data () handle_starttag () handle_endtag () handle_data () handle_starttag () handle_endtag () handle_data () Tabulka č. 3: popis části modulu Parserss Každý parser v modulu Parserss je vytvořen pro konkrétní stránky. Pouze třída LinksParser je univerzální a dá se použít na získávání odkazů téměř na každé stránce. Další třídy modulu Parserss jsou k nahlédnutí v příloze č. 2 a č. 3. Do atributů, které nesou název data jsou ukládány data ze stránek v podobě řetězců. Atributy rec, recording nebo find slouží k nalezení požadované části stránky, ze které potřebujeme data uložit. Tag udává název tagu, který uvozuje část, kterou hledáme, name a value jeho atributy. Kromě vlastních tříd program obsahuje několik CGI skriptů: knihovna.cgi vyhledane.cgi databaze.cgi databaze2.cgi index.cgi Skript knihovna se stará o hledání a vypisování dat v knihovních katalozích. Databaze.cgi poskytuje uživateli rozhraní pro vkládání dat do databáze systému. Tyto data jsou přeposlána skriptu Databaze2.cgi, který je zkontroluje a posléze naváže spojení z databází a data zapíše. Index.cgi je spouštěcí skript, který slouží pouze jako úvodní obrazovka a přeposílá data vložená uživatelem skriptu vyhledane.cgi. Srdcem systému je právě skript vyhledane.cgi, stará se o hlavní funkcionalitu systému. V následující tabulce jsou popsány nejdůležitějsí funkce tohoto skriptu a které vlastní třídy používá. Tabulky k ostatním skriptům se nacházejí v příloze č. 2 a č. 3. 32
CGI skript vyhledane Funkce: Popis: Využívá třídy: opendatabaze() changelistlen() Navazuje spojení s databází a podává žádost o data v ní zastoupená Zkracuje počet položek pro vyhledávání Book() Autor() printtextknihicz() printautorknihicz() makeurl() makeurldatabazeknih() makeurlcbdb() makeurlkdb() printknihycbdb() printknihykdb() printautorkdb() printautorcbdb() printtextdatabazeknih() printautordatabazeknih() Navazuje spojení s profily knih na serveru knihi.cz, poté vytvoří objekty knih Navazuje spojení s profily autorů na serveru knihi.cz, poté vytvoří objekty autorů Navazuje spojení s vyhledávačem serveru knihi.cz, detekuje odkazy do profilů knih/autorů Navazuje spojení s vyhledávačem serveru databazeknih.cz, detekuje odkazy do profilů knih/autorů Navazuje spojení s vyhledávačem serveru cbdb.cz, detekuje odkazy do profilů knih/autorů Navazuje spojení s vyhledávačem serveru kdb.cz, detekuje odkazy do profilů knih/autorů Navazuje spojení s profily knih na serveru cbdb.cz, poté vytvoří objekty knih Navazuje spojení s profily knih na serveru kdb.cz, poté vytvoří objekty knih Navazuje spojení s profily autorů na serveru kdb.cz, poté vytvoří objekty autorům Navazuje spojení s profily autorů na serveru cbdb.cz, poté vytvoří objekty autorům Navazuje spojení s profily knih na serveru databazekni.cz, poté vytvoří objekty knih Navazuje spojení s profily autorů na serveru databazeknih.cz, poté vytvoří objekty autorům Parserss.LinksParser() Parserss.TextParser () Book() Autor() Parserss.AutorParserKnihi() Parserss.LinksParser() Parserss.LinksParser() Parserss.LinksParser2() Parserss.LinksParser() Parserss.CbdbKnihaParser() Book() Parserss.KdbKnihaParser() Book() Parserss.KdbAutorParser() Autor() Parserss.CbdbAutorParser() Autor() Parserss.DatabazeKnihaParser() Book() Parserss.DatabazeAutorParser() Autor() writeinfo() writebookitem() writeinfoautors() getscor() writefind() Vypisuje informace o knihách Vypisuje informace o jedné knize Vypisuje informace o autorech Funkce použitá k řazení podle hodnocení Funkce ovládající řazení dle zadaných parametrů Tabulka č. 4: popis skriptu vyhledane.cgi, část 1 33
CGI skrip vyhledane Funkce: Popis: Využívá třídy: sortbyname () sortbyaverage() sortbyaverage2() sortbyautor() writeresults() parseautordatabazeknih() Funkce řadící seznam položek dle jména Funkce řadící seznam dle průměrného hodnocení a konkrétního jména Funkce řadící seznam dle průměrného hodnocení Řadí seznam dle autorů Základní funkce starající se o výpis všech výsledků Nalezne odkazy na veškeré knihy autora na serveru databazeknih.cz Parserss.LinksParser() parseautorkdb() Nalezne odkazy na knihy autora na serveru kdb.cz Parserss.LinksParser() parseautorcbdb() parseautorknihi() splitstring() Nalezne odkazy na knihy autora na serveru cbdb.cz Nalezne odkazy na knihy autora na serveru knihi.cz Vrací řetězec bez bílých znaků Parserss.LinksParser() Parserss.LinksParser() Tabulka č. 5: popis skriptu vyhledane.cgi, část 2 Skript vyhledané spouští metodou writeresult(), která zjistí, zda se mají vyhledávat všechny knihy autora, nebo informace o knize, popřípadě autorovi. Pokud potřebujeme nalézt informace o knihách autora, systém se nastaví takovým způsobem, aby mohl spustit funkce s předponou parseautor. Pokud hledáme knihu nebo autora podle názvu, aplikace zavolá funkce s předponou makeurl. Obě tyto funkce naleznou odkazy na konkrétní knihy/autory v podobě seznamu, tento seznam poté předají funkcím s předponou print. Tyto funkce navážou spojení podle odkazů, které obdržely, prohledají je a naleznou potřebná data k vytvoření objektů typu Book a Autor. Objekty poté vloží do globálních seznamů. Následně aplikace zavolá funkci writefind(), která podle zadaných parametrů od uživatele určí, jaké zavolat funkce pro řazení a vypisování výsledků. Až obdrží uživatel výsledek, může mít možnost pracovat s dalšími prvky programu. Pro nalezení knih v knihovně skript vyhledane.cgi aktivuje skript knihovna.cgi. Pokud máme možnost nalézt knihy autora, tak skript zavolá sám sebe. K připojování k serverům je použita základní knihovna Pythonu 3, která se jmenuje urllib [26]. Tato knihovna poskytuje funkce, díky nimž dokážeme stáhnout obsah internetové stránky v podobě textového řetězce. Tento textový řetězec je předán parsru, který jej zpracuje. 34