<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" 
	"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!ENTITY % fithesis SYSTEM "http://www.fi.muni.cz/~xpavlov/fithesis.mod">
	%fithesis; ]>

<book lang="cs">
   <bookinfo>
      <title>Webový portál věnovaný syntaktické analýze přirozeného jazyka</title>
      <subtitle>Bakalářská práce</subtitle>
      <author>
         <firstname>Lukáš</firstname>
         <surname>Macháček</surname>
         <fi:woman>false</fi:woman>
         <fi:faculty>fi</fi:faculty>
         <fi:advisor>unknown</fi:advisor>
      </author>
	<pubdate>jaro 2002</pubdate>
	<keywordset>
		<keyword>webový portál</keyword>
		<keyword>internetový vyhledávač</keyword>
		<keyword>webový vyhledávač</keyword>
		<keyword>ResearchIndex</keyword>
		<keyword>HP Search</keyword>
	</keywordset>
	<abstract>
	<para>
	S rostoucím množstvím vystavených vědeckých článků v síti Internet je stále větší problém vyhledat dokumenty z požadované vědecké oblasti.
	Tematicky specializované vyhledávací systémy provozované většinou na univerzitách nám mohou v takovéto situaci hodně pomoci.
	Tyto vyhledávače indexují ohromné množství článků a informací o jejich autorech.
	</para>
	<para>
	Vedle vyhledávačů existují v síti Internet tzv. webové portály,
	které se snaží ulehčit přístup k žádaným dokumentům tak, že plní své informační zdroje výhradně dokumenty,
	které se zabývají určitou tematickou oblastí. K plnění svých vlastních informačních zdrojů využívají webové portály
	zpravidla právě činnosti tematicky specializovaných vyhledávačů.
	</para>
	<para>
	V rámci projektu byl implementován systém, který získává texty článků zabývajících se daným tématem,
	informace o jejich vzájemných citacích a jejich autorech. Ke každému autorovi ještě také zjišťuje informace o jeho působišti.
	Tento systém je určen pro pozdější integraci do webového portálu věnovanému syntaktické analýze přirozeného jazyka.
	</para>
	</abstract>
   </bookinfo>

<toc></toc>

<part id="partI">
<title>Webové portály</title>

<chapter id="ch01">
<title>Úvod</title>

<para>
Množství informací obsažené v síti Internet expanduje den co den nezadržitelným tempem a pravděpodobnost, že se zde nachází přesně ta informace,
kterou kupříkladu já potřebuji, je tak čím dál tím větší. Avšak stále velkým problémem výše zmiňované celosvětové sítě je organizace takovéhoto kvanta dat a následné vyhledávání v něm.
Z tohoto problému vyplývá, že pouhé obsažení dané informace nemusí nutně znamenat, že se mi podaří k ní bez vynaložení velkého úsilí nebo vůbec dostat.
Veškerá data jsou totiž distribuována na obrovském množství počítačů po celém světě a existuje naprostá volnost při jejich zveřejňování.
</para><para>
Tato tzv. informační anarchie a neexistence jakékoliv centrální správy dokumentů vedla ke vzniku spousty ať už univerzálních nebo specializovaných internetových vyhledávacích služeb.
Mezi nejznámější univerzální webové vyhledávače patří například dnes velice úspěšný <indexterm><primary>Google</primary></indexterm>Google.
Univerzální protože se snaží shromažďovat informace o všech datech na Internetu zveřejněných nezávisle na tom, jaké tematické oblasti se týkají.
Ze specializovaných webových vyhledávačů lze uvést například <indexterm><primary>ResearchIndex</primary></indexterm>ResearchIndex,
který se zaměřil na vyhledávání a zároveň rozšiřování vědecké literatury.
</para><para>
Ve snaze ulehčit orientaci jak ve vyhledávaných informacích ale vůbec v samotné celosvětové síti, vnést do práce uživatele s Internetem i jistý komfort
a získat tak širokou obec uživatelů, začaly se budovat tzv. <quote>webové portály</quote>. Vznikly buď jako součást výše zmiňovaných vyhledávačů nebo úplně samostatně.
</para><para>
Cílem projektu je implementovat systém, který bude vyhledávat za pomoci specializovaných internetových vyhledávačů články,
informace o jejich autorech a působištích těchto autorů a následně získaná data ukládat.
Tento systém bude využit k plnění informačních zdrojů pro webový portál<indexterm><primary>webový portál</primary></indexterm>
věnovaný konkrétně syntaktické analýze přirozeného jazyka.
</para>
</chapter>

<chapter id="ch02">
<title>Webový portál</title><para>
Webový portál<indexterm><primary>webový portál</primary></indexterm> by se dal definovat jako vstupní bod - výchozí místo pro
 surfování po Webu nabízející širokou škálu služeb a informací s možností jejich
 přizpůsobení uživateli podle osobních potřeb a zájmů. Nabídka obecně zahrnuje
 vyhledávání webových zdrojů, jak prostřednictvím vyhledávacího stroje, tak
 prostřednictvím předmětového katalogu, prohledávání webového prostoru v určité
 zeměpisné, jazykové nebo tematické oblasti.
</para><para>
Dále nabízí ještě spoustu dalších služeb, které se u
 jednotlivých portálů už ovšem liší podle toho, na jakou skupinu uživatelů jsou
 zaměřeny a jaká činnost je s touto skupinou lidí spjata.
</para>

<sect1 id="sec0201">
<title>Tematická orientace</title><para>
Možností, jak rozdělit zaměření webových portálů, je samozřejmě více, ale
 jedním z hlavních faktorů, který určuje, jak bude daný komunikační systém
 vypadat, je tematická orientace. Podle tohoto kritéria lze webové portály<indexterm><primary>webový portál</primary></indexterm> rozdělit do dvou skupin:

<itemizedlist>
<listitem><simpara>horizontální portály<indexterm><primary>horizontální portály</primary></indexterm> (horizontal portals)</simpara></listitem>
<listitem><simpara>vertikální portály<indexterm><primary>vertikální portály</primary></indexterm> (vertical portals, vortals<indexterm><primary>vortals</primary></indexterm>)</simpara></listitem>
</itemizedlist>
</para>

<sect2 id="sec020101">
<title>Horizontální portály</title><para>
Horizontální portály jsou charakteristické tématicky
 širokým (obecným) zaměřením. Název horizontální je tedy odvozen od toho, že jejich
 činnost se soustředí na co nejširší informační spektrum. Obecnost je dána
 především nutností uspokojit co největší masy uživatelů a tedy komerčními
 důvody.
</para><para>
Naprostá většina těchto portálů se na Webu objevila původně jen jako jeden ze
 základních typů vyhledávacích nástrojů umožňujících orientaci v informačních
 zdrojích na Internetu. Časem se z nich staly nejnavštěvovanější webové stránky,
 a tak se jejich provozovatelé pokusili využít popularity a rozšířili nabídku
 o další funkce s cílem udržet uživatele na svých stránkách i poté, co si vyhledali
 potřebné informace. Firmy provozující vyhledávací systémy<indexterm><primary>vyhledávací systém</primary></indexterm> začaly nakupovat další servery, buď kvůli
 zajímavým technologiím nebo kvůli atraktivnímu obsahu. Vznikla tak opravdu
 <quote>gigantická sídla</quote> s širokým tematickým rozsahem tak, jak je známe dnes.
</para><para>
Do palety poskytovaných služeb patří denní zpravodajství,
 tematicky orientované kanály (uživatelé se podle svých osobních zájmů mohou
 přihlásit k jejich odběru), ekonomické informace a burzovní zprávy, chat,
 přehled počasí, mapy, horoskopy, vtipy, kalendáře, vyhledávání osob,
 e-mailových adres a telefonních čísel (tzv. white pages<indexterm><primary>white pages</primary></indexterm>), vyhledávání firem
 (tzv. yellow pages<indexterm><primary>yellow pages</primary></indexterm>), hry, elektronické obchody, free-mailové služby, bezplatný
 prostor pro publikování webových stránek, zpřístupnění důležitých informací
 prostřednictvím
 mobilních telefonů a kapesních počítačů apod. Naprostá většina nabízených
 služeb je pro koncového uživatele bezplatná díky ziskům z všudypřítomné
 reklamy.
</para><para>
Jako příklad takových horizontálních webových portálů lze krátce uvést <indexterm><primary>Google</primary></indexterm>Google, Yahoo!,
 Lycos, NBCi a z domácích potom Seznam (jeden z prvních u nás), Centrum, Atlas,
 Volny a mnoho dalších.
</para>

</sect2>
<sect2 id="sec020102">
<title>Vertikální portály</title><para>
Vertikální portály jsou na rozdíl od horizontálních
 tématicky úzce zaměřené a jsou určeny pro specifický typ uživatelů, proto se
 také někdy nazývají <quote>comunity portals</quote>.
</para><para>
Zpravidla jsou nekomerční nebo také neziskové. Patří mezi
 ně především vědecky orientované informační systémy, jejich provoz zajišťují
 univerzity nebo jiná vzdělávací a výzkumná centra. Shromažďují články, texty
 publikací, dále informace o jejich autorech a případně i o působišti těchto lidí,
 dále pak výsledky výzkumů, záznamy z konferencí atd.
</para><para>
Dnes se pomalu ukazuje, že na rozdíl od v současné době hojně rozšířených horizontálních portálů,
které v mnoha případech nesplnily očekávání svých provozovatelů,
mají vertikální portály podle analytiků budoucnost mnohem zářivější i při komerčním využití.
Například v oblasti zahraničního obchodu je ideální sdružit více subjektů
z určitého výrobního odvětví v rámci jednoho projektu a zájemcům nabízet související
zboží a služby pod jednou střechou.
</para><para>
Nahlédneme-li do menu nabízených služeb, zjistíme, že v porovnání s komerčními
 portály je nabídka podstatně chudší, avšak postačující pro účely, k nimž byl
 portál zbudován. Většina služeb se odvíjí od témat, jimž se systém věnuje.
 Například z uložených a získaných dokumentů lze automaticky generovat záznamy
 ve formátu <indexterm><primary>BibTex</primary></indexterm>BibTeX, zjišťovat informace o citacích v článcích,
 případně jejich podobnosti a příbuznosti, jejich převody do jiných
 formátů nebo přidávání komentářů a zakládání diskusí či diskusních skupin nebo
 konferencí na téma, kterému se daný informační zdroj věnuje.
