Igor Aufricht - Udalosti

    Úvod

    Často sa informácie o rôznych udalostiach posielajú pomocou mailov. Medzi udalosti zaraďujeme napríklad stretnutia, schôdzky, rôzne podujatia alebo konferencie. Termíny a miesta stretnutí a schôdzok sa veľakrát dohadujú mailom.

    Taktiež oznámenia o konaní podujatí a konferencií sa pravidelne oznamujú elektronickou poštou. Každý používateľ internetu sa môže prihlásiť do všakovaných mailing listov, kde získa informácie o týchto udalostiach. Jedným z takýchto mailing listov je aj dbworld.

    Keďže informácie o podujatiach sa vyskytujú v mailing listoch iba vo forme mailov, bolo by veľmi vhodné, keby sme vedeli tieto informácie extrahovať a zaradiť napríklad to kalendára.

    Projekt

    V mojom projekte som sa teda zameral na extrakciu informácii o udalostiach z databázy dbworld mailing listu a ich transformáciu do formátu akceptovaného aplikáciou Google Calendar. Extrahoval som informácie o udalostiach (väčšinou vedeckých konferenciách), konkrétne informácie o tom, ČO, KDE a KEDY sa bude konať.

    Použité nástroje

    Na extrakciu informácií som využil regulárne výrazy v prostredí PHP.

    Zdrojové údaje

    Emaily z Dbworld mailinglistu.

    Analýza zdrojových údajov

    Databáza pozostáva zo zoznamu mailov, zoradených podľa času odoslania. Väčšina mailov obsahuje špeciálne hlavičky pridané dbworld mailing listom s názvami X-DBWorld-*, kde hviezdička reprezentuje ďalšie znaky. Zaujímavé sú hlavne nasledovné hlavičky:

    • X-DBWorld-Message-Type - obsahuje typ správy, pre nás zaujímavý je typ správy conference/announcement, ktorým sú označené oznámenia o konaní konferencií
    • X-DBWorld-Name - názov konferencie (vo väčšine prípadov iba skratka názvu)
    • X-DBWorld-Start-Date - obsahuje dátum začiatku konferencie
    • X-DBWorld-Location - obsahuje miesto konferencie

    Extrakcia informácií o udalosti z týchto hlavičiek je teda triviálna. Informácie, ktoré v hlavičkách chýbajú, sú doba trvania konferencie (v prípade viacdňových konferencií). Tieto údaje je nutné získať z tela mailu.

    Je teda nutné pokúsiť sa získať údaje z tela mailu. Analýza ukázala, že v oznámeniach o konferenciách je vždy možné nájsť údaje o tom, čo, kde a kedy sa koná. Pritom údaje kedy a kde je relatívne jednoduché zistiť, keďže dátumy sa v mailoch vyskytujú v malom množstve formátov a údaje o mieste konania sú k nim väčšinou pripojené. Napríklad:

    26-30 October 2008, Karlsruhe, Germany

    September 01-04, 2008 -- Auckland, New Zealand

    Cardiff University, UK
    7th - 10th July 2008

    Dostupnosť týchto údajov nám teda môže pomôcť pri určení doby trvania.

    Dátumy sa v texte nachádzajú v rôznych formátoch, ktoré sa však dajú rozčleniť do niekoľkých málo vzorov, na základe ktorých je možné zostrojiť regulárny výraz. Príklady dátumov:

    26-30 october, 2008
    21-22 April 2008
    7th November, 2008
    3 September 2008
    September 01-04, 2008
    August 24-27th, 2008
    June 25-27 2008
    October 27 - November 1, 2008
    25 to 27 July 2008
    June 6, 2008
    21/22 July, 2008

    Popis algoritmu

    Údaje o konferenciách program získava z hlavičiek mailu, dátum a dobu trvania zisťuje z textu mailu. Použitý regulárny výraz na získanie dátumu je nasledovný:

    {MONTH} = (january|february|...|december|jan|feb|...|dec)

    {DAY} = ([0-9]{1,2})(?:st|nd|rd|th)?

    {TO} = (?:-{1,2}|to|/)

    {YEAR} = (200[0-9]{1})

    {REGEXP} = (?:
     
    {MONTH}\s+{DAY}(?:\s*{TO}(?:\s*{MONTH}\s+)?\s*{DAY})?,?\s*{YEAR}|
     
    {DAY}(?:\s+{MONTH})?\s*{TO}\s*{DAY}\s+{MONTH},?\s*{YEAR}|
     
    {DAY}\s+{MONTH},?\s*{YEAR}
    )xi

    Program teda na základe získaných údajov vytvorí súbor, obsahujúci XML feedy pre Google Calendar pre jednotlivé udalosti (jednotlivé entries oddelené prázdnym riadkom).

    Použitie programu

    Program je vytvorený ako command-line aplikácia do PHP, je teda nutné mať nainštalovaný PHP interpreter. Následne je použitie programu priamočiare - ako argumenty skriptu sa uvedú vstupný súbor (dbworld archív) a výstupný súbor (zoznam XML feedov). Príklad:

    php events.php dbworld google_calendar.xml

    Skript je priložený ako príloha.

    Tag page (Edit tags)
    • No tags

    Files 1

    FileSizeDateAttached by 
     events.php
    Skript na extrakciu udalostí z dbworld archívu
    11.23 kB17:51, 15 Jan 2009igor.aufrichtActions
    You must login to post a comment.
    Powered by MindTouch Core