Pavol Lackovič - IE, miesta, adresy, linka na google Maps

    Zadanie:

    Vyuzitie regularnych vyrazov na ziskanie adresy, nazvov miest ci statov z emailov a nasledne zobrazenie na google Maps.

    Motivácia

    Mnohé firmy posielajú svoje maily do celého sveta, aby sa zviditeľnili a získali tak zákazníkov. V každom takomto emaily musí byť aj adresa firmy, aby mohol možný záujemca nájsť firmu. Ak niekto dostane takýchto mailov veľa, bolo by pracné, z každého prepisovať adresy. Na to by mohol existovať nástroj, ktorý vytiahne z emailu adresu firmy a aj ju zobrazý na mape, aby mal potenciálny zákazník predstavu, kde firma sídli.

    Regulárne výrazy

    Takisto sa nazývajú aj REGEX alebo REGEXP. Regulárny výraz je reťazec znakov, ktorý slúži ako vzor, podľa ktorého sa filtruje nejaký text. Ich časté využitie je v kontrole správnosti vyplnenia formulárov, napr. na kontrolu textu, ktorý má mať určitú štruktúru, ako PSČ, či emailová adresa. Regexp teda vytvorí vzor, ktorý bude kontrolovať správny formát vstupných údajov. Použitím regexpov ušetrí programátor veľa if - else konštrukcií, ktoré by musle použiť, ak by regexpy nepoužil.

    Niektoré znaky majú v regulárnych vyrazoch špeciálny význam, čiže ich hľadanie v texte s amusí ošetriť. Napríklad znak . znamená v regexpe hociaký znak. Alebo znak * vyjadruje 0 až n krát výskyt predošlého znaku. Čiže výraz a* môže vyjadrovať a, aa, aaa, aaaa, ... .

    Príklad regulárneho výrazu na kontrolu emailovej adresy

    ^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$

    ^ značí začiatok slova

    [A-Z0-9._%+-] značí, že sa môže vyskytovať hociaký znak, ktorý sa nachádza v hranatých zátvorkách, kombinácia A-Z znázorňuje hociaké písmeno od A po Z, obdobne je to pri 0-9.

    + značí, že znak pred týmto znakom sa môže vyskytovať 1 až n krát

    @ značí, že nasleduje znak @

    [A-Z0-9.-]+ značí, že nasleduje slovo, zložené zo znakov v hranatých zátvorkách

    \. bodka má v takomto postavní špeciálny význam, a keď chceme upozorniť, že naozaj chceme znak . tak jej význam zrušíme spätným lomítkom

    [A-Z]{2,4} nasleduje koncovka, zložená z dvoch až štyroch písmen

    $ koniec slova

     

    Toto bol len jednoduchý príklad využitia regulárnych výrazov. Ich využitelnosť je omnoho väčšia a podporujú vytváranie zložitých výrazov.

     

    Java a regulárne výrazy

    Viacero programovacích jazykov priamo podporuje regulárne výrazy. Java nie je výnimka. V balíku java.util.regex sa nachádzajú triedy, ktoré pracujú s regulárnymi výrazmi. Konkrétne triedy Pattern a Matcher.

    Trieda Pattern pomocou metódy compile() spracuje regulárny výraz, podľa ktorého chceme vyhľadávať v nejakom texte. Trieda Matcher potom pomocou metódy find() hľadá výskyty takých reťazcov, ktoré vyhovujú regulárnemu výrazu a pomocou metódy group() vracia postupne tieto výskyty.

    Príklad použitia regexpov v jave

                  Pattern firstPattern = Pattern.compile(nejaky_patern);
                    Matcher firstMatcher = firstPattern.matcher(text);
    

     

    Štandardný formát adresy firiem

    Internet našiel svoje využitie v každej sfére života. Rozmachom internetu nastal aj rozmach elektronickej pošty, ktorá postupne, ale ešte nie úplne, nahradzuje klasickú korešpondenciu. Mnohé firmy, či osoby, posielajú vo svojich mailoch aj svoj kontakt, čiže adresu. Táto môže obsahovať okrem štandardných údajov ako meno firmy, ulica, PSČ, mesto, štát aj iné informácie, ako email, fax, telefón. Tieto údaje môžu byť rozne usporiadané. No používa sa najmä formát v tvare:

    Názov firmy

    Ulica Číslo

    PSČ Mesto

    Štát

    Tento formát sa používa pre lepšiu čitatelnosť a vzhľad, najmä oproti formátu, kde sú všetky údaje v jednom riadku. Takisto je to aj pozostatok z listovej korešpondencie, kde je tatkýto formát tiež zaužívaný.

    Príklad adresy

    Gratex Internationl, a.s.

    Plynárenská 7/B,

    821 09 Bratislava

     Google Maps

    Google maps je bezplatná online služba od spoločnosti google, ktorá poskytuje satelitné snímky, posúvateľné mapy celého sveta a plánovač ciest s vyhľadaním a lokalizovaním firiem (USA , Kanada, Spojené kráľovstvo a Írsko). Využitie tejto služby je veľmi jednoduché. Spoločnosť Google zostrojila Google API, pomocou ktorého je získanie mapy veľmi jednoduché. Zaslaním jednoduchej požiadavky s upresnením na mesto, ulicu či štát dostaneme naspäť posúvateľnú mapu.

     

    Riešenie programu

    Úloha programu je nájsť v emailoch pomocou regulárnych výrazov adresu firmy a zobraziť ju pomocou služby Google Maps v Internet Exploreri.

    Program je implementovaný ako konzolová aplikácia v jazyku Java. Spúšťa sa pomocou bat súboru, ktorého editáciou sa dá zmeniť adresár, v ktorom sa majú hladať textové súbory (emaily), v ktorých sa majú hľadať adresy firiem. Program postupne načítava textové súbory. Vždy načíta jeden celý email, v ktorom potom pomocou regulárneho výrazu nájde adresu firmy. Pre každú časť adresy, ulica, mesto, štát, je vytvorený zvlášť regulárny výraz, ktorý vyberie tú správnu časť textu.

    Tieto informácie sú ukladané do pola adries. Potom, čo všetky súbory sú prejdené a sú nájdené všetky adresy, program umožní používateľovi vybrať si, ktorú adresu chce zobraziť. Tieto adresy sa vypíšu v poradí, akom boli nájdené. Zvolenú adresu potom program pošle ako url adresu do webového prehliadača. Na tejto url adrese je html súbor,ktorý túto linku spracuje pomocou javascriptu, vyberie potebné údaje a pomocou Google API získa mapu miesta, na ktoré adresa ukazuje.

    Pri riešení programu sa vyskytli problémy s kódovaním znakov. Je treba dodržiavať encoding windows-1250. A to jak pri načítavaní zo súborov, tak aj pri kompilácii pomocou VM agumentov. No pri zobrazovaní údajov do konzoly, sú niektoré znaky nečitateľné. Spôsobuje to iné kódovanie znakov v konzole. No to nie je až taký veľký problém. Väčší problém bolo, že regulárne výrazy nepoznali slovenské znaky. Najmä spoluhlásky. Nepomohlo ani zapísanie poocou unicode. Preto som si definoval vlastnú skupinu znakov, vymenovaním, ktoré som v programe používal.

    Definovanie vlastnej skupiny znakov

                         String upperLetter = "A-ZÁČĎÉÍĹĽŇÓŔŠŤÚÝŽ";
                         String lowerLetter = "a-záčďéíĺľňóôŕšťúýž";

     

    Volanie url z javy

                         BareBonesBrowserLaunch.openURL(url);

     Zhodnotenie

    Program pracuje spoľahlivo pri spracovávaní emailov, ktoré obsahujú adresu podľa horeuvedného formátu. Adresu v inom formáte nenájde. Je to z určitého hľadiska obmedzenie, no v dnešnej dobe, keď sa všetko štandardizuje, je skôr problém vo formáte adresy. Komunikácia by mala byť jednotná, podľa určitého štandardu, čo by výrazne uľahčilo mnohé riešenia podobných problémov.

    Pre nájdenie iných adries v inom formáte, by bolo nutné iba hádať, či nájdený reťazec je adresa alebo nie. Mohli by sa použiť určité experimenty, ale podľa môjho názoru, by sa program zbytočne skomplikoval, výstup by sa mohol stať neprehľadný a zahltil by používateľa zbytočnými údajmi, ktoré by s adresou nemali nič spoločné. Pretože možných formátov adresy je veľmi veľa, a len malá zmena formátu adresy, by si mohla vyžiadať veľký zásah do programu.

     

    Spustenie programu

    Program je spustiteľný pomocou bat súboru s názvom RunMe. Editovaním tohoto súboru sa dajú meniť vstupné parametre programu, teda adresár, z kde sa majú hľadať textové súbory. Tento bat súbor sa musí nachádzať v adresári java projektu. Ak by sme ho chceli premiestniť, je treba prepísať v ňom hodnotu classpath.

    Do konzoly sa vypíšu výsledky ľadania, a program umožní vybrať adresu na zobrazenie.

    Obsah súboru RunMe.bat

                    java-Dfile.encoding=Windows-1250 -classpath bin RunMe .

    Program sa vypína zadaním znaku 'k' ako koniec.

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