</para><para>
Do skupiny vertikálních portálů patří například CNET<footnote id="fn020101"><para><ulink url="http://www.cnet.com">http://www.cnet.com</ulink></para></footnote>
zaměřený na oblast technologickou nebo Blackboard<footnote id="fn020102"><para><ulink url="http://www.blackboard.com">http://www.blackboard.com</ulink></para></footnote>
a WebCT<footnote id="fn020103"><para><ulink url="http://www.webct.com">http://www.webct.com</ulink></para></footnote>
věnované vzdělávání.
</para>
</sect2>
</sect1>

<sect1 id="sec0202">
<title>Struktura</title><para>
Webové portály<indexterm><primary>webový portál</primary></indexterm> se většinou skládají z několika systémů, které pracují nezávisle na sobě.
 Dají se rozdělit do dvou skupin. Do první patří ty, co pracují autonomně a pro
 uživatele je jejich činnost skryta. Říkejme jí třeba autonomní část webového portálu.
 Druhou skupinou jsou naopak aplikace, kde výsledek o jejich
 činnosti je nabídnut uživateli a sama činnost je také závislá na uživatelském vstupu.
</para>
<sect2 id="sec020201">

<title>Autonomní část</title><para>
Autonomní část se stará o prohledávání Internetu a obstarává data z předem
 daných informačních zdrojů. K této činnosti většina portálů využívá tzv. robotů
 (též <indexterm><primary>spiders</primary></indexterm>spiders, <indexterm><primary>crawlers</primary></indexterm>crawlers), které automaticky procházejí hypertextovou strukturu
 Webu, načítají dokumenty a rekurzivně procházejí v nich obsažené odkazy. Do této
 skupiny také patří programy, jenž získaná data následně analyzují a podle
 potřeb připravují pro následné zpracovávání samotným webovým rozhraním.
 Například vytvářejí indexy nebo ukládají potřebné informace do databází.
</para>
</sect2>

<sect2 id="sec020202">
<title>Část závislá na chování uživatele</title><para>
Část závislá na chování uživatele se sestává z aplikací, které reagují na dotazy
 uživatele a jejich výstup není uživateli na rozdíl od autonomní části skryt.
 Komunikace probíhá pomocí webového rozhraní. Podle požadavků od uživatele,
 operuje systém nad předem získanými daty a umožňuje do nich podle potřeby zasahovat.
</para>
</sect2>
</sect1>

<sect1 id="sec0203">
<title>Rozdělení z uživatelského pohledu</title><para>
Webový portál<indexterm><primary>webový portál</primary></indexterm> se z pohledu uživatelského zpravidla skládá z několika vrstev, kde
 každá nabízí každé skupině uživatelů jiné služby.
</para><para>
Základní vrstva je vždy administrativní nebo také vývojová. Je určena pro lidi
 starající se o správný chod celého webového portálu. Takže je možné zde ovlivňovat
 například i chod autonomně pracujících systémů. Proto je pro přístup vyžadována
 autentifikace.
</para><para>
Další vrstva už je pro běžné uživatele, kterým je portál určen. Nabízí tedy služby,
kterými by neměl být narušen správný chod celého systému.
V případě, že jsou běžní uživatelé rozlišováni do dalších skupin,
lze tuto vrstvu rozčlenit na další právě podle těchto skupin a každé pak přidělit
různá práva s ohledem na to k jakým službám a informacím mohou přistupovat.
Například u zpravodajského portálu bude skupina redaktorů, kteří mohou vkládat do systému
své články a další skupinu budou tvořit čtenáři, kteří již pravomoc pro vkládání nových
článků nemají. Jak je vidět, každý má pak různá práva pro zacházení s informacemi a pro pohyb uvnitř portálu.
 Tato uživatelská vrstva by se tedy rozdělila na redaktorskou a čtenářskou.
 Je to ovšem pouze ilustrační příklad a v praxi by konkrétně u tohoto portálu bylo rozdělení ještě mnohem složitější.
</para>
</sect1>

<sect1 id="sec0204">
<title>Motivace</title><para>
Jak je z předchozího textu patrné, usnadňují webové portály<indexterm><primary>webový portál</primary></indexterm> orientaci v nepřehledné pavučině informací a služeb dostupných na Internetu.
Zároveň s tím vnáší do naší činnosti jistý komfort a pohodlí, ať už se jedná o práci nebo zábavu.
Mám-li svůj oblíbený portál, nemusím znát neúnosné množství adres webových stránek, ale stačí mi jen jedna a přitom se dostanu k informacím, které mě zajímají, snadno a rychle.
</para>
</sect1>
</chapter>


<chapter id="ch03">
<title>Vyhledávání informací s vědeckých obsahem na Internetu</title>
<para>
Vědci z mnoha výzkumných oblastí dnes publikují své nejnovější objevy
 elektronicky na svých webových stránkách dlouho před tím, než se objeví na
 konferencích a v časopisech. Zatímco se před desetiletími dalo k výsledkům
 takovýchto konferencí a časopisům týkajících se právě těchto nových objevů
 dostat jen v knihovnách daných výzkumných center, je dnes situace poněkud jiná.
 Internet nám otevírá nové možnosti, jak se k takovýmto informačním zdrojům
 dostat. Tradiční vyhledávací systémy<indexterm><primary>vyhledávací systém</primary></indexterm> nám v tom ovšem moc nepomohou,
 neboť nejsou schopny prohledávat kupříkladu postscriptové soubory (výjimkou je <indexterm><primary>Google</primary></indexterm>Google), což je právě
 formát vhodný k elektronické přípravě vědeckých dokumentů a jejich publikování v již
 zmiňované síti Internet.
</para><para>
Naštěstí existují na Webu specializované služby, které si kladou za cíl usnadnit vyhledávání informací z vědecké oblasti.
Tyto vyhledávací stroje fungují převážně při univerzitách jako nástroj vědy a výzkumu jen zřídka se jedná o produkty komerčních softwarových firem.
</para>

