Jana Makýšová - Distance search - Lokalizácia webstránky

     

    1         Charakteristika systému

    Cieľom tohto projektu bolo lokalizovať zadanú webstránku. Používateľovi by tento projekt mal dať odpoveď na otázky: „Kde je lokalizovaný vlastník stránky? Kam by sa dala stránka geograficky začleniť?“ Na zodpovedanie týchto otázok je potrebné extrahovať z obsahu webstránky informácie, ktoré môžu niesť geografické údaje. Môžu to byť názvy miest a obcí, adresa v rôznom formáte, poštové smerové číslo, atď.

    Na internete sú rôzne stránky. Môžu byť zamerané na konkrétne organizácie, ktoré majú určité sídlo a geografické umiestnenie, ale môžu byť aj geograficky nezávislé. Na takýchto stránkach sa potom môžu objavovať aj geograficky veľmi vzdialené názvy miest.

    S prihliadnutím na túto skutočnosť nemôžme očakávať, že lokalizácia stránky bude presná. Dokonca sa môže stať, že stránka venovaná konkrétnej organizácii, ktorá má adresu svojho sídla zverejnenú na stránke, môže obsahovať aj informácie o partnerských organizáciách. V obsahu stránky teda môžu byť aj geografické informácie, ktoré nesúvisia priamo s vlastníkom webstránky a tak môžu znepresniť jej lokalizáciu.

    Lokalizácia stránky nám však môže dať aj pomerne presné informácie.

    Na zistenie geografickej polohy stránky sa najčastejšie používa IP adresa stránky. Existuje na to viacero nástrojov, napríklad rozšírenia pre prehliadače: Firefox AS Number Extension (http://www.asnumber.networx.ch/) alebo HostIP geolocation plugin (http://www.hostip.info/).

    2         Realizácia

    Tento projekt je na rozdiel od spomínaných riešení zameraný na extrakciu informácií, ktoré poskytuje samotná stránka. Treba pamätať na to, že stránka (resp. jej vlastník) môže byť geograficky umiestnená na inom mieste ako je server, ktorý jej poskytuje webhostingové služby.

    Projekt je vytvorený tak, že lokalizuje stránku, ktorej adresu používateľ pošle formulárom. Nezameriava sa na žiadne konkrétne stránky. Požiadavky na správne fungovanie algoritmov sú, aby stránka bola v HTML (teda nie napríklad flash).

    Prostredie

     

    Na realizáciu projektu som si vybrala PHP v kombinácii s databázou MySQL.

    Použité funkcie

     

    Na začiatku projektu som zvažovala možnosti riešenia a rozhodla som sa pre využitie už existujúceho crawlera. Pôvodne som chcela stránky indexovať a použiť na to knižnicu mnoGoSearch. Až pri pokuse o indexovanie som zistila, že PHP túto knižnicu defaultne neobsahuje a bolo by nutné ju doinštalovať, čo by bolo náročné. Preto som zvolila radšej crawlovanie, ktoré ukladá výsledky do databázy. Využila som na to PHP crawler od Vladimira Fedorkova (http://sourceforge.net/projects/php-crawler/). To bol základ pre môj projekt. Ale na to, aby bol použiteľný, som si ho musela prispôsobiť.

    Postup riešenia

     

    Najskôr som si preštudovala funkcionalitu crawlera, aby som ho mohla efektívne využiť. Potom som dorobila druhú časť - vyhľadanie geografických názvov v scrawlovaných dátach. Použila som na to regulárne výrazy. Pri implementácii tejto časti som zistila, že crawler neukladal údaje v ideálnej podobe, preto som ho ešte musela upraviť tak, aby bol text dobre formátovaný.

    Crawler

     

    Crawler stiahne danú stránku a prejde ju do úrovne 1 (úroveň crawlovania sa dá nastaviť v konfiguračnom súbore). HTML kód stránky spracuje tak, že odstráni všetky tagy a prípadné skripty. Výsledkom pôvodného crawlera bol extrahovaný text stránky, ktorý bol však formátovaný ako súvislý text, takže nerozlišoval nové riadky, tabulátory, odrážky, dokonca ani niektoré medzery. V takomto súvislom texte by nebolo vyhľadávanie regulárnych výrazov efektívne, lebo by nenašlo výsledky, ktoré by mohlo, ak by bol text správne štruktúrovaný.

    Preto som crawler upravila tak, že ešte pred odstránením tagov sa tagy <br />, <p> a <li> nahrádzajú novým riadkom. Po odstránení tagov sú z textu odstránené zbytočné medzery.

    Vyhľadávanie geografických dát

     

    Táto časť už ráta s dátami, ktoré sú výsledkom crawlera. Pri každej požiadavke o vyhľadanie geografických dát sa najskôr skontroluje, či nie je potrebné stránku scrawlovať. Ak áno, spustí sa crawler.

    Keď teda máme dáta v databáze aktuálne, v textovom obsahu stránky sa vyhľadajú reťazce zodpovedajúce definovaným regulárnym výrazom. Všetky nájdené reťazce sú uložené do jedného poľa, ktoré prejde ďalším spracovaním.

    Jedným z regulárnych výrazov je výraz na nájdenie poštového smerového čísla (PSČ). Tieto nájdené čísla sa ešte overujú v databáze, či sú to skutočne reálne PSČ na Slovensku a akým mestám prináležia.

    Tu som narazila na jeden problém. Čísel, ktoré zodpovedajú formátu PSČ, býva na stránkach pomerne dosť, ale väčšina z nich nie sú PSČ. Tak som vytvorila tabuľku v databáze, kam som uložila všetky PSČ na Slovensku. Program každé jedno PSČ overuje. Ak je ich teda veľa a pre každé z nich posielame požiadavku na databázu, odozva je pomalá. Aby som tomuto predišla, vyriešila som to nasledovne: pred akýmkoľvek spracovaním PSČ sa najskôr vyberú všetky PSČ z databázy a poskladajú sa do jedného reťazca. Pri spracovaní PSČ sa algoritmus pozrie najskôr do reťazca, či tam PSČ existuje. Ak nie, nemá význam volať databázu.

    Po nájdení všetkých reťazcov, ktoré vyhovujú regulárnym výrazom, sú odstránené duplicity a celé pole výsledkov je usporiadané podľa nastavených priorít. Najvyššiu prioritu majú reťazce zodpovedajúce regulárnemu výrazu číslo 3 (popísané nižšie) nájdené na stránke úrovne 0.

    Regulárne výrazy

     

    Pri vyhľadávaní vhodných reťazcov som použila 3 regulárne výrazy:

    1.      PSČ: (?:\x30|\x38|\x39){1}[\d]{2}\s[\d]{2}

    Tento výraz nájde všetky čísla, ktoré sú medzerou rozdelené na 3+2 číslice, pričom prvá číslica môže byť iba 0, 8 alebo 9. Dôvod je ten, že na Slovensku PSČ začína vždy touto číslicou. Mojou snahou bolo urobiť čo najpresnejší regulárny výraz. Po nájdení takýchto reťazcov aplikácia overuje, či to je reálne PSČ na Slovensku a priradí mu mesto.

    2.      V meste: \sv(?:\s[:upper:][:lower:]+){1,2}\snad\s[:upper:][:lower:]+|\sv(?: \s+[:upper:][:lower:]+){1,2}\spod\s[:upper:][:lower:]+|\sv(?:\s[:upper:][:lower:]+){1,3}

    Tento regulárny výraz nájde všetky slová začínajúce veľkým písmenom, pred ktorým je predložka „v“. Odhalí aj skupiny slov (max. 3 slová) s veľkým začiatočným písmenom a aj skupiny slov, kde uprostred je predložka „nad“ alebo „pod“. Teda odhalí napríklad aj „v Novom Meste nad Váhom“, atď.

    3.      Ulica č, PSČ Mesto: (?:[:upper:][:lower:]+\s\d{1,5}[\x{002C}]?[\s|\r\n]+)? (?:\x30|\x38|\x39){1}[\d]{2}\s[\d]{2}[\s|\r\n]+(?:(?:[:upper:][:lower:]+\s+){1,2} (?:(?:(?:nad)|(?:pod))?\s+[:upper:][:lower:]+)?)

    Tento regulárny výraz odhalí reťazce typu „Ilkovičova 3, 842 16 Bratislava“, pričom čiarka nie je povinná a namiesto nej môže byť aj nový riadok. Mesto môže mať tiež tvar viacslovného názvu. Ani celá časť ulice a čísla nie je povinná, takže nájde aj reťazce, kde je PSČ s mestom. Výhodné to je pri PSČ, ktoré nie je v databáze, ale je skutočne PSČ.

     

    Keďže triedy [:upper:] a [:lower:] berú do úvahy iba písmená anglickej abecedy, musela som písmená s diakritikou pridať. Na odhalenie veľkých a malých písmen slovenskej abecedy teda vznikli takéto triedy:

    [[:upper:]\x8A\x8D\x8E\xBC\xC1\xC8\xC9\xCD\xCF\xD2\xD3\xD4\xDA\xDD] [[:lower:]\x9A\x9D\x9E\xBE\xE1\xE4\xE5\xE8\xE9\xEC\xED\xEF\xF2\xF3\xF4\xF6\xFA\xFD]

    Váhovanie výsledkov

     

    Najpravdepodobnejším geografickým umiestnením stránky bude reťazec, ktorý zodpovedá regulárnemu výrazu č.3, ktorý bol nájdený na stránke úrovne 0 - teda nie na odkazovaných stránkach. Ďalší významný faktor, ktorý prispieva k pravdepodobnosti, že výraz je hľadaná lokalizácia, je počet koľko krát sa výraz na stránke nachádza.

    Na zoradenie výsledkov podľa priority som zvolila nasledovný vzorec na rátanie „váhy“ nájdeného výrazu:

    weight=number*priority_rp[regular_pattern]*$priority_depth[depth]

     

    Pričom koeficient priority_rp má hodnotu 3 pre regulárny výraz 1, 1 pre regulárny výraz 2, 5 pre regulárny výraz 3. Koeficient priority_depth nadobúda hodnotu 5 pre úroveň 0 a hodnotu 1 pre úroveň 1. Zmenou týchto hodnôt možno ovplyvniť výber najpravdepodobnejšej lokalizácie stránky.

    Pre reťazec zodpovedajúci 3. regulárnemu výrazu nájdený na stránke úrovne 0, ktorý sa spolu na všetkých stránkach nachádza raz, bude hodnota váhy 1*5*5=25

    Výsledky sú usporiadané od najväčšej váhy po najmenšiu.

    3         Zdrojové dáta

    Ako zdroj informácií pre zoznam PSČ mi poslúžila stránka Slovenskej pošty (http://www.posta.sk/page/189), ktorá zverejňuje aktuálny zoznam PSČ na Slovensku vo formáte MS Excel. Tieto údaje som spracovala a vložila do databázy. V aplikácii sú v inštalačnom súbore vo forme insertu do databázy. Zistila som však, že tento zoznam nie je úplný, teda môže sa vyskytnúť aj PSČ, ktoré sa používa a je správne, ale v tomto zozname nie je.

    4         Vyhodnotenie

    Stránka www.stuba.sk

     

    Počet výsledkov 1. regulárneho výrazu: 259

    Počet výsledkov 2. regulárneho výrazu: 392

     

    Počet výsledkov 3. regulárneho výrazu: 198

    Celkový počet nájdených výrazov: 849

    Z toho je geografických výrazov (unikátnych): 81

     

    Z týchto údajov je 67 údajov rozdielnych geografických názvov. Iba 7 výrazov z nájdených nie sú geografické údaje (napríklad „v Januári“, „v Knižnici“).

    Tabuľka všetkých PSČ na vybraných stránkach:

    PSČ Mesto Objavené lokalizátorom Poznámka
    URL http://www.stuba.sk
    812 43 Bratislava 1 nie nie je v oficiálnom zozname PSČ
    URL http://www.stuba.sk/new/generate_page.php?page_id=677
    812 43 Bratislava 1 nie nie je v oficiálnom zozname PSČ
    813 68 Bratislava 1 nie nie je v oficiálnom zozname PSČ
    812 19 Bratislava 1 nie nie je v oficiálnom zozname PSČ
    812 37 Bratislava 1 nie nie je v oficiálnom zozname PSČ
    066 59 Humenné nie nie je v oficiálnom zozname PSČ
    812 45 Bratislava 1 nie nie je v oficiálnom zozname PSČ
    969 01 Banská Štiavnica áno  
    917 24 Trnava nie nie je v oficiálnom zozname PSČ
    977 01 Brezno áno  
    949 53 Nitra nie nie je v oficiálnom zozname PSČ
    018 41 Dubnica nad Váhom áno  
    945 01 Komárno áno  
    831 02 Bratislava áno  
    811 07 Bratislava 1 áno  
    811 03 Bratislava 1 áno  
    842 47 Bratislava 1 nie nie je v oficiálnom zozname PSČ
    811 09 Bratislava 1 áno  
    930 17 Gabčíkovo nie nie je v oficiálnom zozname PSČ
    URL http://www.stuba.sk/new/generate_page.php?page_id=3549
    812 43 Bratislava 1 nie nie je v oficiálnom zozname PSČ
    821 04 Bratislava áno  
    URL http://www.stuba.sk/new/generate_page.php?page_id=3411
    812 43 Bratislava 1 nie nie je v oficiálnom zozname PSČ
    811 02 Bratislava áno  
    URL http://www.stuba.sk/new/generate_page.php?page_id=613
    812 43 Bratislava 1 nie nie je v oficiálnom zozname PSČ
    811 07 Bratislava 1 áno  
    930 17 Gabčíkovo 3 nie nie je v oficiálnom zozname PSČ

     

    Stránka www.fiit.stuba.sk

     

    Počet výsledkov 1. regulárneho výrazu: 469

    Počet výsledkov 2. regulárneho výrazu: 217

    Počet výsledkov 3. regulárneho výrazu: 134

     

    Celkový počet nájdených výrazov: 820

     

    Z toho je geografických výrazov (unikátnych): 31

     

    Z nájdených výrazov je 26 názvov miest a ulíc. Zvyšné výrazy pozostávajú z názvu mesta a nejakého iného slova, ktoré tiež začína veľkým písmenom. 6 najpočetnejších výrazov obsahuje „Bratislava“.

     

    Tabuľka všetkých PSČ na vybraných stránkach:

    PSČ Mesto Objavené lokalizátorom Poznámka
    URL http://www.fiit.stuba.sk
    842 16 Bratislava 4 nie nie je v oficiálnom zozname PSČ
    URL http://www.fiit.stuba.sk/generate_page.php?page_id=276
    842 16 Bratislava 4 nie nie je v oficiálnom zozname PSČ
    URL http://www.fiit.stuba.sk/generate_page.php?page_id=388
    842 16 Bratislava 4 nie nie je v oficiálnom zozname PSČ
    URL http://www.fiit.stuba.sk/generate_page.php?page_id=451
    842 16 Bratislava 4 nie nie je v oficiálnom zozname PSČ
    URL http://www.fiit.stuba.sk/generate_page.php?page_id=1667
    842 16 Bratislava 4 nie nie je v oficiálnom zozname PSČ

     

    Stránka www.mtf.stuba.sk

     

    Počet výsledkov 1. regulárneho výrazu: 536

    Počet výsledkov 2. regulárneho výrazu: 63

    Počet výsledkov 3. regulárneho výrazu: 264

    Celkový počet nájdených výrazov: 863

    Z toho je geografických výrazov (unikátnych): 42

     

    Lokalizátor našiel 42 rôznych výrazov (rôznych pri porovnaní znakových reťazcov). Z nich je 32 skutočných geografických údajov. Okrem nich boli nájdené aj nesprávne výrazy ako „v Kórejskej“ a „v Aule“.

     

    Tabuľka všetkých PSČ na vybraných stránkach:

    PSČ Mesto Objavené lokalizátorom Poznámka
    URL http://www.mtf.stuba.sk
    917 24 Trnava nie nie je v oficiálnom zozname PSČ
    URL http://www.mtf.stuba.sk/generate_page.php?page_id=3073
    917 24 Trnava nie nie je v oficiálnom zozname PSČ
    945 01 Komárno áno Komárno 1
    URL http://www.mtf.stuba.sk/generate_page.php?page_id=3072
    917 24 Trnava nie nie je v oficiálnom zozname PSČ
    018 41 Dubnica nad Váhom áno  
    URL http://www.mtf.stuba.sk/generate_page.php?page_id=3069
    917 24 Trnava nie nie je v oficiálnom zozname PSČ
    977 01 Bratislava áno Bratislava 1
    URL http://www.mtf.stuba.sk/generate_page.php?page_id=3065
    917 24 Trnava nie nie je v oficiálnom zozname PSČ

     

    Stránka www.kamdomesta.sk

     

    Počet výsledkov 1. regulárneho výrazu: 293

     

    Počet výsledkov 2. regulárneho výrazu: 194

     

    Počet výsledkov 3. regulárneho výrazu: 2

    Celkový počet nájdených výrazov: 489

    Z toho je geografických výrazov (unikátnych): 70

     

    Z nájdených výrazov je iba 25 názvov miest a ulíc. Zvyšné názvy sú zväčša názvy divadiel, koncertných siení a predstavení. Vyplýva to aj zo zamerania stránky.

     

    Tabuľka všetkých PSČ na vybraných stránkach:

    PSČ Mesto Objavené lokalizátorom Poznámka
    URL http://www.kamdomesta.sk/
    žiadne      
    URL http://www.kamdomesta.sk/kontakt
    040 01 Košice áno objavené 3 výskyty, Košice 1 - Kavečany
    974 01 Banská Bystrica áno Banská Bystrica 1
    811 07 Bratislava áno Bratislava 1

    5         Inštalácia

    1.             Upraviť súbor _config.php v priečinku crawler. Najdôležitejšie údaje sú konfiguračné premenné na pripojenie do databázy (host, názov databázy, login, heslo) a premenné $CRAWL_MAX_DEPTH a $CRAWL_PAGE_EXPIRE_DAYS. Prvá nastaví hĺbku crawlovania, druhá počet dní, po ktorých sa údaje o crawlovanej stránke v databáze považujú za staré a stránka sa scrawluje znovu.

    2.             Spustiť súbor localizator/_install.php - vytvorí databázu a vloží do nej dáta. Alternatíva: spustiť priamo súbor index.html, ak sa nepodarí vybrať databázu, bude ponúknutý odkaz na súbor _install.php. Po úspešnom vytvorení databázy bude ponúknutý odkaz späť na hlavnú stránku.

    3.             Spustiť index.html - ten presmeruje na localize.php

    6         Záver

    Vytvorený nástroj na zistenie geografického umiestnenia webových stránok vyhľadáva na týchto stránkach geografické údaje. Vďaka váhovaniu nájdených výsledkov lokalizácia dosahuje oveľa lepšiu presnosť pri určení najpravdepodobnejšieho miesta výskytu. Na druhú stranu som prišla na problém s PSČ. Reťazec obsahujúci poštové smerové číslo je takmer vždy adresou organizácie, ktorá stránku vlastní. Je to teda veľmi spoľahlivý údaj pri lokalizácii. Ak by sme však hľadali všetky čísla vyhovujúce predpisu PSČ, často krát by sme dostali čísla, ktoré v skutočnosti nie sú PSČ. Môžu to byť časti telefónnych čísiel, IČO, DIČ, prípadne to môže byť aj číslo vyjadrujúce rôzne miery (dĺžku, objem, ceny, atď.).

    Z tohto dôvodu som zvolila overovanie, či je číslo skutočne poštovým smerovým číslom na Slovensku (keďže som sa sústredila na webstránky na Slovensku). Tu vznikol opačný problém. Aktuálny zoznam PSČ, ktorý som získala zo stránok Slovenskej pošty, nie je úplný. Najmä v Bratislave je to dosť zjavné, pretože má veľmi veľa PSČ. Preto neboli na stránkach odhalené niektoré dôležité PSČ a výsledok odhadu geografickej podoby mohol byť skreslený.

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