Peter Kvasničák - wikipédia search

    Table of contents
    No headers

    Zber dat a nasledne vyhladávanie informacii ziskanych zo stranok wikipedie.

    Cielom je vytvorit aplikaciu, ktora umozni uzivatelovi zadat slovo a ono mu v ramci wikipedie zobrazi nazvy clankov, v ktorych sa vyskytlo (kriteria na zoradovanie este nie su premyslene, ale budem vychadzat z bool. modelu).

     

    Pri implementacii boli pouzite nasledujuce technologie: php + mysql

     

    Implementacia sa skladala z viacerych casti(suborov), ktore popisem jednotlivo:

     

    wiki(php)

    - obsahuje 3 funkcie, ktore z lubovolnej stranky ziskaju udaje o nazve stranky a kapitolach (tak ako su definovane vo wikipedii)

    - v pripade, ze sa zo stranky nepodari ziskat nazov stranky, tak sa taka stranka vyhodnoti ako chybna a nebude sa spracovavat (najma pri SK strankach sa mi to stalo a neviem presne, kre bol pes zakopany)

     

    is_webpage(php)

    - najzlozitejsi modul

    - jeho ulohou je vlozenie zaznamov do tabulky, ktorej kazda polozka ma nasledovne atributy(id_stranky, nazov, kapitoly, url)

    - pre lahsiu manipulaciu s datami som vsetky kapitoly spojil do jedneho retazca, pricom su oddelene ";;" cim nie je problem ziskat pole kapitol nazad

    - dalsim problemom bola implementacia logiky prehladavania stranok, kedze prehladavam stranky rekurzivne po urcitu uroven

    - pri spracovavani kazdej stranky volam funkciu, ktora okrem adresy stranky obsahuje aj hlbku, v ktorej sa nachadza a taktiez maximalnu moznu hlbku (+dalsie parametre na optimalizaciu)

    - spracovavanie liniek je nasledovne

    • urcim si zaklad stranky http://en.wikipedia.org/
    • pomocou funkcie dostanem pole vsetkych url, ktore sa na stranke nachadzaju
    • ak linka zacina znakom # pripadne obsahuje /w/ tak ju vynechavam
    • ak linka ma na 2. pozicii wiki/ alebo na 7. pozicii en.wikipedia.org tak ju spracuj
    • ak stranka zacina na wiki/ tak ju pridaj k zakladnemu tvaru

     

    - dalej bolo potrebne vyriesit problem s viacnasobnym vyskytom stranky v databaze a to som riesil nasledovne:

    • najskor som na zaklade url zistil, ci uz stranka je v databaze
      • ak uz bola, bolo potrebne skontrolovat, ci aktualna hlbka stranky je nizsia ako v databaze
        • ak ano, bolo potrebne aktualizovat hlbku a taktiez zacat spracovavat vsetky linky vychadzajuce z tejto stranky (kedze pravdepodobne aj im sa zmeni hlbka, ...)
        • ak nie, nerob nic
      • ak este nebola stranka v databaze tak bolo potrebne stranku spracovat (wiki)
        • ak hlbka stranky bola nizsia ako maximalna povolena, tak sa ziskali podlinky stranky a spustil sa cely proces na kazdej z nich
        • ak nie (tj. linka je uz na poslednej urovni) tak uz nema vyznam brat dalsie linky, kedze nebudu spracovavane

    - okrem tejto logiky som riesil v tomto module aj export stranky do xml pripadne html (da sa to v kode lahko upravit volanim jednej z 2 pripravenych funkcii). Vystup je nasledovny: http://elitagjh.yweb.sk/xmlexport.xml

     

    word_table(php)

    - v tejto casti vytvaram tabulku indexov, kde kazda polozka ma nasledovne atributy (slovo, id_stranka) pricom sa do nej dostane kazde slovo, ktore sa nachadza v niektorom v nazvoch stranok a kapitolach

    - dal som tam kriterium, ze slova, ktore su kratsie ako 4 znaky vynechavam, nech je tam menej prvkov, kedze kratsie su vacsinou rozne predlosky, spojky, ...

    - optimalizacia, podobne ako pri linkach prebieha tak, ze najskor si pole slov pre kazdu stranku utriedim a potom v pripade viacnasobneho vyskytu ponecham len 1 slovo (toto by sa neskor mohlo poriesit ako dalsi atribut v tabulke a dal by sa tam pocet vyskytov slova a na zaklade toho by sa to mohlo zoradovat)

     

    search(php)

    - momentalne najjednoduchsia cast celej aplikacie, nakolko jej jedinou ulohou je zobrazenie vysledku

    - postup je nasledovny:

    • uzivatel zada hladane slovo
    • spusti sa select z tabulky slov, pricom vysledkom je pole IDciek stranok, v ktorych sa slovo nachadza
    • nasledne sa spravi select nad tabulkou stranok, pricom sa zobrazia len tie zaznamy, ktore su zhodne s IDckami vratenymi z predchadzajuceho bodu
    • vysledok sa zobrazi v ramci webstranky (pripadne sa moze dorobit aj export do xml, ako je to v casti is_webpage, no nepokladal som to za nutne, kedze tam som exportoval celu databazu)

     

    Zhrnutie a zhodnotenie

    Databaza stranok obsahuje momentalne 358 zaznamov

    Databaza slov obsahuje momentalne 7450 zaznamov

    Tato mnozina je myslim postacujuca.

     

    V najblizsej dobe dodam aj nejake informacie, aby som vedel vytvoreny system 'ohodnotit' (pomocou parametrov preberanych na prednaske - ak bude stacit, tak na presnosti a pokryti).

    Tag page (Edit tags)
    • No tags
    You must login to post a comment.
    Powered by MindTouch Core