MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY
Inteligentní vyhledávač hodnocení knih Bakalářská práce
Tomáš Kácel
Brno, 2012
II
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 31. prosince 2012
………………………… podpis
III
Poděkování Na tomto místě bych rád poděkoval doc. RNDr. Aleši Horákovi, Ph.D. za jeho odborné vedení, konzultace a čas, který věnoval této bakalářské práci.
IV
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, tvorba grafického uživatelského rozhraní, návrh systému.
V
Obsah: 1 Úvod ........................................................................................................................................ 1 2 Projekty hodnocení knih.......................................................................................................... 2 2.1 Analýza stránky cbdb.cz .................................................................................................... 3 2.2 Analýza stránky databazeknih.cz ...................................................................................... 4 2.3 Analýza serveru knihi.cz.................................................................................................... 6 2.4 Analýza serveru kdb.cz ..................................................................................................... 7 3 Knihovní katalogy ................................................................................................................... 9 3.1 Analýza knihovních katalogů Aleph (ExLibris) .................................................................. 9 3.2 Analýza knihovního katalogu carmen.kjm.cz ................................................................. 10 4 Analýza a návrh systému Vyhledávač hodnocení knih ......................................................... 12 4.1 Podobné aplikace............................................................................................................ 12 4.2 Sjednocující prvky knižních databází .............................................................................. 12 4.3 Specifikace a popis účelu systému ................................................................................. 15 4.3.1 Vyhledávání knih dle žánru ...................................................................................... 15 4.3.2 Vyhledávání knih dle názvu...................................................................................... 16 4.3.3 Vyhledávání knih autora/autory .............................................................................. 17 4.3.4 Vyhledávání v knihovních katalozích ....................................................................... 17 4.3.5 Způsob zobrazení výsledků ...................................................................................... 18 4.4 Vlastní databáze systému ............................................................................................... 18 4.5 Inteligentní prvky systému ............................................................................................. 19 4.5.1 Inteligentní rozhodování. ......................................................................................... 19 4.5.2 Preferování výsledků ................................................................................................ 20 4.5.2 Slívání knih a slučování autorů ................................................................................. 20 4.5.2 Automatické hledání knih na všech serverech a v knihovnách ............................... 21 5 Popis implementace a předvedení systému ........................................................................... 22 5.1 Programovací jazyk ......................................................................................................... 22 5.2 Technologie Common Gateway Interface ...................................................................... 23 5.3 Popis struktury aplikace a použití nejdůležitějších balíčků ............................................ 23 5.3.1 Základní technika vyhledávání výsledků .................................................................. 24 5.3.2 Implementace databáze .......................................................................................... 25 5.4 Předvedení softwaru ...................................................................................................... 26 VI
5.4.1 Aplikace scénáře 1 na software ............................................................................... 26 5.4.2 Aplikace scénáře 2 na software ............................................................................... 27 5.4.3 Aplikace scénáře 3 na software ............................................................................... 28 6 Závěr...................................................................................................................................... 30 Seznam použitých zdrojů: ........................................................................................................ 31 Seznam obrázků ....................................................................................................................... 33 Seznam tabulek ........................................................................................................................ 33 Seznam elektronických příloh a přiloženého cd ...................................................................... 33 Seznam příloh ........................................................................................................................... 33
VII
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ě je tato hodnota 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 programování databází, může podobný server vytvořit. Tato práce se zaměřuje na první čtyři české databáze, které nalezl internetový vyhledávač Google [2]. Cílem 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ává parametry pro vyhledávání výsledků. Zadávající si může vybrat, zda chce vyhledávat knihu v žánrech, knihách autora nebo knihách dle jejich názvu. 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 zobrazí, 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. Část práce se věnuje popisu implementace programu a předvedení funkčnosti vytvořeného softwaru. Bakalářská práce byla vytvořena jako projekt Laboratoře zpracování přirozeného jazyka, z tohoto důvodu byl zvolen skriptovací jazyk Python [3]. 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, je jazyk HTML, CSS a SQL. Práce obsahuje vlastní SQlite databázi, která slouží jako paměť pro již vyhledané výsledky. Tím se ušetří čas při hledání již dříve vyhledaných knih.
1
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í jen několik set záznamů. Portál www.kndb.cz je zcela nefunkční. Z těchto důvodů nebyly brány tyto zdroje jako relevantní. Účelem analýzy je nalézt odpověď na následující otázky:
Jakým způsobem fungují dotazovací formuláře na stránce? Jakým způsobem internetová stránka zobrazuje výsledky? Jaké informace a služby server poskytuje uživateli?
Každý z vybraných serverů má na své stránce možnost vyhledávání. Uživatel zadává dotaz vyhledávacímu algoritmu pomocí HTML formuláře. Základní funkce aplikace je vyhledání dat na jednotlivých serverech. Je nutné pochopit funkcionalitu jednotlivých formulářů, aby bylo možné zadávat dotazy z externího zdroje. Po zadání dotazu se uživateli zobrazí výsledek ve formě HTML kódu. Z tohoto kódu aplikace extrahuje potřebné informace. Bez znalosti a analýzy těchto kódu by nebylo možné takovýto algoritmus vytvořit. Každý z vybraných internetových portálů poskytuje určité služby. Většina základních možností je poskytnuta veřejně, některé jsou dostupné až po registraci. V mnoha ohledech jsou služby na každém serveru velmi podobné, naopak v jiných se značně liší. Výsledek analýzy nám poslouží k vytvoření návrhu programu, který se zaměřuje na skloubení dat z každého jednotlivého serveru.
2
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 [4] můžeme dále zjistit počet knih v databázi. Toto číslo převyšuje 60 000. Autorů v databázi je více jak 26 000. Stránka poskytuje uživateli dva druhy vyhledávání. Prvním druhem je jednoduché vyhledávání. Zadávající zadává pouze klíčové slovo a poté je zobrazen výsledek pro všechny kategorie, ve kterých byla nalezena shoda. Popis tohoto formuláře zobrazuje obrázek č. 1.
Obrázek č. 1: html kód formuláře jednoduchého vyhledávání
Formulář předává hodnotu z textového pole skriptu hledat.php, který nalezne a vypíše data. Po zadání dotazu „hledat.php?hledat={Název}“ dostáváme výsledek, který je 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 č. 2: část html kódu formuláře pokročilého vyhledávání
Uživatel může zvolit možnost pokročilého vyhledávání, kde je možné upřesnit parametry hledání. „Hodnocení nad“ znamená, od jak vysokého hodnocení požadujeme vyhledat knihu. Možnosti jsou rozděleny po dvaceti procentech od nuly do osmdesáti procent. Mezi kategorie patří například: Aforismy, Anekdoty, Angličtina, Antologie, Antropologie, Archeologie, Architektura, Astrologie, Astronomie, Autobiografie, Bajky, Balada, Beletrie, Bilingvní, Biografie, Biologie, Bojová umění, Česká literatura, Cestování, Chovatelství, Citáty, 3
Cizojazyčná, Deník, Detektivní, Divadelní hra, Dobrodružné, Domov a zahrada, Doprava Drama, Drogy, Duchovní literatura, Ekologie, Ekonomie, Encyklopedie, Erotické… Tyto kategorie jsou reprezentovány číselnou hodnotou. Můžeme také zvolit, v jakém nakladatelství chceme hledat a zda nehledáme v knižních sériích. Pokud vyhledáváme pomocí pokročilého vyhledávání, tak výsledný počet nalezených knih je maximálně dvě stě. Každá kniha a každý autor má svůj vlastní profil. Jednotlivé odkazy do profilu autora jsou vždy uvozeny slovem autor (
) a profily knihy začínají slovem kniha (). 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í (<span id=“book_rating_text“>), 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 č. 3: ukázka profilu knihy Krakatit na serveru www.cbdb.cz [5]
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 [6], nalezneme informace o počtu knih a autorů. Počet knih převyšuje 117 000 záznamů. Počet autorů je zde kolem 38 000. Vyhledávání je umožněno pomocí standartního HTML formuláře.
4
Obrázek č. 4: vyhledávací formulář html
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. Jedná se o seznam odkazů do profilů jednotlivých entit v dané kategorii. Kategorie jsou následující:
Knihy Autoři Knižní edice
Zadávající má také možnost vyhledávat pouze v knihách a v autorech. U této volby však chybí možnost zadání klíčového slova. Vyhledávání je umožněno pomocí kategorií. Autory lze vyhledávat vybráním národnosti spisovatele. Knihy jsou seskupovány pod žánr. Žánry jsou následující:
Duchovní nauky Literatura česká Literatura světová Naučná literatura Poezie Pro děti a mládež Sci-fi a fantasy
Po zvolení některého z výše uvedených žánrů je uživatel dotázán na zvolení některého podžánru. Výsledný seznam knih je možno řadit, a to podle abecedy, hodnocení, nejvyššího zobrazení, roku vydání. Ve výsledku se uživateli zobrazí knihy v počtu maximálně 40 knih na stránku. Každý odkaz do profilu knihy je uvozen odkazem „knihy“ ( Krakatit). Profil knihy obsahuje údaje o autorovi, každý odkaz do profilu autora je uvozen odkazem „autori“ (
Karel Čapek). Nalezneme zde také procentuální hodnocení knihy (
81%) a název knihy (
Krakatit
). Další informace, které jsou k nalezení na stránce, je 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, 5
jeho povídek a citátů (
Zobrazit všechny knihy). Vypsaný seznam knih lze řadit podle hodnocení, abecedy nebo roku vydání.
Obrázek č. 5: ukázka profilu knihy Krakatit na serveru www.databazeknih.cz [7]
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). V databázi na tomto serveru [8] 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. Uživatel musí zadat do HTML formuláře, zda chce vyhledávat v autorech (c=“2“), v knihách (c=“1“) nebo v čtenářích (c=“3“).
Obrázek č. 6: html formulář na stránce www.knihi.cz
Po zadání dotazu se vypíše na obrazovku seznam nalezených výsledků v dané kategorii. Součástí tohoto seznamu není pouze jednoduchý odkaz do profilu knihy nebo autora, ale nalezneme zde i hodnocení a krátký popisek.
Obrázek č. 7: html kód s informacemi o knize ze serveru knihi.cz
6
Tento portál rozděluje knihy také do kategorií. Nalezneme zde 21 žánrů jako beletrie, biografie, dětská literatura… Výsledky lze řadit podle data pořízení, oblíbenosti, hodnocení.
Obrázek č. 8: znázornění výstupu serveru www.knihi.cz po zadání dotazu Krakatit [9]
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ů. Knihy autora jsou uspořádány od nejlepšího hodnocení a maximální počet knih, který se zobrazuje na stránku je 10. Pokud uživatel vyžaduje další knihy v kategorii, musí přejít odkazem na další stránku.
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ů [10]. 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
7
Obrázek č. 9: html formulář ze stránky kdb
Výsledný seznam obsahuje odkazy do příslušných profilů. Odkazy do profilu knih jsou uvozeny slovem „kniha“ (a href=“/kniha-44631-hordubal-povetron-obycejny-zivot.html“). Odkazy do profilu autorů slovem „spisovatel“ (a href=“ /spisovatel-37-karel-capek.html“). Pokročilé vyhledávání knih nám umožnuje vyhledávat knihy dle žánru a následně podle další podžánrů. Můžeme také vyhledávat podle titulu, autora nebo originálníh názvu. Zobrazený výsledek knih je vždy v maximálním počtu 24 knih na stránku a řazen je jen a pouze dle abecedy. Spisovatele lze vyhledávat podle období, ve kterém působili. 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. Vydané knihy autora jsou uspořádány dle abecedy a jsou zastoupeny všechny na jedné stránce.
Obrázek č. 10: ukázka profilu knihy Krakatit na stránce www.kdb.cz [11]
8
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ů. Vzhledem k tomu, že Masarykova Universita působí v Brně, byla práce zaměřena na brněnské knihovny. Byly vybrány následující adresy katalogů:
Knihovní katalog Masarykovy university Knihovní katalog VUT v Brně Knihovní katalog Moravské zemské knihovny Knihovní katalog Knihovny Jiřího Mahena v Brně
Analýza má za úkol zjistit následující fakta:
Způsob zadávání dotazu uživatelem pomocí html formuláře 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ích katalogů Aleph (ExLibris) Většina velkých knihoven a zejména univerzitní knihovny dnes využívají stejný knihovní katalog. Jedná se o knihovní katalog Aleph. Tento katalog používají také dvě největší brněnské university a Moravská zemská knihovna v Brně. Na tento software od společnosti ExLibris, která působí v Izraeli, přešla Masarykova universita v roce 2002. Tento systém umožňuje vztahovat dotazy na všechny fakultní knihovny najednou. Na první pohled je každý knihovní katalog Aleph totožný. Knihovny využívající tento software používají stejný základ, ale po podrobnějším prozkoumání se na některých místech liší. Při připojování na stránku katalogu se uživateli přidělí devítimístný kód (http://aleph.muni.cz/F?RN=606636999). Toto číslo je generováno náhodně. Po zadání dotazu se uživateli přidělí unikátní kód relace, bez tohoto unikátního kódu nelze zadávat dotazy (F/QPQXL6CB7DKAQT83QAM8Y92MVYPB3FKVLB9KINULMKSLMASGJS-15879?). Tento unikátní kód je možné získat z html formuláře jednoduchého vyhledávání (obr. 11) a následovně ho použít pro zadání dotazu jinak než přímo ze stránky knihovního katalogu. Základní vyhledávání takovýchto knihovních katalogů umožňuje vyhledávat 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 nebo středisek. V jaké části bude vyhledávač hledat, je volbou
9
uživatele, stejně tak uživatel určuje, v jakém poli1 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 č. 11: část html formuláře knihovního katalogu aleph.muni.cz
Vyhledané výsledky jsou prezentovány pomocí tabulky. Tabulky jednotlivých knihoven se lehce liší, ovšem jméno autora, název díla, informace o dostupnosti, popřípadě odkaz na tyto informace jsou vždy k nalezení. Pro bližší informace se dají jednotlivé výsledky rozkliknout.
Obrázek č. 12: ukázka vyhledaných údajů v knihovním katalogu aleph.muni.cz [12]
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 [13], jedná se o druhou největší městskou knihovnu v České republice. Používá jednoduchý vyhledávač s několika možnostmi. Jako první uživatel zadá, co má hledaný výraz reprezentovat:
Vše Název Autora Téma
Dále uživatel zvolí, kde chce vyhledávat, zda v knihách, audionahrávkách, mapách, článcích, hudebninách… 1
Pole udává, zda hledané slovo určuje název knihy, autora, ISBN, či jinou vlastnost
10
Poslední možností je určení, podle jakého kritéria se mají výsledky řadit:
Relevance Autor, název Název Druh dokumentu Rok Vydání Signatura Záhlaví Datum Oblíbenost
Obrázek č. 13: ukázka vyhledávání na serveru Carmen.kjm.cz [14]
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 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 č. 14: html tabulka s detailem o dostupnosti knihy
11
4 Analýza a návrh systému Vyhledávač hodnocení knih Před samotnou implementací této práce byla vytvořena analýza a specifikace požadavků na vytvářený systém. Výsledek analýzy směřuje programátorskou činnost a pomáhá 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 Podobné aplikace Jednou z prvních fází vývoje tohoto systému bylo zjištění aktuálního stavu nabízených produktů, které se zabývají podobnou problematikou. Tento stav byl zjištěn za účelem, aby další produkt nebyl stejný či velmi podobný již nabízenému softwaru. Analýza podobných aplikací také slouží k vyvarování se stejných chyb, kterých se dopustili předchozí vývojáři. Při nalézání podobných produktů, jako je ten, kterým se zabývá tato bakalářská práce, však nebylo hledání příliš úspěšné. 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 na „českém internetu“, 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. Ve světovém měřítku bychom mohli zmínit server Goodreads.com. Na tomto portálu je však nutná znalost anglického jazyka a mít vlastní registraci, abyste mohli využívat větší část jejich služeb. Portál dokáže poradit uživateli knihu dle knih, které zadal do systému jako přečtené. Registrování uživatelé se také mohou pokusit nalézt knihu v knihovně. Nejbližší země, kde je možné tuto konkrétní službu využít je bohužel Německo. Proto je velmi pravděpodobné, že aplikace „Inteligentní vyhledávač hodnocení knih“ je první svého druhu v Čechách. Vytvoření specifikace se tedy spíše opírá o vlastní myšlenky autora.
4.2 Sjednocující prvky 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í této analýzy. Aplikace se zaměřuje na hledání a slučování prvků ze všech databází, proto je nutné se zaměřit na prvky, které jsou na všech portálech stejné. Každý server po zadání dotazu od uživatele vypíše jednoduchý seznam s odkazy do profilů knih. Data, která jsou k nalezení ve všech profilech, jsou následující:
Jméno knihy Autor knihy Procentuální hodnocení Popisek 12
V některých případech může určitá vlastnost chybět. Pokud kniha nebyla hodnocena, bývá její hodnocení nevyplněno nebo reprezentováno číslem nula. Autor knihy bývá ve většině případů vyplněn, ovšem mohou se vyskytnout knihy, u kterých není autor znám. Krátký popisek bývá zastoupen hlavně u známějších knih a bestselerů. Název knihy je vyplněn vždy. V profilech knih nalezneme také jiné informace jako ISBN, počet vydání nebo počet stran. Tyto informace nejsou zastoupeny na všech serverech, proto s nimi nová aplikace nepočítá. Každý z vybraných portálů řadí své knihy pod určitý žánr. Každá stránka používá vlastní názvy a členění. Značný rozdíl je i v počtu kategorií. Tím se vyskytl problém, jakým způsobem vytvořit kategorie v novém softwaru. Členění podle databáze, která měla nejvíce kategorií, nepřicházelo v úvahu, protože pod některými žánry bychom nedokázali jednoduše nalézt knihy, které do něj spadají. Databáze s nejméně rozvětveným systémem žánrů je na stránkách knihi.cz. Tento portál obsahuje 21 žánrů. Pro každý žánr v tomto seznamu bylo možno nalézt odpovídající žánr nebo podžánr na každém dalším portálu. Po rozsáhlé analýze bylo vytvořeno následující členění pro novou aplikaci: Knihi.cz/Inteligentní vyhledávač
Cbdb.cz
Kdb.cz
Databazeknih.cz
Astrologie, ezoterika
97(Astrologie), 125(Astronomie)
258(Astronomie, ezoterika)
42(Duchovní nauka)
Beletrie
21(Beletrie)
280(Cizojazyčná Beletrie), 228(Próza)
2(Literatura česká), 12(Literatura světová)
Biografie, Paměti
26(Autobiografie), 41(Biografie)
927(Biografie)
46/78(Biografie, memoáry)
Dobrodružné, Napětí
29(Detektivní), 15(Dobrodružné)
232(Detektivky, napětí)
2/73(Dobrodružné), 12/74(Dobrodružné)
256(Domov a zahrada), 460(Kuchařky a nápoje)
46/56(Dům a byt), 46/60(Kuchařky), 46/69(Zahrada)
Domov, vaření
zahrada, 144(Domov, Zahrada), 7(Kuchařka), 109(Vaření)
Dětská literatura
141(Péče o dítě), 19(Pro mládež), 4(Pro děti), 22(Pohádka)
248(Pro děti a mládež)
32(Pro děti a mládež)
Fantasy
2(Fantasy)
239(Fantasy)
22(Sci-fi a fantasy)
Historie
13(Historie), 91(Památky)
250(Historie)
46/58(Historie)
13
Humorné
Divadlo, poezie
106(Komedie), 45(Komiks), 67(Satira) drama, 61(Divadelní 36(Drama), 137(Studie), 37(Poezie)
233(Humor)
2/4(Humor), 12/14(Humor)
hra), 276(Divadelní hry), 2/98(Divadelní hra), 243(Poezie), 12/96(Divadelní hra), 55(Poezie)
Příroda, cestování
10(Cestování)
252(Cestování, mapy)
46/76(Cestopisy, místopisy), 46/86(Mapy a atlasy)
Přírodní vědy
108(Biologie), 85(Fyzika), 103(Matematika), 152(Příroda), 142(Rostliny)
549(Příroda a přírodní vědy)
46/67(Věda)
Sci-fi
1(Sci-fi)
238(Sci-fi)
22(Sci-fi a fantasy)
Společenské vědy
40(Společenské), 51(Ekonomie), 180(Ekologie), 121(Právo)
550(Společenské vědy)
46/99(Psychologie), 46/48(Filosofie), 46/50(Právo)
Sport
42(sport)
463(Sport a fitness)
46/66(Sport)
Technika, IT
185(Komunikace), 11(Technická literatura)
262(Odborná a technická literatura)
46/49(PC literatura), 46/52(Technika a elektro)
Učebnice
111(Učebnice), 137(Studie), 162(Naučné)
260(Učebnice)
46/91(Učebnice, slovníky), 46/57(Encyklopedie)
Životní styl
101(Hobby), 464(Zdraví) 8(Životní prostředí), 110(Životní styl)
46/70(Zdraví)
Umění
80(Hudba), 6(Umění)
257(Umění)
46/77(Umění)
Nezařazené
-
266(Ostatní a nezařazené)
46/54(Ostatní), 2/10(Ostatní), 12/20(Ostatní)
14
Duchovní
82(Mytologie), 64(Náboženství), 115(Duchovní literatura)
253(Filozofie, náboženství)
42/44(Náboženství), 42/43(Mytologie), 42/45(New age)
Tabulka č. 1: rozdělení žánrů podle nové aplikace
Každý portál také uchovává informace o autorech. Tyto informace jsou dostupné v profilu autora. Informace jako životopis nejsou pro tuto práci podstatné. Práce se zaměřuje na knižní hodnocení. Nejdůležitějším prvkem profilu autora je tedy jeho tvorba. V každém profilu najdeme seznam vydaných knih spisovatele. Jedná se o seskupení odkazů do daných knižních profilů.
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 knihách se zaměřením na jejich hodnocení. Vyhledávač je spojen se čtyřmi databázovými internetovými stránkami, které se zabývají subjektivním hodnocení knih a autorů. Adresy těchto stránek jsou následující:
www.knihi.cz www.cbdb.cz www.kdb.cz www.databazeknih.cz
Aplikace posílá dotazy těmto serverům a jako odpověď dostává HTML kód. Tento kód následně „propársuje“ a získá potřebné informace. Uživatel má několik možností jak a kde vyhledávat data:
Vyhledávání knih dle žánru Vyhledávání knih dle názvu Vyhledávání knih autora a autory dle názvu Vyhledávání v knihovních katalozích
4.3.1 Vyhledávání knih dle žánru Každý čtenář může mít chuť si přečíst nějakou knihu dle jeho oblíbeného žánru. Účelem aplikace je uživatelům doporučit knihy podle toho, jaké parametry byly zadány. Základní volbou uživatele je samozřejmě žánr. V kapitole 4.1 je uvedeno rozdělení žánrů dle nové aplikace. Uživatel dále zadává následující parametry2: 2
Počet knih, které si uživatel přeje zobrazit Na jakém portálu chce uživatel hledat knihy Způsob řazení nalezených výsledků Jaké knihy uživatel preferuje ve vztahu k hodnocení Možnost každou nalezenou knihu automaticky nalézt na všech serverech
Některé funkce jsou podrobněji popsány v kapitole 4.5 Inteligentní prvky systému
15
Možnost zobrazit pouze takové knihy, které mají záznam o dostupnosti v knihovně
Jak plyne z analýzy knihovních serverů, každý server řadí výsledky v žánrech jiným způsobem. Někdy má uživatel možnost volby. Aplikace získává data z externích zdrojů následovně. Ze serveru knihi.cz dostává seznam knih řazený od nejlepšího hodnocení dané jejich vlastním přepočtem. Tato možnost byla zvolena, protože je zde předpoklad, že uživatel hledá spíše dobré knihy. Internetové stránky cbdb.cz zobrazují pro každý žánr pouze 200 knih na jeden dotaz. Díky parametru „hodnocení nad3“ dostáváme maximálně 800 knih pro daný žánr. Možnost, od jakého hodnocení jsou požadovány knihy z tohoto serveru zobrazit, je volbou uživatele i v nové aplikaci. Možnosti jsou následující:
Zobrazit knihy nad 0 % Zobrazit knihy nad 20 % Zobrazit knihy nad 40 % Zobrazit knihy nad 60 % Zobrazit knihy nad 80 %
Ze serveru kdb.cz dostáváme knihy jen a pouze v abecedním pořadí. Stránka databázeknih.cz poskytuje možnosti řazení. Jako nejlepší volba byla zvolena ta s řazením knihy dle nejlepšího hodnocení.
4.3.2 Vyhledávání knih dle názvu Každý člověk může mít chuť si přečíst knihu jen proto, že se mu líbí její název. Dobrý název knihy je základní marketingový tah, ovšem nezaručuje její opravdovou kvalitu. Můžeme také zírat na dvě knihy a rozhodovat se, která z nich asi bude lepší. Jako výpomoc nám může posloužit prodavačka v knihkupectví a její názor jednotlivce. Ten se ale může diametrálně lišit od názoru dalších lidí. Funkce vyhledávání knih dle názvu může toto rozhodování značně ulehčit. Vyhledávání knih dle názvu přepokládá alespoň částečnou znalost pojmenování knihy. Uživatel zadává do pole „název“ klíčové slovo. Dále má na výběr dvě možnosti co dané klíčové slovo znamená:
Klíčové slovo se přesně shoduje s názvem knihy Klíčové slovo je část názvu knihy
Uživatel dále zadává, kolik knih s tímto názvem hledá, respektive kolik knih by s tímto názvem mohlo existovat. Číslo 1 znamená, že uživatel předpokládá, že existuje jenom jedna kniha s tímto názvem, a že je na prvním místě v seznamu vyhledaných knih požadovaného serveru. Tedy pokud aplikace nalezne na serveru první knihu s tímto názvem, tak její hledání končí. Pokud by existovalo knih s tímto názvem na stejném serveru více, bohužel s takto nízkým parametrem další informace nezíská. Někdy se může stát, že kniha se zadaným názvem není na prvním místě v obdrženém seznamu knih (zejména na serveru cbdb). V tomto případě je lepší zadat určitou rezervu. Výchozí nastavení bylo nastaveno na číslo 5. 3
Viz. kapitola 2.1 analýza serveru cbdb.cz
16
Další možnosti, které jsou k dispozici:
Možnost řazení výsledků Možnost slučování autorů Možnost, ve které databázi se bude hledat
4.3.3 Vyhledávání knih autora/autory Každý čtenář má nějakého oblíbeného autora. Systém je navržen tak, aby dopomohl čtenáři najít knihu, kterou by bylo vhodné si přečíst. Alespoň částečná znalost jména autora je nutností. Zadávající vkládá:
Klíčové slovo (jméno autora) Počet knih V jaké databázi chce hledat Způsob řazení nalezených výsledků Zda je klíčové slovo celé jméno autora, nebo jeho část Jaké knihy uživatel preferuje ve vztahu k hodnocení Možnost každou nalezenou knihu automaticky nalézt na všech serverech Možnost zobrazit pouze takové knihy, které mají záznam o dostupnosti v knihovně
Jedná se o kombinaci možností, které jsou zastoupeny v žánrech nebo v hledání knih dle názvu. Číslo počet knih znamená, kolik knih si zadávající přeje nalézt. Pokud si ovšem není jist jménem autora a má aktivní tuto možnost, tak číslo určuje kolik autorů s podobným jménem má systém vyhledat a zobrazit. V takovémto případě zadávající dostává jako výsledek seznam kompletních jmen autorů. U každého jména může zvolit, zda měl na mysli tohoto konkrétního autora a přejít tak k vyhledání jeho knih. Každý profil autora obsahuje seznam knih. Tento seznam je v nějakém pořadí. Na některých portálech se dá toto pořadí změnit. Aplikace Inteligentní vyhledávač knih zvolila následující pořadí jako nejpoužitelnější:
Knihi.cz - Knihy od nejlepšího hodnocení (jediná možnost) Cbdb.cz – Knihy od nejlepšího hodnocení Kdb.cz – Knihy dle abecedy (jediná možnost) Databazeknih.cz – Knihy dle abecedy4 (jediná možnost)
4.3.4 Vyhledávání v knihovních katalozích Systém nemá čtenářům poskytovat pouze možnost knihu doporučit, ale také ji nějakým způsobem uživateli poskytnout. Aplikace není spojena s žádným nákupním serverem. Knihy jsou v dnešní době velmi drahé a lidé hojně využívají služby knihoven. Aplikace je tedy spojená s několika knihovními katalogy:
4
Na tomto portále lze řadit knihy i dle hodnocení, bohužel pomocí http nelze přímo přistoupit k této možnosti, proto byla zvolena základní možnost.
17
Knihovna Jiřího Mahena v Brně (KJM) Moravská zemská knihovna Knihovna VUT v Brně Knihovna MUNI v Brně Vědecká knihovna Olomouc
Vyhledávání v knihovních katalozích funguje na podobném principu jako předchozí vyhledávání. Uživatel zvolí klíčové slovní spojení a dále zadá, zda toto spojení určuje celý název knihy nebo část názvu. Vyhledávání na serveru KJM probíhá odlišným způsobem, proto má uživatel možnost zadat kolik záznamů chce prozkoumat na tomto portálu. Stránka Vědecké knihovny obsahuje spoustu syntaktických chyb, a proto zde možnost hledání části slova není funkční. Jak plyne z analýzy knihovních katalogů, existuje zde několik možností hledání výsledků. Pro knihovní katalogy typu Aleph bylo vybráno vyhledávání v názvech (Hodnota WTI na obrázku č. 11). Pro vyhledávání v knihovním katalogu KJM bylo zvoleno vyhledávání v názvech (name="center1:searchForm:myRadio" value="UF_200a"), dále byla zvolena možnost vyhledávat v knihách (name=“right1:departmentForm“, value=“1“) a uspořádání dle relevance (name=“right2:sortingForm:searchSortMenu“ value=“relevance“). Aplikace zobrazuje výsledky ve vlastní tabulce (mimo Vědeckou knihovnu). Tabulka obsahuje informace o názvu a dostupnosti knihy.
4.3.5 Způsob zobrazení výsledků Po vyplnění parametrů vyhledávání a odeslání dotazu se uživateli zobrazí obrazovka s výsledky. Tyto výsledky se zobrazují uspořádané do vlastních bloků spolu s dalšími možnostmi vyhledávání. Všechna data o jedné knize jsou sloučena do jednoho informačního bloku. Tato část obsahuje průměrné hodnocení knihy ze všech nalezených serverů, jednotlivé hodnocení knihy z každého portálu s patřičným odkazem na zdroj dat. Dále pak název knihy, jméno autora a popisy díla z jednotlivých serverů. Každý nalezený výsledek dále můžeme vyhledat v knihovně nebo nalézt veškeré knihy s tímto názvem na všech serverech. Tyto dvě funkce slouží hlavně jako doprovodné pro typy vyhledávání, které nejsou nastavené s automatickým vyhledáváním výsledků na všech serverech a v knihovnách. Každá stránka obsahuje několik řádků s informacemi o prohledaných knihách a informace o nastavení parametrů. Nalezneme zde, kolik knih bylo nalezeno. Ve výsledkové obrazovce dále nalezneme lištu, která nám umožňuje pokračovat v hledání. Systém si pamatuje předchozí nastavení, některé parametry zde lze i tak změnit, a to zejména na jakém serveru se má pokračovat ve vyhledávání.
4.4 Vlastní databáze systému Vyhledávání na cizích serverech je značně časově náročné. Pro každou stránku, ze které aplikace extrahuje data, je nutné podat žádost prostřednictvím http. Samotná extrakce také zabere nějaký čas. Pokud vyhledáváme na serveru 20 knih, tak se jedná minimálně o 21 žádostí o stránku a následně 20 „pársování“ k nalezení odpovídajících výsledků. Způsob jak 18
toto vyhledávání urychlit, je použít vlastní databázi jako mezipaměť. Takováto databáze uchovává veškeré potřebné informace o knize.
Obrázek č. 15: entita kniha
Zdrojem databáze se myslí www adresa profilu knihy. Jedná se o primární klíč a tato hodnota nesmí být nulová (Null/None). Jak bylo uvedeno v analýze knižních serverů, každý server po dotazu zobrazuje seznam odkazů do profilů knih. Po získání tohoto odkazu můžeme nejprve zjistit, zda se nevyskytuje kniha s tímto zdrojem v databázi. Pokud se takováto kniha v úschovně dat vyskytuje, není nutné posílat žádost o stránku s profilem knihy a následně extrahovat data. Stačí načíst data z databáze. Informace na knižních serverech nejsou statické a mohou se po čase změnit. Knihu za nějaký čas ohodnotí více uživatelů a tím se může změnit její průměrné hodnocení z daného serveru. Tento problém lze vyřešit jednoduchou kontrolou stáří knihy v databázi. Pokud nejsou data z aktuálního měsíce, tak se informace vyhledají znovu a poté se aktualizuje i databáze.
4.5 Inteligentní prvky systému Hlavním cílem této práce je vytvořit inteligentní vyhledávač, který používá vlastní algoritmy k slívání a slučování výsledků. Následující kapitola se věnuje popisu hlavních prvků a funkcí, které dávají aplikaci přívlastek inteligentní.
4.5.1 Inteligentní rozhodování. Zadávající udává, kolik knih si přeje zobrazit a servery, ze kterých si přeje výsledky. Pod touto volbou se skrývá algoritmus, který přiřazuje každému serveru počet knih, které má vyhledat. Pokud se vrátíme k rozdělení žánrů na každém serveru, tak víme, že každá stránka má vlastní počet přiřazených žánrů, které odpovídají zvolené kategorii inteligentního vyhledávače. Pokud například hledáme 20 knih a vyhledáváme je na každém serveru, inteligence systému přiřazuje každému serveru daný počet knih, které má vyhledat. Při dvaceti knihách a 4 serverech je první rozhodnutí snadné (20/4=5). Aplikace tedy dostane za úkol nalézt na každém serveru 5 knih. Nyní se musí vyhledávač rozhodnou kolik knih přidělit jednotlivým podžánrům hledaného žánru. Uvažujme, že jeden server má pouze jeden podžánr. Tedy v něm vyhledá 5 knih. Druhý server má 6 podžánrů. Požadováno je ovšem jenom 5 knih (5/6 = 0). Systém se v takovémto případě rozhodne přiřadit každému podžánru 1 knihu. Vrátí tedy 6 knih. Další server má naopak 4 podžánry (5/4=1.25=>1). V tomto případě server požaduje 4 knihy a jednu knihu ignoruje. Poslední server má 2 podžánry (5/2=2.5=>3). V tomto případě je vráceno 6. Jako výsledek uživatel dostane 21 (5+6+4+6). Je to o jednu 19
knihu více než žádal, ale je zde zastoupena alespoň jedna kniha z každého podžánru. Tím uživatel dostává komplexnější seznam knih.
4.5.2 Preferování výsledků Uživatel má možnost volby jaké knihy preferuje:
Ohodnocené knihy Nadprůměrné knihy5 Všechny knihy6
Při vyhledávání knih může uživatel určit, které knihy si přeje zobrazovat a které knihy si přeje eliminovat na minimum. Uvažujme, že autor si přeje 20 knih. Pokud měl zaškrtnutou možnost preferovat všechny knihy, tak dostane tento počet knih v lineárním pořadí ze všech serverů. Pokud měl ovšem zvolenou možnost preferovat nadprůměrné knihy nebo knihy ohodnocené, tak se některé knihy nezobrazí ve výsledku a pokud aplikace nemá uspokojivý počet knih, pokračuje ve vyhledávání dle vlastního úsudku. Tento úsudek je založen na zvolení serveru, na kterém jsou knihy s největší pravděpodobností nejlépe hodnoceny podle předchozího vyhledání. Uvažujme, že vyžadujeme po aplikaci 20 knih. Chceme pouze ohodnocené knihy. Po prvním provedení dostane aplikace z každého serveru 5 knih. Na serveru knihi.cz je jedna kniha nehodnocená, na dalším jsou takovéto knihy 3 a na dalším jsou všechny knihy ohodnocené. Na posledním serveru jsou 2 knihy bez hodnocení. Máme tedy 14 (4+2+5+3) ohodnocených knih. Do požadovaného výsledku nám zbývá +- 6 knih. Software ví, že na serveru knihi.cz byla jedna kniha nehodnocená a na předposledním serveru byly všechny ohodnocené. Průměr všech 4 knih na serveru knihi.cz dosahoval 85% naopak průměr z knih na předposledním serveru pouze 60%. Aplikace tedy usoudila, že na serveru knihi.cz je velmi pravděpodobné, že další kniha bude ohodnocená a s vysokým hodnocením, a proto vybere z tohoto serveru zbývající 4 knihy i přesto, že zde byla jedna neohodnocená.
4.5.2 Slívání knih a slučování autorů Základem tohoto softwaru je detekce stejných knih a autorů. Každý server pojmenovává knihy a autory jiným způsobem. Například server knihi.cz v seznamu vyhledaných knih udává pouze jméno knihy. Portál cbdb.cz seznam nalezených knih vypisuje nejprve český název a posléze v závorce název originálu (Hra o trůny I (A Game of Thrones)). Aplikace dokáže tyto názvy oddělit a dále sloučit knihy se stejným názvem a autorem pod jeden titul. Díky tomu dokáže spočítat průměrné hodnocení ze všech serverů. Stejně důležitá je i detekce autorů. Některé servery zkracují jména autorů s prostředním jménem. John Ronald Reuel Tolkien může figurovat jako J. R. R. Tolkien. Některé servery zahraničním spisovatelkám přidávají příponu „ová“. Aplikace nejprve kontroluje název knihy. Pokud se tento název shoduje, tak přejde ke kontrole autora. Mohou existovat knihy se stejným názvem a jiným autorem. Tím, že se nejprve kontroluje název knihy, se eliminují chyby vzniklé při slučování autorů. Mohli by existovat dva různí autoři se stejným příjmením a stejným počátečním
5
Nadprůměrná kniha = hodnocení min. 50% U této možnosti aplikace nedopočítává knihy do zadaného čísla. A to v případě, že na nějakém serveru nebylo nalezeno tolik knih, kolik se po něm požaduje (je zde málo knih nebo žádná) 6
20
písmenem jména (Adam, Aleš), ovšem pravděpodobnost, že tito dva autoři napsali knihu se stejným názvem je extrémně malá.
4.5.2 Automatické hledání knih na všech serverech a v knihovnách Jedna z důležitých vlastností této aplikace je hledání knih na všech serverech a hledání v knihovních katalozích. Tuto možnost může uživatel používat jak přímo, tak ji aplikovat na nalezené mezivýsledky a to při hledání knih v žánrech a knih autorů. Systém si dokáže automaticky předat data z mezivýsledků a poté každou nalezenou knihu dohledat na každém serveru nebo v knihovním katalogu. Pokud kniha v knihovním katalogu nemá žádný záznam, systém ji nezobrazí, jinak zobrazí jak informaci o knize, tak tabulku s informacemi o knize z knihovních katalogů.
Obrázek č. 16: jednoduché schéma popisující stavy Inteligentního vyhledávače knih
21
5 Popis implementace a předvedení systému V předchozí části byl popsán návrh 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 Programovací jazyk Před samotnou implementací bylo nutné rozhodnout, jakými technikami bychom dostali požadovaný výsledek. Jednou z hlavních otázek bylo, jaký zvolit programovací jazyk. Existuje mnoho programovacích jazyků a mnoho paradigmat. Výstup této bakalářské práce je aplikace přístupná na internetu. Proto bylo nutné použít takový jazyk, jehož výstup lze umístit na internetové stránky. K programování webových aplikací se velmi často využívají skriptovací jazyky [15]. Mezi skriptovací jazyky patří jazyky jako Python, PHP (Hypertext Preprocessor), JavaScript, Perl, Ruby. Tato práce je vytvářena 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 i tato aplikace naprogramována. Jak uvádí Mark Summerfield ve své knize [3], 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 jej lze přenášet mezi různými operačními systémy a lze v něm programovat objektově i procedurálně. Tento programovací jazyk je stále rozšířen ve dvou používaných verzích. Starší verze jazyka Python 2.x je stále velmi používaná. Má obrovské množství knihoven třetí strany a hojně diskutovaná témata na internetových fórech věnujících se programování. Druhou verzí je Python 3.x. 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. Poslední verze staršího jazyka je Python 2.7. Tato verze podporuje stejnou syntax jako Python verze 3, některé metody a balíčky mají ovšem jiný název nebo se chovají odlišně. Vzhledem k tomu, že Python 3 není zatím podporován značným množstvím knihoven a vývojáři dávají stále spíše přednost předchozí verzi, tak byl vybrán programovací jazyk verze 2.7. 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. Také 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) [16]. CSS popisuje, jakým způsoben budou zobrazovány prvky HTML. Jedná se o samostatný nástroj uspořádání a tvorby grafických uživatelských rozhraní.
22
5.2 Technologie Common Gateway Interface Po zvolení programovacího jazyka bylo nutné zjistit, jakým způsobem aplikaci zprovoznit jako webovou. Ke spouštění takovýchto aplikací se dají použít softwary třetích stran, jako je například „Django“. Tento „framework“ byl vytvořen přímo pro programovací jazyk Python. Jedná se o jednoduchý nástroj při tvorbě webových aplikací. Dále můžeme použít mnohem jednodušší nástroje, jako je CGI. Jak uvádí wikipedie [17], 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 nejsnadnějších 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čte, tak v něm nejdou dělat žádné interaktivní změny. Po změně se musí načíst celý znovu. Tento způsob vytváření webové aplikace byl zvolen jako dostačující pro účely našeho systému.
5.3 Popis struktury aplikace a použití nejdůležitějších balíčků Aplikace se skládá ze čtyř druhů souborů. Všechny tyto soubory jsou k nalezení v elektronické příloze. Jedná se o zdrojové kódy programu. Soubory programovacího jazyka Python:
Shelf.py Funkcio.py Search.py
V souboru Shelf.py nalezneme vlastní vytvořené třídy. Jedna třída se jmenuje Book a reprezentuje knihu. Každý takovýto objekt uchovává informace o jméně knihy, autorovi, hodnocení, připojenému textu a url zdroje informací. Objekty tohoto typu aplikace vytváří po extrakci údajů z daných serverů k jejich uchování. Druhou třídou je třída BookList. Tato instance reprezentuje seskupení knih se stejným jménem a autorem. Třída Booklist je vytvořena spojením informací z několika objektů typu kniha. Uchovává informace o jméně knihy, autorovi, průměrné hodnocení z nalezených serverů, text knihy z nalezených serverů a průměrné hodnocení z jednotlivých serverů. Soubor Funkcio.py uchovává nejdůležitější funkce, které jsou použity pro výpis a třídění nalezených informací. Tyto funkce jsou používány jen v cgi skriptech. Každý k výpisu a třídění používá každý skript stejné funkce. Tato knihovna vznikla proto, aby nedocházelo ke zbytečnému přetěžování kódu a tyto funkce nemusely být zastoupeny v každém cgi zvlášť. Soubor Search.py je srdcem celého systému. Obsahuje třídy, jejichž hlavním úkolem je vyhledat data, a poté vytvořit objekty typu Book, do kterých data uloží. V případě vyhledávání v knihovnách vytváří software vlastní tabulky, které následně zobrazí.
23
Soubory CGI:
kniha.cgi knihaVysledek.cgi zanr.cgi zanrVysledek.cgi autorknih.cgi autorknihVysledek.cgi knihovna.cgi knihovnaVysledek.cgi index.cgi
Tyto skripty slouží ke zprovoznění grafického uživatelského rozhraní, používají funkce z výše uvedených souborů jazyka Python a zobrazují uživateli výsledky vyhledávání. Skripty bez přípony „Vysledek“ mají za úkol poskytnout uživateli prostředí pro zadání parametrů, tyto parametry poté přepošlou dál skriptu s příponou. Tento soubor následně nalezne a vypíše informace o výsledku. Soubor index.cgi slouží k uvedení uvítací obrazovky programu. Databázové soubory a soubory typu CSS:
knihovna.db styl.css
5.3.1 Základní technika vyhledávání výsledků K vyhledání výsledků bylo použito několik knihoven. Jednou ze základních knihoven programovacího jazyka Python je urllib. Tato knihovna se používá k vyslání požadavku pomocí služby http. Pomocí tohoto balíčku můžeme poslat žádost na stránku serveru. Jako odpověď dostáváme html obsah stránky. Tento obsah můžeme snadno převést do textového řetězce, se kterým se dá dále velmi lehce pracovat. Samotná stránka však nestačí. Je nutné z ní nějakým způsobem extrahovat data. Pokud bychom pracovali pouze s vestavěnými funkcemi nad řetězci, tak by to bylo z programátorského hlediska značně náročné a kód by byl velmi dlouhý. Pro efektivní nalezení dat bylo dobré se poohlédnout po knihovně třetí strany. Jedna z velmi diskutovaných knihoven třetí strany je knihovna Beautifullsoup (BS). Tato knihovna poskytuje uživatelsky velmi jednoduché a efektivní vyhledávání. Konstruktor jako argument přijímá textový řetězec, který převede na objekt, se kterým dokáže lépe pracovat. Při tomto převodu dokáže částečně opravit menší chyby nebo ignorovat část html kódu. U větších syntaktických chyb zdrojového html souboru bohužel dochází k vyvolání výjimky. Při vytváření programu bylo na mnoha stránkách zjištěno značné množství chyb. Pokud se chyba vyskytovala na všech stránkách konkrétního serveru na stejném místě, tak ji bylo možné ručně opravit. Bohužel některé stránky a to především knihovní katalogy, obsahují chyby předem nepředvídatelné. V takovémto případě program nedokáže extrahovat data z daného serveru, protože se html kód stránky tváří jako nekorektní. Dalším užitečným balíčkem, který je použit v této aplikaci je knihovna pro regulární výrazy (re). Společně s použitím BS se 24
ukázalo v některých případech použití regulárních výrazů jako efektivní. Způsob vyhledání výsledků pomocí těchto balíčků je nejlepší předvést na následujícím příkladu.
Obrázek č. 17: ukázka kódu extrahování dat pro server cbdb
Jak lze vidět, funkce parserLinsk() obdrží seznam odkazů do profilu knih. Aplikace se spojí s databází a ověří, zda se zde tento odkaz nenalézá a zda je dostatečně aktuální. Pokud ano, tak nahraje data z databáze. Pokud ne, tak pomocí funkce urllib.urlopen() požádá o obsah daného odkazu. Tento obsah předá funkci bookData(), která obdrží html kód profilu knihy. Profil knihy poté „propársuje“ pomocí balíčku BeautifullSoup. Například jméno autora dostáváme jednoduše pomocí dotazu soup.find(“a”, itemprop=”author”). Pomocí tohoto dotazu vyhledáme totiž všechny tagy „a“, které mají atribut itemprop s hodnotou author. Poté si stačí vyžádat pomocí funkce get_text() část textu, který se zobrazuje uživateli v prohlížeči (tedy jméno autora). Po nalezení všech ostatních dat program vytvoří objekt typu Book a data do něj uloží. V případě selhání se aplikace snaží vracet prázdné seznamy tak, aby nehrozil pád programu.
5.3.2 Implementace databáze Tento software obsahuje velmi jednoduchou databázi. Rozhodování, jaký druh databáze použít, nebylo příliš obtížné. Vzhledem k tomu, že jedna z nejpoužívanějších databází je databáze SQL a základní znalost SQL je součástí výuky na této univerzitě, byla tato volba optimální. Existuje značné množství balíčků pro Python, které podporují práci s SQL, jako například pymySQL nebo SQLite3. Právě SQLite3 je od verze 2.4 vestavěná. Jedná se o databázi, která podporuje menší škálu příkazů jazyka SQL, ale pro naše jednoduché účely je bohatě postačující. 25
5.4 Předvedení softwaru Po dokončení každého softwaru je velmi dobré ukázat, jakým způsobem program reálně funguje a co vlastně poskytuje uživateli. Každý program, který je běžně k dostání v obchodě se dodává s uživatelskou příručkou nebo manuálem. Tato část práce se věnuje představení aplikace v podobě projetí softwaru několika náhodnými scénáři. Funkční aplikace je vystavená na serveru Masarykovy univerzity na adrese http://nlp.fi.muni.cz/projekty/hodnoceni_knih. Na této stránce stačí poté zvolit nejnovější verzi aplikace. Může se použít také adresa přímo na startovací skript poslední verze. http://nlp.fi.muni.cz/projekty/hodnoceni_knih/v7/index.cgi. Z univerzitní sítě se k programu dá dostat bez přihlášení. Z veřejného internetu pouze po vložení přihlašovacích údajů do NLP. Scénář 1: Žena by ráda koupila svému manželovi knížku k Vánocům. Ví, že má rád dobrodružné knihy s napětím a řešením záhad. Také je to v celku náročný čtenář a preferuje kvalitní literaturu. Scénář 2: Petr má velmi rád spisovatele Stephana Kinga. Přečetl od něj značné množství knih. Potřeboval by zjistit, jakou další knihu si od tohoto autora přečíst. Scénář 3: Karel dostal doporučení na dvě knihy od Karla Čapka. Jedna se jmenuje Válka s mloky a druhá Krakatit. Karel by rád věděl, která z těchto knih je lepší a také by rád zjistil, zda je některá z těchto knih k dostání v knihovně.
5.4.1 Aplikace scénáře 1 na software
Obrázek č. 18: obrazovka vyhledávání knih dle žánru
26
Pro scénář 1 je nejlepší použít možnost vyhledání knihy dle žánru. Jak lze vidět na obrázku byl zvolen žánr dobrodružné. Dále jsme zvolili, aby aplikace nalezla 10 knih. Rozdělovací algoritmus rozdělí každému ze serverů určitý počet knih k nalezení. Jedná se o náročného čtenáře, proto byla zvolena možnost preferovat nadprůměrné knihy. Takto by mohlo nastavení zůstat. Pokud ovšem požadujeme výsledek, který lépe vypovídá o hodnocení knih, tak je nejlepší použít volbu „průměr ze všech serverů“. Tato volba je velmi časově náročná. Každá nalezená kniha z požadovaných knih je dále vyhledávána na každém serveru a to podle názvu knihy. Pokud by byla každá kniha nalezena na všech serverech, výsledek by byl 40 knih.
Obrázek č. 19: část výsledku hledání dobrodružných knih
Jak lze vidět na obrázku č. 19 bylo nalezeno celkem 30 knih. Výsledky jsou zobrazeny od nejlepší knihy a jsou inteligentně setříděny podle názvu a autora (stejné knihy v jednom bloku). Hned třetí výsledek vypadá velmi slibně. Hodnocení 100 na třech serverech.
5.4.2 Aplikace scénáře 2 na software Pro nalezení knih autora zvolíme možnost vyhledání knih autorů. Zde napíšeme do kolonky jméno Stephen King. Autorovo jméno známe přesně, proto jej nemusíme vyhledávat. Zvolili jsme tedy možnost, že jméno autora je přesné. Počet hledaných knih byl určen na číslo 10 a stejně jako v předchozím případě zvolíme dohledání výsledků na všech serverech. Pro prvotní vyhledání 10 knih byla zvolena jedna databáze a to cbdb.
27
Obrázek č. 20: část výsledku pro knihy Stephena Kinga
5.4.3 Aplikace scénáře 3 na software Zvolíme možnost vyhledání knih dle názvu. Zde zadáme nejprve název první knihy, tedy Krakatit. Nastavíme vyhledávání na všech čtyřech serverech a řazení od nejlepšího hodnocení. V kolonce počet knih necháme číslo pět, protože předpokládáme, že s tímto názvem existuje více knih, popřípadě že kniha s tímto názvem nebude hned na prvním místě v seznamu vyhledávače jednotlivých serverů.
Obrázek č. 21: vyhledávání dle názvu
28
Obrázek č. 22: porovnání výsledků hledání dvou knih
Po nalezení výsledků obou knih lze usoudit, že kniha Válka s mloky je pravděpodobně lepší. Protože obě knihy byly nalezeny na všech serverech. Válka s mloky má ovšem o 10 vyšší hodnocení. Následné vyhledání knih v knihovních katalozích se nalézá v příloze č. 2.
29
6 Závěr Tato bakalářská práce se zaměřovala na analýzu a implementaci inteligentního vyhledávače hodnocení knih, který je schopen na jednom místě zobrazovat data o knižních titulech a jejich hodnocení. Nalezené výsledky je možno vztahovat ke knihovním katalogům. Výsledný nástroj má podobu webové aplikace a je umístěn na serveru Masarykovy univerzity http://nlp.fi.muni.cz/projekty/hodnoceni_knih. Bakalářská práce začíná analýzou internetových stránek, které se zaměřují na sběr dat o knižních titulech se zaměřením na hodnocení. Této analýze se podrobily čtyři největší české portály věnující se této problematice a byla vytvořena proto, abychom zjistili, co tyto stránky poskytují uživateli. Jakým způsobem si data od stránky uživatel žádá a jakým způsobem jsou data vypisována. Z této analýzy byly vytvořeny požadavky na nový software. Práce pokračuje návrhem tohoto nového systému, popisem inteligentních prvků a popisem implementace. Systém umožňuje základní čtyři druhy vyhledávání:
Vyhledávání dle názvu Vyhledávání dle jména autora Vyhledávání dle žánru Samostatné vyhledávání v knihovních katalozích
V každém druhu vyhledávání má uživatel možnost zadat na jakém serveru chce vyhledávat. Aplikace dokáže nalézt data na serveru knihi.cz, cbdb.cz, kdb.cz, databazeknih.cz. Z každého tohoto serveru dokáže aplikace inteligentně setřídit knihy dle názvu a autora. Spočítat průměrné hodnocení knihy s ignorací nehodnocených knih (hodnocení 0). Zadávající má možnost zvolit jaké knihy preferuje. Aplikace potom inteligentním tříděním těmto preferovaným knihám dává větší váhu a ve výsledku se takovýchto knih objeví více. Program dokáže každou knihu z mezivýsledků začít hledat na každém serveru dle jména, aby měl výsledek větší vypovídající hodnotu. Systém také umožňuje zobrazovat pouze knihy, o kterých lze zjistit dostupnost v knihovně. Systém je spojen s pěti knihovnami. Čtyři z nich využívají knihovní katalog Aleph. Je to knihovna VUT v Brně, Masarykovy univerzity, Moravské zemské knihovny a Vědecké knihovny Olomouc. Vlastní katalog využívá Knihovna Jiřího Mahena v Brně a jedná se o knihovní katalog Carmen. Poslední část bakalářské práce se soustřeďuje na předvedení reálného softwaru. Software se představuje několika průchody smyšlenými scénáři. Tímto způsobem se předvedlo nejen jakým způsobem s aplikací pracovat, ale do jisté míry i její využití a funkčnost. Algoritmus této práce byl napsán poměrně na míru každému jednotlivému serveru. V případě, že by některý ze serverů výrazněji změnil html kód, nastal by problém s extrakcí dat. Funkce, které mají na starost vyjmutí dat, jsou napsány vcelku jednoduše a kód by nemělo být složité rychle upravit tak, aby byl program opět plně funkční.
30
Seznam použitých zdrojů: [1] O službě Vyhledávání knih Google [online]. 2011 [cit. 2011-11-21]. Dostupné z WWW:
. [2] Google [online]. 2011 [cit. 2011-11-21]. Dostupné z WWW: . [3] SUMMERFIELD, Mark. Python 3 výukový kurz. Brno : Computer press, 2010. 584 s. ISBN 978-80-251-2737-7. [4] Česká bibliografická databáze [online], 2012 [cit. 2012-5-5]. Dostupné z WWW: . [5] Krakatit [online], 2012 [cit. 2012-5-5]. Dostupné z WWW: < http://www.cbdb.cz/kniha972-krakatit-krakatit>. [6] Databáze knih [online], .
2012
[cit.
[7] Databazeknih Krakatit [online], 2012 [cit. < http://www.databazeknih.cz/knihy/krakatit-688>.
2012-5-5].
2012-5-5].
Dostupné
Dostupné
z WWW: z WWW:
[8] Statistiky databáze knihi.cz [online], 2012 [cit. 2012-5-5]. Dostupné z WWW: . [9] Hledaná kniha Krakatit [online], 2012 [cit. 2012-5-5]. Dostupné z WWW: < http://www.knihi.cz/search.php?q=krakatit&x=0&y=0&c=1>. [10] Knižní databáze Kdb.cz [online], 2012 [cit. 2012-5-5]. Dostupné z WWW: . [11] Kdb Krakatit [online], 2012 [cit. < http://www.kdb.cz/kniha-16988-krakatit.html>.
2012-5-5].
Dostupné
z WWW:
[12] Výsledky dotazu slova krakatit aleph.cz [online], 2012 [cit. 2012-5-5]. Dostupné z WWW: < htp://aleph.muni.cz/F/3Y54HSEYSSY88KQ99MR9KXXRVKAA4J299C5YPR9XNABPJ28 JEA-08261?func=findb&request=krakatit&find_code=WRD&local_base=MUB01W&x=36&y=6&filter_code_1= WLN&filter_request_1=&filter_code_2=WYR&filter_request_2=&filter_code_3=WYR&filt er_request_3=&filter_code_4=WFM&filter_request_4=&filter_code_4=GNR&filter_request _4=>. [13] O knihovně [online]. 2012 [cit. 2012-5-5]. Dostupné z WWW: < http://www.kjm.cz/oknihovne>.
31
[14] Vyhledávání KJM [online]. 2012 [cit. 2012-5-5]. Dostupné z WWW: < http://katalog.kjm.cz:8080/Carmen/main/application.faces?library=main&view=search&actio n=search&query=krakatit&searchField=ALL&page=1&department=8&conversationContext =1>. [15] Skriptovací jazyk [online], aktualizace 8. 1. 2012, [cit. 5.5.2012], Wikipedie. Dostupné z: < http://cs.wikipedia.org/wiki/Skriptovací_jazyk>. [16] Kaskádové styly [online], aktualizace 2. 3. 2012, [cit. 5.5.2012], Wikipedie. Dostupné z: < http://cs.wikipedia.org/wiki/css>. [17] CGI [online], aktualizace 1. 4. 2012, [cit. 2012-5-5], Wikipedie. Dostupné z: < http://cs.wikipedia.org/wiki/Common_Gateway_Interface>.
32
Seznam obrázků Obrázek č. Obrázek č. Obrázek č. Obrázek č. Obrázek č. Obrázek č. Obrázek č. Obrázek č. Obrázek č. Obrázek č. Obrázek č. Obrázek č. Obrázek č. Obrázek č. Obrázek č. Obrázek č. Obrázek č. Obrázek č. Obrázek č. Obrázek č. Obrázek č. Obrázek č.
1: html kód formuláře jednoduchého vyhledávání ................................................. 3 2: část html kódu formuláře pokročilého vyhledávání ........................................... 3 3: ukázka profilu knihy Krakatit na serveru www.cbdb.cz [5].............................. 4 4: vyhledávací formulář html .................................................................................. 5 5: ukázka profilu knihy Krakatit na serveru www.databazeknih.cz [7].................. 6 6: html formulář na stránce www.knihi.cz.............................................................. 6 7: html kód s informacemi o knize ze serveru knihi.cz .......................................... 6 8: znázornění výstupu serveru www.knihi.cz po zadání dotazu Krakatit [9] ......... 7 9: html formulář ze stránky kdb .............................................................................. 8 10: ukázka profilu knihy Krakatit na stránce www.kdb.cz [11] ............................. 8 11: část html formuláře knihovního katalogu aleph.muni.cz ................................ 10 12: ukázka vyhledaných údajů v knihovním katalogu aleph.muni.cz [12] ........... 10 13: ukázka vyhledávání na serveru Carmen.kjm.cz [14] ...................................... 11 14: html tabulka s detailem o dostupnosti knihy................................................... 11 15: Entita kniha ..................................................................................................... 19 16: jednoduché schéma popisující stavy Inteligentního vyhledávače knih .......... 21 17: ukázka kódu extrahování dat pro server cbdb................................................. 25 18: obrazovka vyhledávání knih dle žánru ........................................................... 26 19: část výsledku hledání dobrodružných knih ..................................................... 27 20: část výsledku pro knihy Stephena Kinga ........................................................ 28 21: vyhledávání dle názvu..................................................................................... 28 22: porovnání výsledků hledání dvou knih ........................................................... 29
Seznam tabulek Tabulka č. 1: rozdělení žánrů podle nové aplikace ................................................................. 15
Seznam elektronických příloh a přiloženého cd Příloha č. 1: zdrojové soubory programu
Seznam příloh Příloha č. 1: schéma funkce databáze Příloha č. 2: vyhledávání v knihovnách
33
Příloha č. 1: schéma funkce databáze
Příloha č. 2: vyhledávání v knihovnách