<sect1 id="sec0301">
<title>ResearchIndex</title><para>
ResearchIndex<indexterm><primary>ResearchIndex</primary></indexterm> (formálně CiteSteer<footnote id="fn030101"><para><ulink url="http://citeseer.nj.nec.com/cs">http://citeseer.nj.nec.com/cs</ulink></para></footnote>)
je autonomně pracující systém určený k vyhledávání a zároveň rozšiřování vědecké literatury. Vyvíjejí jej Steve Lawrence, Kurt Bollacker a C. Lee Giles v NEC Research Institute.
</para><para>
Hlavní oblastí, kterou se tento systém zabývá, jsou informační technologie. Mezi
 další už ne tak významné patří pokročilá nauka o materiálech, chemie, fyzika,
 biofyzika a bioinformatika. Celkem tak indexuje něco přes 500000 vydaných
 článků, prezentací, záznamy konferencí a technických zpráv (údaj z května 2002).
</para><para>
ResearchIndex<indexterm><primary>ResearchIndex</primary></indexterm> zpracovává informace o citacích, které je následně možné využít
 například k sledování vývoje určitých témat v závislosti na čase nebo různé
 návaznosti dokumentů. Zabraňuje tak i zbytečnému plýtvání prostředků, když se
 vědci v různých výzkumných centrech zabývají týmž problémem. Hlavním nástrojem
 systému je autonomní vyhledávání a indexace citací (Autonomous Citation
 Indexing, ACI<indexterm><primary>ACI</primary></indexterm>).</para>

<sect2 id="sec030101">
<title>Vyhledávání dokumentů</title><para>
Systém ACI<indexterm><primary>ACI</primary></indexterm> vyhledává články prohledáváním Webu, přímo na domovských stránkách
 autorů nebo monitorováním diskusních skupin. Také je možné poskytnout systému
 dokumenty <quote>ručně</quote>. Při prohledávání Webu se využívá běžných vyhledávačů jako
 AltaVista, HotBot nebo Excite pro určení vhodných startovních bodů pro robota,
 který se při svém pohybu po síti zajímá pouze o soubory ve formátech Postscript
 a PDF. Zpracovávány jsou výhradně dokumenty obsahující reference nebo
 bibliografickou část, jinak nejsou považovány za vědecký článek.</para>
</sect2>

<sect2 id="sec030102">
<title>Analýza dokumentů</title><para>
V získaných dokumentech jsou pomocí heuristik ACI<indexterm><primary>ACI</primary></indexterm> extrahovány jednotlivé citace
 a následně analyzovány. Hledají se pole název, autor, rok vydání, počet stran a
 identifikátor citace. S využitím regulárních výrazů lze rozlišit odchylky,
 kupříkladu je-li uveden seznam autorů u citace nebo pouze první z tohoto
 seznamu.
</para><para>
Pomocí metody <emphasis>invariants first</emphasis> se systém pokouší
 převést citace do uniformní podoby. To znamená, že záznamy, které mají relativně odlišnou
 syntaxi a pozici v dokumentu, jsou zpracovávány nakonec. Jako pomocný nástroj
 využívá k identifikování jednotlivých oblastí databázi jmen autorů, článků
 atp.
</para><para>
Při analýze dokumentu se může stát, že se stejné citace vyskytnou
 vícekrát na různých místech a ukládaly by se tak duplicitní záznamy, čemuž se
 musí předejít. K rozeznání
 a seskupení identických citací používá systém ACI<indexterm><primary>ACI</primary></indexterm> následující
 čtyři skupiny metod:

<itemizedlist>
<listitem><simpara>poměřování vzdálenosti mezi řetězci s využitím algoritmu LikeIt
 od Peter N. Yianilose</simpara></listitem>
<listitem><simpara>poměřování četnosti slov založené na statistice výskytu slov
 běžných pro každý řetězec</simpara></listitem>
<listitem><simpara>znalosti o složkách a struktuře dat (u citací například jméno
 autora, název článku, rok publikování atd.)</simpara></listitem>
<listitem><simpara>pravděpodobnostní modely využívající známé bibliografické
 informace pro identifikaci slov ve struktuře citací</simpara></listitem>
</itemizedlist>
</para><para>
Normalizační algoritmy použité v systému v současné době jsou dostačující pro
 praktické využití, avšak autoři uvažují o možném zlepšení použitím metod
 strojového učení.
</para>
</sect2>

<sect2 id="sec030103">
<title>Zpracování dotazů</title><para>
ResearchIndex<indexterm><primary>ResearchIndex</primary></indexterm> může vracet seznam citací nebo indexovaných dokumentů
 odpovídajících zadanému dotazu pomocí klíčových slov. Seznamy se pak nadále
 dají procházet a přes odkazy lze zobrazit o dokumentech a citacích podrobnější
 informace. Mezi ty patří například seznam dokumentů podobných nejen podle textu ale i na úrovní vět
nebo seznam citovaných a současně i citujících článků.
Pro citace je uveden také graf zachycující počet citací v článcích v daném roce.
Mezi poskytnutými informacemi jsou mimo jiné také adresy ke zdroji, odkud daný dokument pochází, a na soubory daného dokumentu uložené v jiných formátech přímo na straně vyhledávacího systému.
</para>
</sect2>
</sect1>

<sect1 id="sec0302">
<title>HP Search</title>
<para>
HP Search<footnote id="fn030201"><para><ulink url="http://hpsearch.uni-trier.de">http://hpsearch.uni-trier.de</ulink></para></footnote>
je tematicky zaměřený informační systém pro vyhledávání a sledování osobních webových stránek uznávaných vědců, implementovaný v jazyce Java.
Domovské stránky zaujímají důležitou pozici ve vědecké komunikaci, neboť obsahují důležitá data jako například kontaktní informace, zprávy o činnosti, popisy projektů a v neposlední řadě i texty dokumentů.
</para>

<sect2 id="sec030201">
<title>Vyhledávání</title>
<para>HP Search<indexterm><primary>HP Search</primary></indexterm> se specializuje na vyhledávání v relativně malé výzkumné
 oblasti, což dovoluje nacházet stále nové a nové dokumenty. Jak ukazuje
 obrázek, dá se způsob budování vyhledávacího indexu rozdělit do tří kroků.
</para>
<figure float="1" id="obr1">
<title>Vznik indexu</title>
<mediaobject>
<imageobject><imagedata fileref="hp_search" format="PNG"/></imageobject>
</mediaobject>
</figure>
<para>

<itemizedlist>
<listitem><simpara>
V prvním kroku se získá seznam jmen lidí, kteří jsou stále aktivní ve výzkumu a
 vědecké činnosti. Jedna z cest, jak tato data získat, je prohledávat obsah
 výsledných zpráv z vědeckých konferencí nebo v časopisech a publikacích. Druhým
 zdrojem je pak DBLP server podrobněji popsaný dále. Kvalita výsledného indexu
 nejvíce závisí na takto získaném seznamu jmen vědců, a proto jsou bráni v potaz
 jen uznaní členové. Tato informace se získá z elektronických bibliografií, kde
 je pod daným jménem údaj <quote>certified</quote>.
</simpara></listitem>
<listitem><simpara>
V kroku druhém se za pomoci běžných vyhledávačů jako Alta Vista, Fast, Google,
 Excite, Hotbot, Infoseek a Northen Light získají podle údajů z již připraveného
 seznamu jmen domovské stránky. Ty jsou ohodnoceny a výsledek se uloží.
</simpara></listitem>
<listitem><simpara>
V posledním kroku se použijí nalezené domovské stránky s nejvyšším ohodnocením
 jako startovní bod pro speciální vyhledávací nástroj zvaný <indexterm><primary>Mops</primary></indexterm>Mops, jehož výstupem
 je pak konečný vyhledávací index.
</simpara></listitem>
</itemizedlist>
</para>
</sect2>

<sect2 id="sec030202">
<title>Hodnocení nalezených stránek</title>
<para>
K ohodnocení domovských stránek HP Search<indexterm><primary>HP Search</primary></indexterm> nepoužívá klasické metody jako
 rozhodovací stromy, ale vlastní algoritmus, protože posuzuje i strukturu URL,
 odkazy vedoucí k dokumentu z jiných stánek a při prvním kroku vyhledávání není
 ještě text, nad nímž by se daly tyto metody použít, dostupný.
</para>
<para>V prvním kroku HP Search<indexterm><primary>HP Search</primary></indexterm> zhodnotí získané údaje jako název stránky, URL, popis a pozici,
 na které vyhledávací systém<indexterm><primary>vyhledávací systém</primary></indexterm> adresu uvedl. Poté vybere kandidáta s nejvyšším skóre a pro něho vypočítá konečné hodnocení, k jehož stanovení použije hlavičku, odkazy, meta-tagy a samotný text dokumentu.
</para>
</sect2>
<sect2 id="sec030203">
<title>Aktualizace dat</title>
<para>
Aktuálnost dat nabízených systémem HP Search<indexterm><primary>HP Search</primary></indexterm> zajišťují dva parametricky řiditelné mechanismy, které pracují v pravidelných časových intervalech a případně jsou i volány specifickými událostmi.
</para>
<itemizedlist>
<listitem><simpara>
Vyhodnocování záznamů přístupu k DBLP
</simpara></listitem>
<listitem><simpara>
Ověřování platnosti URL
</simpara></listitem>
</itemizedlist>
<para>
Při vyhodnocování přístupových záznamů k DBLP se zjišťuje, zda někdo nezadal nové jméno, které ještě není v databázi, a nebo se prověřují jména, která se vyhledávala před delším časovým úsekem, než je nastavené maximum, a mohlo by to tak znamenat zastaralost záznamu. Tento proces probíhá denně.
</para>
<para>
Platnost URL se ověřuje jednou týdně pro každé jméno vědce z databáze pouze pro nejvíce ohodnocené stránky. Pokud je zadaná adresa neplatná, kontroluje se ještě minimálně dvakrát, než je definitivně odstraněna z databáze.
</para>
</sect2>
</sect1>
<sect1 id="sec0303">
<title>DBLP</title><para>
Server <indexterm><primary>DBLP</primary></indexterm>DBLP<footnote id="fn030301"><para><ulink url="http://www.informatik.uni-trier.de/~ley/db/index.html">http://www.informatik.uni-trier.de/~ley/db/index.html</ulink></para></footnote>
(zpočátku DataBase systems and Logic Programing nyní Digital
 Bibliography &amp; Library Project) poskytuje bibliografické informace o
 výsledcích hlavních konferencí a publikacích týkajících se počítačové vědy. Na
 tomto serveru je indexováno více než 270000 článků a k tomu
 obsahuje i zhruba 100000 odkazů na domácí stránky vědců zabývajících se
 informatikou (údaje z května 2002). Indexovány jsou články publikované nejen v elektronické formě, ale
 i ty, jež vyšly pouze v tištěné podobě.
</para>
</sect1>

<sect1 id="sec0304">
<title>Mops</title><para>
<indexterm><primary>Mops</primary></indexterm>Mops<footnote id="fn030401"><para><ulink url="http://mops.uni-trier.de">http://mops.uni-trier.de</ulink></para></footnote>
(Martin's Online Paper Search) je relativně jednoduchý <indexterm><primary>vyhledávací systém</primary></indexterm>vyhledávací systém, sestávající se ze skupiny skriptů v Perlu.
Běží zhruba 30 hodin týdně a to většinou přes víkend. Má za cíl poskytovat index z vědecky zaměřených dokumentů.
Vstupem tohoto nástroje je seznam adres, které používá jako startovní body pro svou další činnost.
</para><para>
Za úkol má hledat komprimované nebo přímo ps, dvi a pdf soubory, neboť, jak už
 jsem se v některé z předcházejících částí zmínil, vědecké dokumenty jsou
 ukládány zejména v těchto formátech. Ze startovní stránky pak následuje odkazy do
 hloubky 1 nebo 2, kde opět hledá odkazy na požadované soubory. Prohledávání takto malé oblasti, kolem předané adresy, má za následek poměrně
 vysokou rychlost.
</para><para>
Nalezené dokumenty ukládá v ASCII formátu, což následně umožňuje snadné
 vytvoření indexu. Dále se ke každému ještě uchovává datum jeho nalezení,
 posloupnost URL, které k němu vedly a jméno odkazu, které uvedl autor stránky
 jako popis. Ke stejným dokumentům ovšem mohou vést různé cesty, kupříkladu
 server, kde jsou uloženy může být dosažitelný pod více než jedním jménem. Mops<indexterm><primary>Mops</primary></indexterm>
 se snaží takovéto duplicity odstranit a zabránit jejich výskytu ve výsledném
 indexu.
</para>
</sect1>
</chapter>

</part>
<part id="II">
<title>Realizace webového portálu</title>

<chapter id="ch04">
<title>Analýza zadání a návrh systému</title><para>
Jako první krok, který jsem učinil při práci na projektu, byla analýza zadání a navržení možného řešení.
</para>
<sect1 id="sec0401">
<title>Analýza</title><para>
V první kapitole jsem se zabýval obecně rozdělením, strukturou a činností webových portálů. Webový portál<indexterm><primary>webový portál</primary></indexterm> věnovaný syntaktické analýze jazyka není nic výjimečného, co by se vymykalo tomuto obecnému popisu.
</para><para>
Jak je již z názvu patrné, jedná se o systém zaměřený na tematicky úzkou oblast, konkrétně syntaktickou analýzu přirozeného jazyka. Spadá tedy do skupiny vertikálních portálů. Bude provozován pro vědecké a výzkumné účely, nebylo tedy potřeba zabývat se implementací služeb běžných pro komerční webové portály<indexterm><primary>webový portál</primary></indexterm> jako například free-mail, chat, horoskopy, vtipy atd. Naopak bylo potřeba zabývat se návrhem služeb využitelných právě k vědeckým účelům, jako například indexace článků, zpráv z výzkumu, publikací, správa seznamu pracovníků atd.
</para><para>
Základní struktura systému se neméně liší od jiných webových portálů a byla tudíž také potřeba navrhnout a následně implementovat následující části:

<itemizedlist>
	<listitem><para>Autonomní <indexterm><primary>vyhledávací systém</primary></indexterm>vyhledávací systém, který bude na Internetu v zadané tématické oblasti pomocí seznamu klíčových slov, získávat a aktualizovat následující data:
	<itemizedlist>
		<listitem><simpara>dokumenty obsahující texty článků a informace o nich</simpara></listitem>
		<listitem><simpara>jména vědců a vědeckých pracovníků zabývajících se danou tematikou a adresy jejich domovských stránek a stránek obsahujících seznamy jejich publikací</simpara></listitem>
		<listitem><simpara>informace o vědeckých pracovištích a výzkumných centrech jako působištích daných vědců a vědeckých pracovníků</simpara></listitem>
	</itemizedlist>
	</para></listitem>
	<listitem><para>Samotné webové rozhraní, které bude zpřístupňovat zhruba tyto hlavní služby:
	<itemizedlist>
		<listitem><simpara>procházení seznamem indexovaných článků, autorů a také působišť a samozřejmě možnost zobrazení jejich základních informací</simpara></listitem>
		<listitem><simpara>fulltextové prohledávaní v uložených dokumentech</simpara></listitem>
		<listitem><simpara>dodatečné přidávání komentářů k článkům</simpara></listitem>
		<listitem><simpara>zobrazení seznamu citací a podobností u článků</simpara></listitem>
		<listitem><simpara>u každého autora možnost upravit či doplnit údaje jako URL domácí stránky, URL stránky obsahující seznam publikací (pokud se takový seznam na zadané osobní stránce nenachází)</simpara></listitem>
	</itemizedlist>
	</para></listitem>
</itemizedlist>

</para><para>
Z analýzy vyplynulo, že je potřeba navrhnout a implementovat dva nezávisle pracující sub-systémy. V rámci tohoto projektu bylo mým úkolem implementovat pouze první z nich. Proto se budu dále zabývat návrhem a postupem při implementaci pouze prvního systému a to autonomního v uvozovkách robota starajícího se o vyhledávání a následné získávání relevantních vědeckých dokumentů a dalších s nimi souvisejících informací.
</para>
</sect1>

<sect1 id="sec0402">
<title>Návrh vyhledávacího systému</title><para>
Mezi základními požadavky na vyhledávací nástroj byla snadná ovladatelnost, průhlednost a možnost kontrolovat jeho činnost. Z těchto důvodů jsem se rozhodl sestavit vyhledávací systém<indexterm><primary>vyhledávací systém</primary></indexterm> ze tří nezávislých sub-systémů, kde se každý bude starat o své pole působnosti. Jednotlivé sub-systémy popisují následující stavové diagramy.
</para>
<sect2 id="sec040201">
<title>Sub-systém FindNew</title>
<figure float="0" id="obr2">
<title>Stavový diagram sub-systému FindNew</title>
<mediaobject>
<imageobject>
<imagedata fileref="find_new" format="PNG"/>
</imageobject>
</mediaobject>
</figure>
<para>
Aplikace FindNew<indexterm><primary>FindNew</primary></indexterm> si nejprve v prvním (startovním) bodě vyžádá od ResearchIndexu<indexterm><primary>ResearchIndex</primary></indexterm> pod zadanými klíčovými slovy seznam článků. V jednom dotazu jich ResearchIndex<indexterm><primary>ResearchIndex</primary></indexterm> nabízí maximálně 50. Pro každý článek zjistí, zda je již indexován. Pokud ne podívá se na stránku obsahující informace o daném článku, analyzuje ji a získané údaje uloží do databáze. Tento krok opakuje pro všechny články v seznamu dokud nedojde na konec. Poté se vrací do počátečního bodu a vše opakuje pro další obdržený seznam. Činnost tohoto sub-systému končí v případě, že již ResearchIndex<indexterm><primary>ResearchIndex</primary></indexterm> nenabízí žádný článek.
</para>
</sect2>
<sect2 id="sec040202">
<title>Sub-systém ArticleDownload</title>
<figure float="0" id="obr3">
<title>Stavový diagram sub-systému ArticleDownload</title>
<mediaobject>
<imageobject>
<imagedata fileref="article_download" format="PNG"/>
</imageobject>
</mediaobject>
</figure>
<para>
V prvním kroku vezme sub-systém ArticleDownload<indexterm><primary>ArticleDownload</primary></indexterm> z databáze informace o článku a podívá se,
zda už je uložen ps nebo pdf soubor pod id daného článku. V případě že není, pokusí se získat požadovaný soubor v patřičném formátu z adresy uložené v databázi,
kam ji uložil předchozí skript v průběhu své činnosti. Pokud se mu nepodaří soubor uložit, podívá se do vyrovnávací paměti na straně serveru ResearchIndexu<indexterm><primary>ResearchIndex</primary></indexterm>
a snaží se dokument získat tam. Aplikace opakuje celý děj vždy od prvního kroku pro každý článek až do doby, kdy už není na řadě v databázi žádný článek a ukončí proto svou činnost.
</para>
</sect2>
<sect2 id="sec040203">
<title>Sub-systém AuthorSearch</title>
<figure float="0" id="obr4">
<title>Stavový diagram sub-systému AuthorSearch</title>
<mediaobject>
<imageobject>
<imagedata fileref="author_search" format="PNG"/>
</imageobject>
</mediaobject>
</figure>
<para>
V počátečním bodě si sub-systém AuthorSearch<indexterm><primary>AuthorSearch</primary></indexterm> vyžádá z databáze informace o autorovi. V případě, že není známo URL a přitom jsme ho ještě nehledali, pokusí se vyhledat s využitím služeb vyhledávacího systému HP Search<indexterm><primary>HP Search</primary></indexterm> adresu domovské stránky. Pokud ani po tomto kroku stále neznáme požadované URL, vrátí se zpět do počátečního bodu. Jinak analyzuje domovskou stránku a snaží se najít odkaz na seznam publikací, není-li takový seznam součástí dané stránky. Zároveň se také pokouší najít nějaké základní informace o působišti, jako třeba název nebo adresa. Dále pokračuje stejným způsobem opět od počátečního kroku dokud není seznam autorů vyčerpán.
</para>
</sect2>
</sect1>

<sect1 id="sec0403">
<title>Datový model</title><para>
Abych zajistil správnou funkčnost systému, navrhl jsem datový model<indexterm><primary>datový model</primary></indexterm>. Nejprve jsem identifikoval jednotlivé entity a určil vazby mezi nimi (tzv. mřížku). Po sestavení modelu univerzální relace jsem doplnil kardinality a parciality. Výsledek ukazuje diagram na následujícím obrázku a pod ním popis jednotlivých entit a atributů.
</para>
<figure float="0" id="obr6">
<title>Výsledný ERA diagram</title>
<mediaobject>
<imageobject>
<imagedata fileref="dm" format="PNG"/>
</imageobject>
</mediaobject>
</figure>
<para>V tomto konkrétním případě lze jednotlivé entity reprezentovat tabulkou v relační databázi a jejich atributy pak jako jednotlivé sloupce dané tabulky.
</para>
<sect2 id="sec040301">
<title>Tabulka article</title><para>
Tabulka article<indexterm><primary>article</primary></indexterm> je určena k ukládání následujících informací o jednotlivých článcích:
</para>
<variablelist>
<varlistentry>
<term>id</term><listitem><simpara>jednoznačný identifikátor daného článku</simpara></listitem>
</varlistentry>
<varlistentry>
<term>title</term><listitem><simpara>název daného článku</simpara></listitem>
</varlistentry>
<varlistentry>
<term>year</term><listitem><simpara>rok vydání daného článku</simpara></listitem>
</varlistentry>
<varlistentry>
<term>abstract</term><listitem><para>shrnutí daného článku</para></listitem>
</varlistentry>
<varlistentry>
<term>bibtex</term><listitem><simpara>bibliografický záznam o daném článku</simpara></listitem>
</varlistentry>
<varlistentry>
<term>URL</term><listitem><simpara>adresa odkud byl nebo teprve bude stažen ps nebo pdf soubor, který obsahuje samotný text daného článku.</simpara></listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2 id="sec040302">
<title>Tabulka citation</title><para>
Tabulka citation<indexterm><primary>citation</primary></indexterm> slouží jako vazební tabulka mezi různými řádky tabulky article. Tento vztah popisují následující sloupce:
</para>
<variablelist>
<varlistentry>
<term>article</term><listitem><simpara>id článku, který je citován článkem, který má id shodné s citation.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>citation</term><listitem><simpara>id článku, který cituje článek, který má id shodné s article.</simpara></listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2 id="sec040303">
<title>Tabulka similar</title><para>
Tabulka similar<indexterm><primary>similar</primary></indexterm> slouží jako vazební tabulka mezi různými řádky tabulky article. Tento vztah popisují následující sloupce:
</para>
<variablelist>
<varlistentry>
<term>article</term><listitem><simpara>id článku, který je podobný s článkem, který má id shodné se similar.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>similar</term><listitem><simpara>id článku, který je podobný s článkem, který má id shodné s article.</simpara></listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2 id="sec040304">
<title>Tabulka author</title><para>
Tabulka author<indexterm><primary>author</primary></indexterm> je určena k ukládání následujících informací o jednotlivých autorech:
</para>
<variablelist>
<varlistentry>
<term>id</term><listitem><simpara>jednoznačný identifikátor daného autora</simpara></listitem>
</varlistentry>
<varlistentry>
<term>name</term><listitem><simpara>jméno daného autora</simpara></listitem>
</varlistentry>
<varlistentry>
<term>URL</term><listitem><simpara>adresa domovské stránky daného autora</simpara></listitem>
</varlistentry>
<varlistentry>
<term>publications</term><listitem><simpara>adresa stránky obsahující seznam publikací</simpara></listitem>
</varlistentry>
<varlistentry>
<term>state</term><listitem><simpara>stavový atribut.</simpara></listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2 id="sec040305">
<title>Tabulka article_author</title><para>
Tabulka article_author<indexterm><primary>article_author</primary></indexterm> slouží jako vazební tabulka
mezi různými řádky tabulky article<indexterm><primary>article</primary></indexterm> a řádky tabulky <indexterm><primary>author</primary></indexterm>author.
Tento vztah popisují následující sloupce:
</para>
<variablelist>
<varlistentry>
<term>article</term><listitem><simpara>identifikátor řádku v tabulce article</simpara></listitem>
</varlistentry>
<varlistentry>
<term>author</term><listitem><simpara>identifikátor řádku v tabulce author.</simpara></listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2 id="sec040306">
<title>Tabulka affiliation</title><para>
Tabulka affiliation<indexterm><primary>affiliation</primary></indexterm> je určena k ukládání následujících informací o jednotlivých působištích:
</para>
<variablelist>
<varlistentry>
<term>id</term><listitem><simpara>jednoznačný identifikátor daného působiště</simpara></listitem>
</varlistentry>
<varlistentry>
<term>name</term><listitem><simpara>název daného působiště</simpara></listitem>
</varlistentry>
<varlistentry>
<term>address</term><listitem><simpara>adresa daného působiště</simpara></listitem>
</varlistentry>
<varlistentry>
<term>URL</term><listitem><simpara>webová stránka daného působiště</simpara></listitem>
</varlistentry>
<varlistentry>
<term>state</term><listitem><simpara>stavový atribut.</simpara></listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2 id="sec040307">
<title>Tabulka author_affiliation</title><para>
Tabulka author_affiliation<indexterm><primary>author_affiliation</primary></indexterm> slouží jako vazební tabulka
mezi různými řádky tabulky author<indexterm><primary>author</primary></indexterm> a řádky tabulky <indexterm><primary>affiliation</primary></indexterm>affiliation.
Tento vztah popisují následující sloupce:
</para>
<variablelist>
<varlistentry>
<term>author</term><listitem><simpara>identifikátor řádku v tabulce author</simpara></listitem>
</varlistentry>
<varlistentry>
<term>affiliation</term><listitem><simpara>identifikátor řádku v tabulce affiliation.</simpara></listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>
</chapter>

<chapter id="ch05">
<title>Implementace vyhledávacího systému</title><para>
Po vytvoření prvních návrhů stavových diagramů a datového modelu jsem se začal zabývat samotnou implementací vyhledávacího systému. Zjistil jsem, že bude nutné analyzovat webové stránky a že k tomu je vhodné využít regulárních výrazů. Jelikož už jsem měl drobné zkušenosti se skriptovacím jazykem <indexterm><primary>PHP</primary></indexterm>PHP, který také umožňuje pracovat právě s regulárními výrazy, zvolil jsem ho jako prostředek k implementaci samotného vyhledávacího systému.
</para><para>
Pro úplnost dodávám, že všechny skripty, které jsou součástí systému, lze nalézt na internetové adrese <ulink url="http://nlp.fi.muni.cz/projekty/parsing_portal">http://nlp.fi.muni.cz/projekty/parsing_portal</ulink>.
</para>
<sect1 id="sec0501">
<title>Jednotlivé skripty</title><para>
</para>
<sect2 id="sec050101">
<title>FindNew</title><para>
Skript FindNew<indexterm><primary>FindNew</primary></indexterm> vyhledává nové články a s nimi související informace. K tomu využívá služeb vyhledávacího systému ResearchIndex<indexterm><primary>ResearchIndex</primary></indexterm> popsaného podrobněji ve třetí kapitole.
</para><para>
Při implementaci tohoto skriptu jsem narazil na velice závažný problém.
Jednalo se, v tomto případě, o nemilé omezení skriptovacího jazyka PHP<indexterm><primary>PHP</primary></indexterm> týkající se maximálního času určeného pro běh skriptu. Skript totiž nikdy nestihl během této doby získat a zanalyzovat všechny informace nabídnuté ResearchIndexem<indexterm><primary>ResearchIndex</primary></indexterm> a následně je uložit. Nejvíce časově náročné bylo vždy stáhnutí požadovaného dokumentu z Internetu. Problém se mi podařilo naštěstí úspěšně vyřešit.
</para><para>
Zvolil jsem takový postup, při kterém se v jednom volání skriptu analyzuje omezený počet stránek získaných od <indexterm><primary>ResearchIndex</primary></indexterm>ResearchIndexu.
Po ukončení činnosti zavolá skript sám sebe s jinými parametry odkazujícími na další skupinu článků.
Aby bylo ale možné odeslat hlavičky určené k opětovnému spuštění skriptu, nemohl jsem vypisovat na výstup žádný text a informovat tak uživatele o činnosti,
kterou skript vykonává. To mě vedlo k vytvoření třídy <indexterm><primary>Log</primary></indexterm>Log, která zaznamenává potřebné údaje o činnosti do speciálního souboru.
Jak se ukázalo později, bylo toto řešení potřebné i v dalších skriptech, kde nastávaly obdobné potíže. Po ukončení činnosti skriptu se vypíší ze záznamového souboru na stránku nejdůležitější údaje jako například,
o kterých článcích byly informace uloženy do databáze a o kterých již máme záznam, jak dlouho skript pracoval a případně kde vznikla jaká chyba.
</para>
</sect2>
<sect2 id="sec050102">
<title>ArticleDownload</title><para>
Skript ArticleDownload<indexterm><primary>ArticleDownload</primary></indexterm> vyhledává postupně pro každý článek PostScriptový nebo PDF soubor s jeho přesným zněním. Nejprve hledá na adrese získané od <indexterm><primary>ResearchIndex</primary></indexterm>ResearchIndexu. Pokud se mu podaří daný soubor najít stáhne ho a uloží na disk. V případě že se mu to nepodaří, hledá ještě ve vyrovnávací paměti přímo na serveru <indexterm><primary>ResearchIndex</primary></indexterm>ResearchIndexu.
</para>
</sect2>
<sect2 id="sec040103">
<title>AuthorSearch</title><para>
Skript AuthorSearch<indexterm><primary>AuthorSearch</primary></indexterm> dohledává chybějící informace o autorech článku. Mezi tyto chybějící informace může patřit URL domovské stránky nebo URL seznamu publikací a název působiště.
</para><para>
Rozpoznat správně na domácích stránkách autorů název jejich působiště je opravdu veliký problém. Každá stránka je jinak koncipována a najít a implementovat tak nějaký obecný mechanismus, podle kterého by se dalo postupovat při analýze daných stránek, je již nad rámec tohoto projektu. Mohlo by to být kupříkladu vhodné téma pro další bakalářský projekt.
</para><para>
Prozatím pracuje skript pouze s jednoduchou technikou, kdy zjišťuje informace o působišti pomocí URL domácí stránky autora. Vezme základ URL jako adresu působiště daného autora a tam se případně snaží najít záznamy obsahující název a fyzickou adresu daného působiště.
</para>
</sect2>
</sect1>

<sect1 id="sec0502">
<title>Použité třídy</title><para>
Pro zpřehlednění výsledného systému a usnadnění práce možností použít stejný kód ve více skriptech jsem se rozhodl využít technik objektově orientovaného programování. Tato technika víceméně věrně napodobuje způsob, jakým zacházíme s předměty reálného světa, a proto mi také umožnila lépe nahlížet na řešené problémy. Další vlastností, která mě k této volbě vedla, bylo zapouzdření objektů. Rázem mi tak ve skriptovacím jazyce <indexterm><primary>PHP</primary></indexterm>PHP, kterého jsem pro implementaci použil, odpadla nepohodlná práce s globálními proměnnými a celkově mi to usnadnilo práci s daty.
</para><para>
V následujícím výčtu se pokusím charakterizovat všechny třídy, které jsem postupně implementoval pro využití v hlavních skriptech.
</para>
<sect2 id="sec050201">
<title>MySql</title><para>
Třída MySql<indexterm><primary>MySQL</primary></indexterm> je navržena tak, aby zjednodušila komunikaci s MySQL serverem. Zavoláním konstruktoru s příslušnými parametry se vytvoří perzistentní spojení s MySQL serverem. Vzniklé chyby se vždy zpracovávají pomocí instance třídy Chyba, na kterou se předal odkaz při volání konstruktoru.
Následuje výčet nejdůležitějších metod:
<variablelist>
<varlistentry>
<term>Query</term><listitem><simpara>Provede dotaz nad předem specifikovanou databází.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>GetData</term><listitem><simpara>Výstupem je asociativní pole obsahující všechna data předaná MySQL serverem po položení dotazu.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>GetLastId</term><listitem><simpara>Vrací hodnotu identifikátoru naposled vloženého záznamu do tabulky se sloupcem typu <emphasis>auto_increment</emphasis>.</simpara></listitem>
</varlistentry>
</variablelist>
</para>
</sect2>
<sect2 id="sec050202">
<title>Log</title><para>
Třída Log<indexterm><primary>Log</primary></indexterm> je určena ke správě záznamů o činnosti (tzv. log souborů) jednotlivých skriptů. K vytvoření jednotky obsahující tuto třídu mě vedla nutnost umožnit navázání činnosti skriptu v bodě posledního přerušení po občasných výpadcích vyhledávacích serverů, například v případech kdy byly přetíženy.
Následuje výčet nejdůležitějších metod:
<variablelist>
<varlistentry>
<term>Start</term><listitem><simpara>Zjistí, zda při předchozím spuštění skriptu nedošlo k přerušení. Pokud ano najde řádek s popisem chyby a identifikátor posledního kroku, který se dá poté použít pro navázání přerušené činnosti.
Proto se volá se na začátku skriptu.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>Finish</term><listitem><simpara>Volá se při úspěšném ukončení skriptu, aby se zapsala do záznamového souboru patřičná informace a aby se při opětovném spuštění skriptu začalo opět od začátku.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>AnalyzeResult</term><listitem><simpara>Přečte záznamový soubor a analyzuje ho. Získané informace uloží do pole seznam, kde se již mohou dále zpracovávat.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>SaveRecord</term><listitem><simpara>Uloží do záznamového souboru informace v patřičném formátu, aby je bylo možné následně analyzovat.</simpara></listitem>
</varlistentry>
</variablelist>
</para>
</sect2>
<sect2 id="sec050203">
<title>Clanek</title><para>
Třída Clanek<indexterm><primary>Clanek</primary></indexterm> je jedna z klíčových. Slouží jako kontejner pro data popisující daný článek. Jsou zde definovány veškeré operace nad entitou <emphasis>article</emphasis>.
Podrobněji jsou popsány v následujícím výčtu nejdůležitějších metod:
<variablelist>
<varlistentry>
<term>Parse</term><listitem><simpara>Analyzuje HTML stránku obsahující informace o článku, jehož jasný identifikátor je zadán při volání konstruktoru této třídy.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>CompleteAuthors</term><listitem><simpara>Zjistí pro každého autora článku, zda se nachází v databázi. V případě, že nenachází, uloží údaje, které zná (jméno získané z informací o článku) do příslušných tabulek.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>Find</term><listitem><simpara>Zjistí, zda je daný článek uložen v databázi.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>Load</term><listitem><simpara>Načte potřebné informace o článku z databáze.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>Save</term><listitem><simpara>Uloží všechny informace o článku do databáze.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>Update</term><listitem><simpara>Aktualizuje všechny informace o článku v databázi.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>CheckFile</term><listitem><simpara>Zjistí, zda je uloženo pro daný článek jeho znění ve formě ps nebo pdf souboru.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>SaveFile</term><listitem><simpara>Snaží se z Webu získat ps nebo pdf soubor se zněním daného článku. Nejprve hledá pod adresou získanou z ResearchIndexu<indexterm><primary>ResearchIndex</primary></indexterm> jako původní zdroj. Pokud se to z nějakého důvodu nepodaří, má za úkol, zkusit štěstí přímo ve vyrovnávací paměti na serveru <indexterm><primary>ResearchIndex</primary></indexterm>ResearchIndexu.</simpara></listitem>
</varlistentry>
</variablelist>
</para>
</sect2>
<sect2 id="sec050204">
<title>Autor</title><para>
Třída Autor<indexterm><primary>Autor</primary></indexterm> slouží opět jako kontejner, tentokrát však pro data popisující daného autora. Jsou zde definovány veškeré operace nad entitou <emphasis>author</emphasis>.
Podrobněji jsou popsány v následujícím výčtu nejdůležitějších metod:
<variablelist>
<varlistentry>
<term>Parse</term><listitem><simpara>Analyzuje domácí stránku daného autora a snaží se na ní objevit odkaz na stránku obsahující seznam publikací a informace o jeho působišti.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>CompleteAffiliations</term><listitem><simpara>Zjistí, zda již existuje záznam o působišti daného autora v databázi. V případě, že neexistuje, uloží informace, které zná do databáze.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>Find</term><listitem><simpara>Zjistí, zda je daný autor uložen v databázi.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>Load</term><listitem><simpara>Načte potřebné informace o daném autorovi z databáze.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>Save</term><listitem><simpara>Uloží všechny informace o daném autorovi do databáze.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>Update</term><listitem><simpara>Aktualizuje všechny informace o daném autorovi v databázi.</simpara></listitem>
</varlistentry>
</variablelist>
</para>

</sect2>
<sect2 id="sec050205">
<title>Affiliation</title><para>
Třída Affiliation<indexterm><primary>Affiliation</primary></indexterm> slouží jako kontejner pro data popisující dané působiště. Jsou zde definovány veškeré operace nad entitou <emphasis>affiliation</emphasis>.
Podrobněji jsou popsány v následujícím výčtu nejdůležitějších metod:
<variablelist>
<varlistentry>
<term>Parse</term><listitem><simpara>Analyzuje domácí stránku daného působiště a snaží se na ní objevit název působiště a jeho adresu.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>Find</term><listitem><simpara>Zjistí, zda je dané působiště uloženo v databázi.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>Load</term><listitem><simpara>Načte potřebné informace o daném působišti z databáze.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>Save</term><listitem><simpara>Uloží všechny informace o daném působišti do databáze.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>Update</term><listitem><simpara>Aktualizuje všechny informace o daném působišti v databázi.</simpara></listitem>
</varlistentry>
</variablelist>
</para>
</sect2>

<sect2 id="sec050206">
<title>Chyba</title><para>
Třída Chyba<indexterm><primary>Chyba</primary></indexterm> se využívá prakticky ve všech ostatních třídách a je určena ke zpracování vzniklých chyb,
sestavení chybové hlášky a její vypsaní na výstup případně s využitím třídy <indexterm><primary>Log</primary></indexterm>Log do záznamového souboru.
Následuje výčet nejdůležitějších metod:
<variablelist>

<varlistentry>
<term>Set</term><listitem><simpara>Nastaví identifikátor vzniklé chyby, uloží čas jejího vzniku a upraví znění chybové hlášky.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>Get</term><listitem><simpara>Vrací identifikátor posledně vzniklé chyby. Dá se použít při ověřování, zda vznikla nějaká chyba v předešlých krocích běhu skriptu.</simpara></listitem>
</varlistentry>
</variablelist>
</para>
</sect2>
</sect1>
</chapter>

<chapter id="ch06">
<title>Výsledky a zhodnocení</title><para>
Úkolem testování bylo ověřit funkčnost vyhledávacího systému a zhodnotit kvalitu získaných dat.
Nejprve jsem pomocí jednotlivých skriptů získal potřebná data a ověřil tak úspěšnost při jejich činnosti.
Poté jsem manuálně posuzoval kvalitu získaných dat. Tento posudek jsem ovšem provedl pouze nad omezeným vzorkem dat,
neboť jak se ukázalo, jednotlivé skripty získaly až tisíce záznamů a jejich manuální procházení je abnormálně časově náročný proces.
</para>

<sect1 id="ch0601">
<title>Test činnosti jednotlivých sub-systémů</title>
<sect2 id="ch060101">
<title>FindNew</title><para>
Pro vyhledání nových článků jsem zadal jako vstup skriptu FindNew<indexterm><primary>FindNew</primary></indexterm> následující klíčová klíčová slova ve tvaru:
<programlisting>parsing OR parse.</programlisting>
</para><para>
Skript FindNew uložil do databáze informace o 1072 článcích. Po manuální kontrole, kolik jich ve skutečnosti ResearchIndex<indexterm><primary>ResearchIndex</primary></indexterm> nabídl,
jsem zjistil, že je to pouze osmina ze všech nalezených. Důvod, proč se nepodařilo získat informace i o dalších článcích, byl ovšem na straně <indexterm><primary>ResearchIndex</primary></indexterm>ResearchIndexu,
neboť ten je neustále vytížen a nabízí tak z vyhledaných záznamů pouze omezené množství. Kolikrát se mi například během ladění skriptu stávalo,
že nabídl ResearchIndex jen stovku z celkem šesti tisíc nalezených záznamů a na další už se nebylo možné dostat.
</para><para>
K těmto 1072 záznamům s informacemi o jednotlivých článcích bylo uloženo do databáze dalších 1780 záznamů s informacemi o jejich autorech.
Dále bylo zapsáno 3021 záznamů o citacích a 4286 záznamů o podobnosti jednotlivých článků.
</para><para>
Z těchto údajů lze vyvodit různé statistické závěry jako například to, že na jeden článek připadají přibližně dva autoři
nebo že jeden článek je citován průměrně ve třech dalších článcích a je podobný se čtyřmi dalšími články.
</para>
</sect2>
<sect2 id="ch060102">
<title>ArticleDownload</title><para>
Před spuštěním skriptu ArticleDownload<indexterm><primary>ArticleDownload</primary></indexterm> už není potřeba zadávat žádný vstup.
Tento skript pracuje samostatně nad záznamy uloženými v databázi, proto již popíši pouze dosažené výsledky.
</para><para>
Po spuštění se tomuto sub-systému podařilo k 1072 uloženým záznamům s informacemi o článcích získat 837 ps nebo pdf souborů,
kde by měl být samotný text jednotlivých článků. PostScriptových souborů bylo 523 a ve formátu pdf jich bylo zbylých 314.
</para><para>
Abych zjistil, do jaké míry jsou stažené soubory použitelné pro fulltextové vyhledávání, převedl jsem je pomocí programů <envar>ps2ascii</envar><indexterm><primary>ps2ascii</primary></indexterm>
a <envar>pdftotext</envar><indexterm><primary>pdftotext</primary></indexterm> do souborů obsahujících holý text. Po podrobnějším prozkoumání
jsem zjistil, že z celkem 523 PostScriptových souborů bylo 261 převedeno v pořádku. Pro dalších 261 souborů hlásil program ps2ascii buď jednu z chyb <emphasis>undefined in ch-xoff</emphasis> a
<emphasis>stackunderflow in dup</emphasis> nebo byly v textovém souboru jen tečky. Takové soubory obsahovaly obrázky nebo byly příliš veliké,
ale zobrazit se daly například pomocí programu Gnome GhostView 1.1.93 bez problému. Zbylý jeden případ se nepodařilo převést, protože nebyl soubor ve formátu PostScript.
Co se týče pdf souborů, bylo z celkem 314 převedeno v pořádku 303 souborů do holého textu a zbylých 11 se nepovedlo převést, protože nebyly ve formátu pdf.
</para>
</sect2>
<sect2 id="ch060103">
<title>AuthorSearch</title><para>
Ke spuštění skriptu AuthorSearch<indexterm><primary>AuthorSearch</primary></indexterm> také není potřeba zadávat žádný vstup,
neboť opět pracuje samostatně nad záznamy uloženými v databázi a popíši tedy pouze dosažené výsledky.
</para><para>
Po spuštění tento sub-systému našel u 472 autorů z celkem 1780 adresu domovské stránky.
Z množiny autorů, u kterých se podařilo zjistit URL jejich domovské stránky, zjistil skript pouze pro 118 autorů adresu webové stránky obsahující seznam publikací.
Dále se díky této množině autorů podařilo zjistit informace o 295 působištích.
</para><para>
URL stránky se seznamem publikací se nepodařilo najít v případech, kdy nebyl odkaz na seznam publikací na domovské stránce autora
nebo tam byl, a pak nastaly dvě možnosti, při kterých byl skript neúspěšný.
Buď název odkazu nespadal do množiny výrazů pod, kterými se hledá, anebo byl název odkazu identifikován ale adresa samotného odkazu už ne.
Pro ilustraci druhého případu uvádím příklad zdrojového kódu stránky<footnote id="fn060103"><para><ulink url="http://www.imc.pi.cnr.it/~codenotti">http://www.imc.pi.cnr.it/~codenotti</ulink></para></footnote>,
kde daná situace nastala:
<!-- http://www.imc.pi.cnr.it/~codenotti/ -->
<programlisting><![CDATA[<td ALIGN=CENTER>
<br>
<a href="publ.html"> <font SIZE=4>
<HREF=http://www.imc.pi.cnr.it/~codenotti/publ.html/> Publications
</a></font><br>
</td></tr>]]></programlisting>
</para><para>
Jak je vidět z tohoto příkladu, naráží občas skript při své činnosti i na webové stránky, kde nejsou jednotlivé tagy správně vnořeny
nebo neodpovídají specifikaci formátu HTML. Aby byl skript dokonalejší, je potřeba implementovat i rozpoznávání takovýchto případů.
</para><para>
Pro zhodnocení kvality uložených informací o působištích jsem vybral vzorek s 40 náhodně vybranými zástupci z celkem 295 záznamů.
Z tohoto vzorku mělo 8 působišť špatný název. Názvy obsahovaly například jméno vyhledávacího serveru, jméno serveru provozujícího domovské stránky,
adresa serveru nebo uvítací zpráva programu Apache.
</para>
</sect2>
</sect1>

<sect1 id="ch0602">
<title>Shrnutí výsledků testování a návrh na další řešení</title><para>
Nyní u každého sub-systému postupně shrnu jeho dosažené výsledky, popíši nedostatky a pokusím se navrhnout možná řešení těchto nedostatků.
</para><para>
Skript FindNew<indexterm><primary>FindNew</primary></indexterm> získal jen osminu ze všech článků, ve kterých ResearchIndex<indexterm><primary>ResearchIndex</primary></indexterm> našel odpovídající klíčová slova.
Pokud se ovšem k těm dalším nebylo možné dostat ani manuální cestou, dá se říci, že sub-systém FindNew<indexterm><primary>FindNew</primary></indexterm>
dosáhl výborných výsledků.
</para><para>
Pro sub-systém FindNew<indexterm><primary>FindNew</primary></indexterm> by bylo dobré vymyslet způsob, jak se dostat k dalším informacím o článcích, které už ResearchIndex<indexterm><primary>ResearchIndex</primary></indexterm>
nechce z důvodu velkého vytížení systému poskytnout. Nejsem si ovšem jist, je-li to vůbec možné.
</para><para>
Skript ArticleDownload<indexterm><primary>ArticleDownload</primary></indexterm> uložil soubory s textem zhruba ke čtyřem pětinám ze všech článků. Z těchto souborů se pak podařila správně převést do holého textu
pouze polovina. Velkou slabinou sub-systému ArticleDownload je jeho neschopnost rozpoznat i jiné formáty než PostScript a pdf. Jednu pětinu článků
se nepodařilo získat právě z tohoto důvodu. Zpravidla byly soubory obsahující text těchto článků nějakým způsobem komprimovány.
</para><para>
Do sub-systému ArticleDownload<indexterm><primary>ArticleDownload</primary></indexterm> by bylo vhodné integrovat metody, které by umožnili získat text i z jiných formátů než PostScript a pdf.
Také by se mohly vyzkoušet i jiné programy pro převod PostScriptových souborů do textu, neboť ps2ascii<indexterm><primary>ps2ascii</primary></indexterm> v tomto případě nedosáhl moc dobrých výsledků.
</para><para>
A nakonec skript AuthorSearch<indexterm><primary>AuthorSearch</primary></indexterm> zjistil URL domovské stránky přibližně u jedné čtvrtiny z celkového počtu autorů.
V případě, že byla u autora zjištěna adresa domovské stránky, našel skript na této stránce odkaz na seznam publikací až na výjimky vždy.
Co se týče působišť, byly zjištěné informace o názvu správně zhruba ve čtyřech pětinách. Největším nedostatkem tohoto sub-systému
je vyhledávání adres domovských stránek autorů.
</para><para>
Sub-systém AuthorSearch<indexterm><primary>AuthorSearh</primary></indexterm> se stará jak o dohledávání informací k autorům tak i k působištím. Pro zlepšení přehlednosti a kontrolovatelnosti
by mohl zjišťovat informace o působištích další nezávislý sub-systém. Za účelem zlepšit výsledky, kterých skript AuthorSearch dosahuje při hledání URL
domovské stránky autora, by bylo do budoucna potřeba navrhnout metodu jak rozpoznat ve výsledcích, jež HP Search<indexterm><primary>HP Search</primary></indexterm> nabízí,
který záznam patří autorovi, o kterého se zajímáme.
</para>
</sect1>
</chapter>

<chapter id="ch07">
<title>Závěr</title><para>
V rámci projektu se mi podařilo navrhnout a následně implementovat <indexterm><primary>vyhledávací systém</primary></indexterm>vyhledávací systém,
který lze následně využít k plnění informačních zdrojů vhodných pro činnost webového portálu věnovaného syntaktické analýze přirozeného jazyka.
Pomocí tohoto vyhledávače jsem získal informace přibližně o tisíci článcích týkajících se dané problematiky a
k tomu také informace o autorech těchto článků a o působištích jednotlivých autorů.
Zbývá tedy ještě vytvořit patřičné webové rozhraní, pomocí kterého se bude moci se získanými daty pracovat.
</para><para>
Při vývoji vyhledávacího systému jsem narazil na několik velkých problémů, jejichž výskyt byl podmíněn použitím skriptovacího jazyka <indexterm><primary>PHP</primary></indexterm>PHP.
Ve zpětném pohledu přemýšlím nad tím, zda by se spousta z nich objevila v případě, že bych použil jiného skriptovacího jazyka
jako například Perl nebo přímo některého programovacího jazyka jako C++ nebo Java.
</para><para>
Doufám, že bude tato práce ponaučením pro další zájemce, kteří by rádi implementovali vyhledávací systémy a chtěli k tomu použít pouze skriptovacího jazyka PHP.
</para>
</chapter>

</part>

<appendix id="apA">
<title>Instalace</title><para>
</para>
<sect1 id="secA01">
<title>Požadavky pro používání systému</title><para>
Celý systém byl vyvinut pod operačním systémem Debian Linux, ale fungovat by měl i na jiných platformách Unixu a také pod operačním systémem Windows, neboť je založený na platformě nezávislých technologiích. Na následujících řádcích bude vyjmenováno, co všechno je potřeba mít na počítači nainstalováno, aby byl systém funkční:
<itemizedlist>
<listitem><simpara>
je nutné mít interpret PHP<indexterm><primary>PHP</primary></indexterm> skriptů<footnote id="fn060101"><para><ulink url="http://www.php.net">http://www.php.net</ulink></para></footnote> (verze 4.06 a vyšší).</simpara>
</listitem><listitem><simpara>
dalším důležitým prvkem je databáze. Zde byla použita volně šířená databáze MySQL<footnote id="fn060102"><para><ulink url="http://www.mysql.com">http://www.mysql.com</ulink></para></footnote>.</simpara>
</listitem><listitem><simpara>
pro spouštění jednotlivých skriptů přes Webové rozhraní je požadavkem mít na počítači zprovozněný WWW server. Využít se dá například volně šířený Apache<footnote id="fn060104"><para><ulink url="http://www.apache.org">http://www.apache.org</ulink></para></footnote>.</simpara>
</listitem>
</itemizedlist>
</para>
</sect1>
<sect1 id="secA02">
<title>Adresářová struktura</title><para>
Instalace systému je jednoduchá. Po uživateli je vyžadována pouze základní znalost operačního systému, na kterém chce danou aplikaci provozovat.
</para><para>
Systém je distribuován jako jeden soubor zkomprimovaný programem zip. Po jeho rozbalení se vytvoří jednoduchá adresářová struktura, kde jednotlivé složky mají následující význam:
<variablelist>
<varlistentry>
<term>inc</term><listitem><simpara>Obsahuje soubor konfig.php, kde jsou definovány všechny konstanty používané v ostatních skriptech. Bližší popis najdete v části Konfigurace systému.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>lib</term><listitem><simpara>Zde jsou knihovny všech výše popsaných tříd.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>log</term><listitem><simpara>Je určen k ukládání záznamů o průběhu činnosti jednotlivých skriptů.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>ps</term><listitem><simpara>Sem se ukládají získané soubory ve formátu ps nebo případně pdf, pokud se PostScript nepodaří najít či stáhnout.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>txt</term><listitem><simpara>Tento adresář je určen pro holé texty článků extrahované z ps nebo pdf souborů z předešlého adresáře. Bude se využívat pro budoucí fulltextové vyhledávání.</simpara></listitem>
</varlistentry>
</variablelist>
</para><para>
Bude-li systém provozován na počítači s operačním systémem, kde lze přidělovat přístupová práva, je nutné u adresářů log, ps a txt nastavit práva pro zápis.
</para>
</sect1>

<sect1 id="secA03">
<title>Vytvoření databáze</title><para>
Prvním krokem je vytvoření uživatele v MySQL<indexterm><primary>MySQL</primary></indexterm> a nastavení jeho hesla. Přihlásíte se jako administrátor do <envar>mysql</envar> a zadáte příkaz:
<programlisting>INSERT INTO user (Host,User,Password)
-> VALUES('host','uživatel',PASSWORD('heslo'));</programlisting>
kde <envar>host</envar> je buď adresa serveru nebo přímo řetězec <emphasis>localhost</emphasis> podle toho, zda bude uživatel k mysql přistupovat z jiného stroje nebo ne.
</para><para>
Dalším krokem je vytvoření databáze s patřičnými tabulkami. Přihlásíte se do mysql pod nově vytvořeným uživatelem a zadáte příkaz:
<programlisting>\. createdb.sql;</programlisting>
</para>
</sect1>

<sect1 id="secA04">
<title>Konfigurace systému</title><para>
Důležitým krokem je nastavení parametrů pro správný chod vyhledávacího systému. V souboru konfig.php, který se nachází v adresáři inc, lze nastavit následující:
<variablelist>
<varlistentry>
<term>MYSQL_HOST</term><listitem><simpara>adresa MySQL<indexterm><primary>MySQL</primary></indexterm> serveru, kde je vytvořena databáze potřebná k činnosti vyhledávacího systému.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>MYSQL_UZIVATEL</term><listitem><simpara>jméno uživatele, pod kterým budou skripty přistupovat k dané databázi na MySQL serveru.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>MYSQL_HESLO</term><listitem><simpara>heslo, které je nutné pro přístup do databáze.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>MYSQL_DATABAZE</term><listitem><simpara>jméno databáze, jenž je určena k ukládání nalezených informací.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>QUERY_STRING</term><listitem><simpara>řetězec, který se použije jako dotaz pro ResearchIndex<indexterm><primary>ResearchIndex</primary></indexterm> při vyhledávání nových článků. Lze použít binární operátory jako OR, AND.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>AMOUNT</term><listitem><simpara>počet stránek, jež budou chtít skripty od ResearchIndexu<indexterm><primary>ResearchIndex</primary></indexterm> poskytnout. Pokud je například ResearchIndex<indexterm><primary>ResearchIndex</primary></indexterm> přetížen a dochází tak k přerušení činnosti jednotlivých skriptů, je dobré nastavit zde nižší hodnotu.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>MAX_POKUSU</term><listitem><simpara>udává počet opakování pokusu o přístup k požadovanému dokumentu v případě, kdy server neodpovídá.</simpara></listitem>
</varlistentry>
</variablelist>
</para>
</sect1>
</appendix>


<bibliography>
  <bibliodiv>
    <biblioentry>
      <abbrev>Lawrence</abbrev>
        <authorgroup>
		 <author><firstname>Steve</firstname><surname>Lawrence</surname></author>
         <author><firstname>C. Lee</firstname><surname>Giles</surname></author>
		 <author><firstname>Kurt</firstname><surname>Bollacker</surname></author>
      </authorgroup>
      <title>Digital Libraries and Autonomous Citaion Indexing</title>
      <pubdate>1999</pubdate>
      <publisher>
        <publishername>NEC Research Institute</publishername>
      </publisher>
    </biblioentry>
<!--
		<biblioentry id="Ri99">
			<bibliomset relation="article">
  			<authorgroup>
			 <author><firstname>Steve</firstname><surname>Lawrence</surname></author>
	         <author><firstname>C. Lee</firstname><surname>Giles</surname></author>
			 <author><firstname>Kurt</firstname><surname>Bollacker</surname></author>
  			</authorgroup>
        <title>Digital Libraries and Autonomous Citaion Indexing</title>
			</bibliomset>
			<bibliomset relation="journal">
			  <title>IEEE Computer</title>
				<volumenum>32</volumenum>
				<issuenum>6</issuenum>
        <publishername>IEEE</publishername>
  			<pubdate>1999</pubdate>
			</bibliomset>
    </biblioentry>
-->
    <biblioentry>
      <abbrev>Mariánek</abbrev>
      <author><firstname>Josef</firstname><surname>Mariánek</surname></author>
      <title>Inteligentní vyhledávání na www</title>
      <publisher>
        <publishername>Diplomová práce FI MU, Brno 2001</publishername>
      </publisher>
    </biblioentry>

    <biblioentry>
      <abbrev>Hoff</abbrev>
        <authorgroup>
         <author><firstname>Gerd</firstname><surname>Hoff</surname></author>
		 <author><firstname>Martin</firstname><surname>Mundhenk</surname></author>
		</authorgroup>
      <title>Finding Scientific Papers with HPSearch and Mops</title>
 			<pubdate>1999</pubdate>
      <publisher>
         <publishername>Universität Trier</publishername>
      </publisher>
    </biblioentry>

    <biblioentry>
      <abbrev>Ley</abbrev>
      <author><firstname>Michael</firstname><surname>Ley</surname></author>
      <title>Computer Science Bibliography, DBLP FAQ</title>
      <pubdate>1999</pubdate>
      <publisher>
         <publishername>Universität Trier</publishername>
      </publisher>
      <releaseinfo><ulink url="http://www.informatik.uni-trier.de/~ley/db/about/faq.html">http://www.informatik.uni-trier.de/~ley/db/about/faq.html</ulink></releaseinfo>
    </biblioentry>

    <biblioentry>
      <abbrev>Mundhenk</abbrev>
      <author><firstname>Martin</firstname><surname>Mundhenk</surname></author>
      <title>Martin's Online Paper Search - a Distributed virtual digital library</title>
      <releaseinfo><ulink url="http://mops.uni-trier.de/~mops/about.html">http://mops.uni-trier.de/~mops/about.html</ulink></releaseinfo>
    </biblioentry>

    <biblioentry>
      <abbrev>Bakken</abbrev>
      <authorgroup>
        <author><firstname>Stig Sather</firstname><surname>Bakken</surname></author>
        <author><firstname>Alexander</firstname><surname>Aulbach</surname></author>
        <author><firstname>Egon</firstname><surname>Schmid</surname></author>
        <author><firstname>Jim</firstname><surname>Winstead</surname></author>
        <author><firstname>Lars Torben</firstname><surname>Wilson</surname></author>
        <author><firstname>Rasmus</firstname><surname>Lerdorf</surname></author>
        <author><firstname>Andrei</firstname><surname>Zmievski</surname></author>
        <author><firstname>Jouni</firstname><surname>Ahto</surname></author>
      </authorgroup>
      <title>PHP manual</title>
      <publisher>
         <publishername>PHP Documentation Group, 2002</publishername>
      </publisher>
      <releaseinfo><ulink url="http://www.php.net/manual">http://www.php.net/manual</ulink></releaseinfo>
    </biblioentry>

    <biblioentry>
      <abbrev>Castagnetto</abbrev>
        <authorgroup>
		 <author><firstname>Jesus</firstname><surname>Castagnetto</surname></author>
         <author><firstname>Harish</firstname><surname>Rawat</surname></author>
		 <author><firstname>Sascha</firstname><surname>Schumann</surname></author>
         <author><firstname>Chris</firstname><surname>Scollo</surname></author>
         <author><firstname>Deepak</firstname><surname>Veliath</surname></author>
      </authorgroup>
      <title>Programujeme PHP profesionálně</title>
      <publisher>
         <publishername>Computer Press, Praha 2001</publishername>
      </publisher>
      <isbn>80-722-310-2</isbn>
    </biblioentry>

    <biblioentry>
      <abbrev>Šimůnek</abbrev>
      <author><firstname>Milan</firstname><surname>Šimůnek</surname></author>
      <title>SQL kompletní kapesní průvodce</title>
      <publisher>
         <publishername>GRADA Publishing, Praha 1999</publishername>
      </publisher>
      <isbn>80-7169-692-7</isbn>
    </biblioentry>

    <biblioentry>
      <abbrev>Axmark</abbrev>
      <authorgroup>
        <author><firstname>David</firstname><surname>Axmark</surname></author>
        <author><firstname>Michael</firstname><surname>Widenius</surname></author>
        <author><firstname>Jeremy</firstname><surname>Cole</surname></author>
        <author><firstname>Arjen</firstname><surname>Lentz</surname></author>
        <author><firstname>Paul</firstname><surname>DuBois</surname></author>
      </authorgroup>
      <title>MySQL manual</title>
      <publisher>
         <publishername>NuSphere, 2002</publishername>
      </publisher>
      <releaseinfo><ulink url="http://www.mysql.com/documentation">http://www.mysql.com/documentation</ulink></releaseinfo>
    </biblioentry>

    <biblioentry>
      <abbrev>Sochor</abbrev>
      <author><firstname>Jiří</firstname><surname>Sochor</surname></author>
      <title>Analýza a návrh systémů</title>
      <publisher>
        <publishername>Skripta FI MU, Brno 2001</publishername>
      </publisher>
    </biblioentry>

    <biblioentry>
      <abbrev>Blaťák</abbrev>
      <author><firstname>Jan</firstname><surname>Blaťák</surname></author>
      <title>Extrakce textu z PostScriptu a PDF</title>
      <publisher>
        <publishername>Bakalářská práce FI MU, Brno 2000</publishername>
      </publisher>
    </biblioentry>
  </bibliodiv>
</bibliography>

<index></index>

</book>

