Vyhľadávanie infrmácií Vypracval: Milan Baran Téma prjektu: Šprtvé udalsti Kľúčvé slvá: IR, vyhľadávanie infrmácií, GATE, Jape, LKB Gazetteer, Lucene, crawler, websphinx, sccer, events, scre Opis prjektu Cieľm prjektu je vytvriť aplikáciu, ktrá by bla schpná vyextrahvať dáta z zvlenéh dátvéh zdrja a tiet dáta rzumnu frmu prezentvať užívateľvi. Takt prezentvané údaje užívateľvi zjedndušujú prácu a šetria čas. Pri veľkm bjeme dát nie je nútený manuálne vyhľadávať určitý typ infrmácie ale aplikácia h vyhľadá autmaticky. Ďalej cieľm bl zrejmiť si techniky a prstriedky spjené s prblematiku vyhľadávania infrmácií. Nadbudnuté infrmácie bli následne využité pri tvrbe zadania Šprtvé udalsti. V tmt prjekte bl ptrebné identifikvať šprtvé kluby, knkrétne futbalvé tímy a následne vyhľadať futbalvý výsledk. GATE General Architecture fr Text Engineering V tejt časti nie je cieľm pisvať č t GATE vlastne je. Všetk hľadne tht silnéh nástrja na pdpru vyhľadávania infrmácií sa dzviete na jeh dmvskej stránke (http://gate.ac.uk/). Osbne dprúčam zbežne si prezrieť dmvskú stránku a ta.pdf, ktrý je pribalený v inštalačnm balíku GATE, a zvážiť jeh využitie v vašm prjekte. Kladne stránky: Mnžstv pdprných pluginv Websphinx crawler Vizualizácia antácií LKB Gazetteer (gazetteer genervaný z nlógie) Lucene Searchable Datastre (lucene úlžisk s mžnsťu vyhľadávania) ANNIE (všetk ptrebné na základnú antáciu textu) Mžnsť vyhdncvať výsledky (prvnanie autmatickéh a manuálneh antvania) Veľmi slušná dkumentácia a JavaDc Jednduchá integrácia d vlastnej Java aplikácie Nastaviteľnsť Záprné stránky: Celý GATE je static inštancia (takže pdpra multi-threadv je slabá) Lucene Datastre nie je mžné tvriť a prehliadať v Luke Celkv hdntím prstredie GATE ak veľmi schpný nástrj, ktrý dkáže veľmi rýchl a spľahliv vyriešiť prblém v blasti vyhľadávania infrmácií. Každému by sm h dpručil využiť pre všetky malé a stredné prjekty a v budúcnsti s jeh využitím pčítam aj ja. - 1 -
JAPE Transducent ukážka pravidiel V mjm prjekte sm identifikval 4 typy antácií a t knkrétne: Názv (Name) Original Markups - H1 element Dátum (Date) Gazetteer + JAPE transducent Tím (Team) LKB Gazetteer + JAPE transducent Výsledk (Scre) JAPE tranducent Názv je získavaný z základnej antácie riginal markups, ktrý bsahuje html elementy. Na antáciu Dátumu sm pužil klasický gazetteer a transducent z príkladu v plugine ANNIE, s drbnymi upravami. Zaujímavejšie praktiky sm pužil na antvanie tímu, kde je pužitý LKB gazetteer genervaný ntlógiu. Ak zdrj sm pužil DBPedia (ntlgia z Wikipedia) a vytiahl sm si znej všetky futbalvé mužstvá. Na rzdiel d ANNIE gazetteeru, ktrý bsahuje minr a majr type LKB gazetter bsahuje infrmácie len triede (class) a inštancie (inst) knkrétnej antácie. Pričm trieda je autmaticky nastavená na typ inštancie, v mjm prípade na http://www.w3.rg/2002/07/wl#thing. Inštancia antácie je nastavená pdľa druhéh parametru v skripte v mjm prípade na http://dbpedia.rg/resurce/názv, tent parameter bude pravdepdbne dôležitý pre funkciu Semantic Anntatin Enrichment, ktrá by mala rzširvať jedntlivé antácie ďalšie prvky (features) a t realtime spaql dtazmi. Môj Gazetteer je získaný skriptm napísanm v SPARQL jazyku (veľmi pdbné ak SQL). Tent skript musí byť ulžený ak query.txt v adresári, ktrý sa predá ak parameter pluginu LKB Gazetter. Adresár taktiež musí bsahvať cnfig.ttl, ktrý je mžné nájsť v ukážkvých príkladch pluginu. Súbr: Query.txt PREFIX faf: <http://xmlns.cm/faf/0.1/> PREFIX rdf: <http://www.w3.rg/1999/02/22-rdf-syntax-ns#> PREFIX db: <http://dbpedia.rg/ntlgy/> PREFIX rdfs: <http://www.w3.rg/2000/01/rdf-schema#> SELECT?Name?Subject WHERE { }?Subject rdf:type <http://dbpedia.rg/ntlgy/sprtsteam>.?subject faf:name?name V prípade, že si chcete práve získaným antáciám pridať ďalšie infrmácie (features) budete ptrebvať vytvriť JAPE Transducer. Ak základ môžete pužiť nasledujúci transducer, ktrý pridá k antácií tímu infrmácie kind a string. Na pridávanie nvých infrmácií k antácii existujú dve cesty v tmt prípade ide tú zlžitejšiu. O tej jednduchšej sa dčítate v manuály aleb ju pchpíte z príkladv v adresári pluginu. Súbr: Team.jape Phase: Team Input: Tken SpaceTken Lkup Cntext //nezabudnite pripísať všetky druhy antácií, ktré chcete pužiť Optins: cntrl = appelt debug=true //debug=true pridá debugvacie infrmácie d message knzly Rule: Team - 2 -
({Lkup.class == "http://www.w3.rg/2002/07/wl#thing"}) :team //berie t č je uzavreté v pslednej zátvrke --> { gate.anntatinset teamset = ((gate.anntatinset)bindings.get("team")); gate.anntatin teamann = (gate.anntatin) teamset.iteratr().next(); //teamann je antácia typu Lkup genervaná LKB Gazetterm a bsahuje class a inst features gate.anntatinset tkenas = inputas.get("tken", entityann.getstartnde().getoffset(), entityann.getendnde().getoffset()); List tkens = new ArrayList(tkenAS); if (tkens.isempty()) return; gate.anntatin curtken=null; String teamname = ""; fr (int i=0; i < tkens.size(); i++) { curtken = (gate.anntatin) tkens.get(i); teamname = teamname + (String) curtken.getfeatures().get("string") + " "; } teamname = teamname.substring(0,teamname.length()-1); entityann.getfeatures().put("kind", "current"); entityann.getfeatures().put("string", teamname); utputas.add(annset.firstnde(), annset.lastnde(), "TempTeam", entityann.getfeatures()); //pridá na výstup nvý druh antácie TempTeam } Č dôležité si je ptrebné uvedmiť pri integrácií GATE d JAVA aplikácie? Je ptrebné si uvedmiť, že GATE je static trieda a teda nie je ptrebné vytvárať jej inštanciu. Na jej inicializáciu stačí zavlať príkaz Gate.init(); Tu je ptrebné zabezpečiť aby bli v prjekte pridané všetky knižnice z adresára {GATE_HOME}\lib a nastavená dmvský adresár GATE-u v systémvých premených aleb predaný prepinačm Dgate.hme ale na t vás upzrní chybvá hláška v knzle. Ďalej je dôležité vedieť, že skr všetk v GATE je typu LR (Language Resurce) ak Crpus, Dcument, PR (Prcesing Resurce) ak rôzne generátry, parsery aleb tagery a nakniec VR (Visual Resurce) slúžiace na prezentáciu výsledkv. Inštancie sa nevytvárajú klasickým spôsbm new NázvTriedy(parametre); ale využitým statickej triedy Factry takže na vytvrenie nvéh Crpus-u nepužijeme príkaz Crpus názv_súbru_dkumentv = new Crpus(parametre); ale Crpus názv_súbru_dkumentv = Factry.newCrpus("Názv"); Obdbne t je v prípade dkumentu. Ďalší príklad je na načítanie a pužitie pluginu na autmatické sťahvanie stránk. Knkrétne sa jedná plugin Web_Crawler_Websphinx a najprv h je ptrebné načítať d GATE: - 3 -
File pluginhme = new File(new File(Gate.getGateHme(), "plugins"), "Web_Crawler_Websphinx"); try { Gate.getCreleRegister().registerDirectries(pluginHme.tURI().tURL()); } catch (MalfrmedURLExceptin e) { return; } catch (GateExceptin gex) { return; } Následne je ptrebné vytvriť inštanciu pluginu a správne h nastaviť. Pret si vytvríme FeatureMap, ak je vidieť aj tu je ptrebné získať inštanciu z Factry. FeatureMap nám slúži na predanie parametrv sťahvaču. FeatureMap features = Factry.newFeatureMap(); features.put("name", "názv"); //názv PR features.put("rt", "http://niec.sk"); //dkiaľ sa bude sťahvať features.put("dmain", "SUBTREE"); //ak sa bude sťahvať (viď. Dkumentácia pluginu) features.put("depth", 3); //hĺbka d ktrej sa bude sťahvať features.put("max", 10); //maximálny pčet stiahnutých stránk features.put("dfs", false); //ak sa bude sťahvať (viď. Dkumentácia pluginu) features.put("surce", null); //prepisuje rt, zznam stránk na stiahnutie features.put("utputcrpus", inštanciacrpusu); //tu je ptrebné uviesť inštanciu Crpusu kam sa majú stiahnuté dkumenty nahrať Keď už máme načítaný plugin v GATE a vytvrenú mapu parametrv je ptrebné vytvriť inštanciu pluginu a t nasledvne. PrcessingResurce PR = (PrcessingResurce) Factry.createResurce("crawl.CrawlPR", features); PR.execute(); A nakniec spustiť činnsť pluginu. Ak všetk zamrzl, paradxne plugin pravdepdbne funguje! V systémvej knzle by sa mali zbraziť infrmačné hlásenia pluginu. Kým sa nestiahnu všetky stránky tak sa nebude dať nič rbiť. Odprúčam samtné spustenie pluginu implementvať ak thread ale upzrňujem, že spúšťať plugin v viacerých threadch nefunguje, pravdepdbne pretže celý GATE je static inštancia. V prípade, že by ste chceli pužiť iný plugin pstup je bdbný, parametre získate z adresára pluginu v {GATE_HOME}\plugins\názv_pluginu\crele.xml. Z tht xml súbru je mžné vyčítať aké parametre je ptrebné nastaviť a taktiež akéh typu. Vyhdntenie výsledkv Na kniec tht prjektu je ptrebné vyhdntiť presnsť a pkrytie s ktrým aplikácia vyhdncuje stránky. Tiet vlastnsti sm vypčítal na vzrke dvch dkumentv. Súbr (vzrka.zip) bsahuje tiet dkumenty antvané autmaticky Trarex aplikáciu a taktiež manuálne mnu sbne, súbry sú ulžené v adresárvej štruktúre pužívanej Lucene Based Searchable Datastre a taktiež v xml štruktúre. Na vyhdntenie sm pužil nástrj GATE Anntatin Diff Tl, ktrý mi vyhdntil presnsť a pkrytie pre pužívané antácie. Pzn.: Keďže nie sm nemylný - mhl sa stať, že sm manuálne zabudl za-antvať nejaký tím č by mal za následk zhršenie hdnty Recall (pkrytia). Pzn.2: Názv článku sm nehdntil, keďže ide element H1, ktrý sa v prevažnej väčšine na stránke nachádza len raz. Hdnty pre Recall a Precisin sa v tmt prípade blížia 1.00. - 4 -
Súbr: Chelsea Zdrj: http://uk.eursprt.yah.cm/ Slv: 3732 All Crrect Missing False Ps. Recall Precisin Date 41 38 0 3 1.00 0.93 Scre 24 12 12 0 0.50 1.00 Team 97 64 7 26 0.90 0.71 Súbr: Prfutbal Zdrj: http://www.prfutbal.sk/ Slv: 1514 All Crrect Missing False Ps. Recall Precisin Date 18 13 0 5 1.00 0.72 Scre 1 0 1 0 0.00 - Team 3 0 3 0 0.00 - Súbr: LiveScre Zdrj: http://www.livescre.cm/ Slv: 876 All Crrect Missing False Ps. Recall Precisin Date 65 65 0 0 1.00 1.00 Scre 64 19 45 0 0.30 1.00 Team 124 72 50 2 0.59 0.97 Prvá tabuľka vyhdncuje anglickú stránku z prtálu eursprt. V tmt prípade sú hdnty pkrytia a presnsti veľmi dbré. Za zmienku stjí pkrytie Scre, ktré je len 50%. Tent jav je zapríčinený tým, že jeden aleb ba tímy, ktrých sa výsledk týka nebli rzpznané gazetteerm a teda transducer ich nerzpznal ak tímy ale len ak textvé reťazce. Druhá tabuľka vyhdncuje slvenskú stránku z prtálu prfutbal. Pre tút kmbináciu vstupv pracuje aplikácia úplne zle. Najväčšie prblémy v tmt prípade zapríčiňuje diakritika a sklňvanie. V prípade dátumv iný frmát dátumv a slvenské názvy. Tretia tabuľka vyhdncuje anglickú úvdnú stránku z prtálu livescre. Aplikácia identifikvala dátum správne. Scre identifikvala s malým pkrytím č zapríčinila nízka schpnsť rzpznať futbalvý tím viď pkrytie tímu je len 60% aj keď presnsť je výbrná. Inštalácia Aplikácia Crbelus bla vyvíjaná v vývjvm prstredí Netbeans 6.7.1. Archivvané súbry si pridajte d NetBeans nasledvne: 1. Otvrte si vývjvé prstredie NetBeans. 2. Vyberte z hlavnéh menu File> Open Prject a v tvrenm najdíte rzbalené súbry z archivu. 3. Skntrlujte či su v prjekte správne pridané všetky GATE library 4. V triede Engine.java si upravte cesty k súbrm ak ptrebujete 5. Spustite aplikáciu všetk statné sa nastaví samé - 5 -
- 6 -