Michal Kvetan - Extrakcia kontaktných údajov z textu

    Úvod

    V dnešnej dobe sa pomerne často stretávame so situáciou, keď súrne potrebujeme získať nejaké kontaktné údaje o nejakej osobe. Pri klasickom získavaní týchto informácií, keď tieto informácie hľadá v texte človek, sa tieto informácie získavajú pomaly. V tomto prípade slovom pomaly máme na mysli to, že požadované informácie nie sú pre človeka dostupné v danej chvíli. Preto by bolo vhodné, ak by sa vytvoril nejaký program, ktorý by umožňoval extrakciu informácii z daného textu. Tento program by teda mal extrahovať kontaktné údaje o osobách z daného textu. Bolo by vhodné, ak by tento program dokázal spracovávať aj informácie z webu. To by sa však dalo ľahko docieliť tým, že sa informácie, v ktorých sa má vyhľadávať, stiahnu vo forme html, následne sa použije napríklad nejaký voľne dostupný softvér, ktorý tieto html informácie prevedie do textovej podoby, z ktorej bude možné požadované informácie ďalej extrahovať. Potom by už človek nemusel v texte vyhľadávať takýmto spôsobom informácie, ale len by tieto textové informácie posunul programu, ktorý by už vedel, aké informácie má z textu extrahovať a urobil by to za človeka.

    Cieľ

    Cieľom tohto projektu bude vytvorenie aplikácie, ktorá bude schopná hľadať v texte kontaktné informácie o osobách. Aplikácia by mala byť schopná vyhľadať o osobách tieto kontaktné údaje:

    • E-mail,
    • Telefónne číslo,
    • ICQ,
    • Skype.

    Aplikácia bude implementovaná v Jave a na rozpoznávanie kontaktných údajov osôb prostredníctvom regulárnych výrazov sa bude využívať knižnica java.util.regex.

    Analýza

    Na to, aby sme boli schopní extrahovať kontaktné údaje o osobách, musíme najprv vedieť, aké osoby sa v texte nachádzajú, aby sme týmto osobám dokázali priradiť ich kontaktné údaje. Keď aj vieme, aké osoby sa v texte nachádzajú, stále nevieme, ktoré informácie zodpovedajú ktorej osobe. Budeme však vychádzať z určitých predpokladov, ktoré nám rozhodovanie uľahčia. Budeme predpokladať, že človek, ktorého sa kontaktné údaje týkajú sa najskôr predstaví.  Potom ako sa človek uvedie môže zanechať v texte svoje kontaktné údaje. Z toho vyplýva, že kontaktné údaje medzi dvoma osobami v texte patria osobe predstavovanej skôr, čiže osobe vyššie. Teraz už zhruba vieme, ktorej osobe dané kontaktné údaje patria. Avšak je tu jeden problém. Čo ak sa človek odkazuje v texte na napr. nejakú knihu. V rámci odkazu na túto knihu sa v texte môžu nachádzať aj ľudia, ktorí v texte nemajú kontaktné údaje. Iný príklad: čo ak sa človek odkazuje na nejakú skupinu ľudí, s ktorou má alebo mal nejaký vzťah napr. z detstva. Ani o týchto osobách sa nebudú viesť kontaktné údaje, preto treba rátať s tým, že takéto osoby je potrebné zo zoznamu osôb kontaktných údajov vylúčiť, pretože ak sa za takýmito osobami nachádzajú nejaké kontaktné údaje, mohlo by to vyzerať, že patria práve týmto osobám, ale oni však patria osobe, ktorá sa v texte o týchto osobách zmienila. Pokiaľ takéto osoby odstránime, je možné začať s rozpoznávaním kontaktných údajov a k ich prideľovaním jednotlivým osobám.

    Riešenie

    Vytvorí sa regulárny výraz, ktorý bude predstavovať osobu. Tento regulárny výraz bude pozostávať z mena a priezvisko osoby. Regulárny výraz reprezentujúci osobu je znázornený nižšie:

     

    (('meno1'|'meno2'|'meno3'|'…')\s{1,2}(\p{Lu}\p{L}+)
    

    'meno1','meno2','meno3' a ostatné mená predstavujú mená z nasledujúceho menného zoznamu.

    http://povodna.rodinka.sk/user/view_page.php?page_tag=mena_datum
    

    Za týmto menom sa môže nachádzať 1 alebo 2 prázdne znaky. Ďalej sa nachádza samotné priezvisko, ktoré pozostáva z veľkého písmena a ďalej nasledujú malé i veľké písmená. To je pre prípad, že by sa človek nezapisoval klasicky, ale zapisoval sa veľkými písmenami. Pôvodne bol jedným menom aj regulárny výraz:

    (\p{Lu}\.)
    

    ktorý hovoril, že meno môže byť aj veľké písmeno a za ním bodka, ale tento výraz sa neosvedčil nakoľko osoby, ktoré uvádzali svoje kontaktné údaje sa predstavovali celým meno a nie len skratkou.

     

    Keď už máme regulárny výraz pre osobu, tak prehľadáme celý text, aby sme zistili, ktoré osoby sa v ňom nachádzajú. Zistíme, ktoré osoby sú nežiadané - sú na ne len odkazy a s ostatnými osobami budeme pracovať.

     

    Vytvorí sa regulárny výraz na e-mail, ktorý je zobrazený nižšie:

    (((((e|E)[-]{0,1}mail)|((a|A)ddress))\s*:\s*)?([\w\+\._]+'zavinac'[\w\+]+('oddelovac'[\w\+]+)+))
    

    'zavinac' je definovaný nasledovne:

    ((\s*((@)|(\(at\))|(\[at\])|(\{at\})|(\[zavin((ac)|(áč))\])|(<zavinac>))\s*)|( at )|(ET))
    

    a 'oddelovac' je definovaný nasledovne:

    ((\s*((\.)|(_)|(•)|(dot)|(\(dot\))|(\[dot\])|(\{dot\})|(-dot-)|(\[~\.~\])|(\[bodka\])|(<bodka>))\s*))
    

    Regulárny výraz na e-mail je komplikovaný. To je spôsobené tým, aby vyhľadávací roboti ťažšie tieto adresy nachádzali, pretože tým sa zabraňuje spamu.

     

    Vytvorí sa regulárny výraz na telefónne číslo:

    ('TEL'((([\(]?\+[0-9]{3}[\s-]*[0-9][\)]?)|([0-9]{2}\s*/))([0-9\s-]*)(,\s*)?)+)"
    

    kde 'TEL' je definovaný ako:

    ((((t|T)el[\.]?)|((t|T)el\.\s*(c|č)\.)|((t|T)elef(o|ó)n)|((p|P)hone))\s*:\s*)
    

    Tento výraz je tiež trochu komplikovanejší, pretože ľudia svoje telefónne čísla zapisijú v rôznych formátoch.

     

    Vytvorí sa regulárny výraz na ICQ:

    (((((icq)|(ICQ))(\s*#)?)\s*:\s*)([0-9]{1,3}[-\s]?[0-9]{3}[-\s]?[0-9]{3}))
    

     

    A ešte sa vytvorí regulárny výraz na Skype:

     "((((s|S)kype)\s*:\s*)[\w._]+)
    

     

    Teraz keď už máme všetky požadované regulárne výrazy, tak sa načíta text, z ktorého chceme kontaktné údaje extrahovať. Ak sú to html dáta použijeme voľne dostupný softvér, ktorý pretransformuje html do textu. Tento softvér sa volá htmlastext. Je možné ho stiahnuť z adresy:

    http://www.nirsoft.net/utils/htmlastext.zip
    

    Teraz keď už máme aj text, môžeme popriraďovať jednotlivé kontaktné údaje žiaducim osobám (osobám na ktoré sa neodkazuje).

    Testovanie

    Dáta, na ktorých som testoval aplikáciu sa nachádzajú na tejto stránke. Súbory data.zip a data-2.zip obsahujú stránky priamo stiahnuté z internetu. Súbory data2.zip a data2-2.zip už obsahujú textové podoby týchto dát, ktoré vznikli transformáciou prostredníctvom programu htmlastext, kde sa nastavil znak pre neutriedený zoznam na medzeru. Extrakciu dát som testoval na údajoch zo súborov data2.zip a data2-2.zip. Nasleduje ukážka extrakcie kontaktných údajov osôb z týchto dát (obr. 1).

     

    Testovanie.png

     

    Obr.1 - Ukážka extrakcie kontaktných údajov osôb.

    Pre data2.zip bola zo 17 záznamov extrakcia údajov nasledovná:

      R I RI
    Osoby s kontaktnými údajmi 17 17 17
    E-maily 19 19 19
    Tel. č. 15 15 15
    ICQ 0 0 0
    Skype 0 0 0
    spolu 51 51 51

     

    Precision = RI spolu / I spolu = 51 / 51 = 1 = 100%

    Recall = RI spolu / R spolu = 51 / 51 = 1 = 100%

    Zo všetkých záznamov boli dáta extrahované správne, pretože podľa týhto dát sa upravovali regulárne výrazy. Pre ostatné dáta sa už len konali testy.

     

    Pre data2-2.zip bola z 20 záznamov extrakcia údajov nasledovná:

      R I RI
    Osoby s kontaktnými údajmi 23 23 23
    E-maily 22 22 22
    Tel. č. 19 15 15
    ICQ 2 2 2
    Skype 0 0 0
    spolu 66 62 62

     

    Precision = RI spolu / I spolu = 62 / 62 = 1 = 100%

    Recall = RI spolu / R spolu = 62 / 66 = 0.94 = 94%

     

    Zhodnotenie

    Extrakcia kontaktných údajov o osobách z textu nebol taký triviálny problém ako sa zo začiatku javilo. Vytváranie regulárnych výrazov bolo trošku zdĺhavejšie, pretože bolo potrebné vytvoriť také regulárne výrazy, ktoré by korešpondovali s realitou (čo sa týka e-mailov, bolo potrebné vytvoriť také regulárne výrazy, ktoré e-maily detegujú, pretože ak ľudia na svojej stránke uverejnia e-mailovú adresu, tak ju vo väčšine prípadov zverejnia tak, aby to vyhľadávajúci boti nevyhodnotili ako e-mailovú adresu.). Aj práca s telefónnymi číslami bola zaujímavá. Nakoniec však boli vytvorené také regulárne výrazy, pomocou ktorých boli extrahované kontaktné údaje o osobách správne.

    Používateľská príručka

    Na používanie softvéru je potrebné mať nainštalovanú Javu verzia 1.6. Inštalácia softvéru pozostáva z prekopírovania  súboru vi.jar spolu so súborom Mena.txt. V súbore Mena.txt sa nachádza zoznam mien, podľa ktorých sa vyhľadávajú osoby v texte a je možné dodefinovať aj nové mená. Používanie softvéru je veľmi jednoduché. Do ľavého okna sa vloží text, z ktorého chceme extrahovať kontaktné údaje. Potom stačí už len kliknúť na tlačidlo Extrahovať informácie a v pravom okne sa objavia extrahované informácie.

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