La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Raccolta, ranking e query delle pagine di un webgraph Ilaria Bordino.

Presentazioni simili


Presentazione sul tema: "Raccolta, ranking e query delle pagine di un webgraph Ilaria Bordino."— Transcript della presentazione:

1 Raccolta, ranking e query delle pagine di un webgraph Ilaria Bordino

2 Pagina 2 Programma della lezione Nutch: un motore di ricerca configurabile dallutente Esecuzione di Pagerank sul grafoDIS; Esecuzione di HITS sul grafoDIS; Indicizzazione delle pagine html del grafo DIS in MG4J; Query da riga di comando usando MG4J;

3 Nutch Framework Apache per la costruzione di crawler scalabili e applicazioni per Web Search Software opne source costruito al top di Jakarta Lucene Disponibile gratuitamente presso Ilaria Bordino MG4J -- Managing GigaBytes for Java

4 Jakarta Lucene Java API per lo sviluppo di motori di ricerca testuali Non applicazione ma API che consente la realizzazione di search applications customizzate in base alle specifiche esigenze degli sviluppatori. Grande comunità di sviluppatori Tecnologia usata nello sviluppo di molti siti e applicazioni web (furl, zoe, jira, lookout) Ilaria Bordino MG4J -- Managing GigaBytes for Java

5 Lucene: principali caratteristiche Indicizzazione scalabile e performante Algoritmi per la Search potenti, accurati ed efficienti: Include supporto per ranked searching, fielded searching, wildcard queries, phrase queries, proximity queries, range queries and more Ricerca su molteplici indici con merging dei risultati Permette esecuzione simultanea di update e search Cross platform solution: 100% java, disponibile come software open source Ilaria Bordino MG4J -- Managing GigaBytes for Java

6 Nutch Giovane progetto open source Software per lo sviluppo di applicazioni per Web Search Non è un sito di ricerca ma intende essere un mezzo per potenziare molti siti di ricerca Non è un progetto di ricerca ma intende essere un supporto per la ricerca Obiettivo: incrementare la disponibilità di tecnologie per Web Search Obiettivo: aumentare la trasparenza nella web search. Ilaria Bordino MG4J -- Managing GigaBytes for Java

7 Nutch: Obiettivi tecnici Scalare allintero Web: milioni di server differenti, miliardi di pagine: il completamento di un crawl richiede settimane e cè molto rumore nei dati Supporto per traffico elevato (migliaia di ricerche al secondo) Qualità paragonabile allo stato dellarte per la search. Ilaria Bordino MG4J -- Managing GigaBytes for Java

8 Nutch: Architettura Ilaria Bordino MG4J -- Managing GigaBytes for Java

9 Pagina 9 Nutch: motore di ricerca configurabile dall'utente Permette la raccolta delle pagine, lindicizzazione e linterrogazione delle pagine web. INPUT: un set di pagine html OUTPUT: motore di ricerca sulle pagine raccolte USO: raccolta di pagine e ricerca sulla collezione indicizzata

10 Pagina 10 Nutch: download Disponibile gratuitamente in –Tutorial: –Presentazione generale del codice: – Ultimaversione: (il file nutch-0.7.tar.gz)

11 Pagina 11 Nutch: configurazione Java 1.4.x (http://java.sun.com/j2se/downloads.html) – Tomcat di Apache 4.x (http://jakarta.apache.org/tomcat) – Almeno un gigabyte su disco; – Connessione Internet veloce;

12 Pagina 12 Nutch: configurazione Inizializzare NUTCH_JAVA_HOME con la directory radice di Java. –edit.bashrc per inserire export NUTCH_JAVA_HOME =/usr/local/lib/j2sdk1.4.2_03 –MAC OS: export NUTCH_JAVA_HOME=/Library/Java/Home Aggiungere nutch/bin al PATH –edit.bashrc per inserire export PATH =$ PATH:nutch/bin

13 Nutch: Configurazione A partire dalla versione 0.8 è necessario configurare alcuni parametri come lidentificatore dello user-agent. Editare il file conf/nutch-site.xml settando alcune proprietà minimali: Ilaria Bordino MG4J -- Managing GigaBytes for Java http.agent.name HTTP 'User-Agent' request header. MUST NOT be empty - please set this to a single word uniquely related to your organization.

14 Nutch: Configurazione NOTE: You should also check other related properties: http.robots.agents http.agent.description http.agent.url http.agent. http.agent.version and set their values appropriately. Ilaria Bordino MG4J -- Managing GigaBytes for Java

15 Nutch: configurazione http.agent.description Further description of our bot- this text is used in the User-Agent header. It appears in parenthesis after the agent name. http.agent.url A URL to advertise in the User-Agent header. This will appear in parenthesis after the agent name. Custom dictates that this should be a URL of a page explaining the purpose and behavior of this crawler. http.agent. An address to advertise in the HTTP 'From' request header and User-Agent header. A good practice is to mangle this address (e.g. 'info at example dot com') to avoid spamming. Ilaria Bordino MG4J -- Managing GigaBytes for Java

16 Crawlare il Web con Nutch Nutch è stato progettato per la gestione di crawl su larga scala, che siano eseguiti in un sistema distribuito e che possono richiedere molto tempo (settimane) per il completamento. I dati raccolti sono organizzati nel modo seguente: Crawldb: database del crawl. Contiene info su ogni url nota a nutch, incluso se/quando è stato fatto fetching; Linkdb: database dei link. Contiene inlink noti a tutte le url raccolte, riportando url sorgente e anchor text; Un insieme di segmenti; un segmento è un insieme di URL considerate come ununità durante il fetching. Indici: nel formato supportato da Lucene Ilaria Bordino MG4J -- Managing GigaBytes for Java

17 Crawlare il Web con Nutch Un segmento è una directory che contiene le seguenti sottodirectory: crawl_generate contiene elenco URL di cui bisogna fare il fetching crawl_fetch contiene lo stato di fetching di ogni URL Content: mantiene il contenuto associato a ogni URL parse_text contiene il testo estratto con il parsing da ogni URL parse_data contiene outlink e metadata estratti con il parsing crawl_parse contiene gli outlink, usati per aggiornare crawldb Ilaria Bordino MG4J -- Managing GigaBytes for Java

18 Nutch: due approcci al crawling Intranet crawling, usando il comando crawl: scelta appropriata se si vuole effettuare un crawl di dimensioni limitate, fino a 1M pagine Whole-Web crawling: da utilizzare per crawl molto estesi, che abbiano bisogno di una quantità notevole di tempo e di risorse computazionali. Maggiore controllo usando comandi a più basso livello: inject, fetch, generate, updatedb. Ilaria Bordino MG4J -- Managing GigaBytes for Java

19 Pagina 19 Raccolta delle pagine del DIS Creare il file dis/urls e inserire la home page –Ex: Modificare il file nutch-0.6/conf/crawl-urlfilter.txt per personalizzare la raccolta Aggiungere +^http://([a-z0-9]*\.)*dis.uniroma1.it/per limitare la raccolta alle pagine al dominio dis.uniroma1.it Inizializzare crawldb

20 Pagina 20 Raccolta delle pagine del DIS Lista di parametri: nutch crawl –-dir : directory dove saranno memorizzati i resultati della raccolta –-depth : profondita dei path a partire dalla pagina radice –delay : intervallo di tempo, in secondi, fra due consecutive richieste su uno stesso host. –-threads : numero di threads eseguiti in parallelo Esecuzione del crawl: – nutch crawl urls -dir mycrawl -depth 3 >& mycrawl.log – NON ESEGUIRE A LEZIONE

21 Interrogazione del DB Usage: CrawlDbReader (-stats | -dump | -topN [ ] | -url ) directory name where crawldb is located -stats [-sort] print overall statistics to System.out [-sort]list status sorted by host-dump [-format normal|csv ]dump the whole db to a text file in [-format csv]dump in Csv format[-format normal]dump in standard format (default option) -url print information on to System.out -topN [ ]dump top urls sorted by score to [ ]skip records with scores below this value.This can significantly improve performance. Ilaria Bordino MG4J -- Managing GigaBytes for Java

22 Interrogazione del DB: readlinkdb Usage: LinkDbReader {-dump | -url ) -dump dump whole link db to a text file in -url print information about to System.out Dopo aver eseguito un crawl possiamo analizzare la struttura degli hyperlink della collezione raccolta. nutch readlinkdb mycrawl/linkdb/ -dump mylinks Il comando crea una directory chiamata mylinks che conterrà informazioni sugli inlink delle URL create in semplice formato testuale. Ilaria Bordino MG4J -- Managing GigaBytes for Java

23 Interrogazione del DB: readlinkdb more mylinks/part fromUrl: anchor: Skip to second columnhttp://www.dis.uniroma1.it/~wine09/#ja-contentInlinks: fromUrl: anchor: Skip to contenthttp://www.dis.uniroma1.it/~wine09/#ja-mainnavInlinks: fromUrl: anchor: Skip to main navigationhttp://www.dis.uniroma1.it/~wine09/index.phpInlinks: fromUrl: anchor: WINE'09, the fifth Workshop on Internet & Network Economicshttp://www.dis.uniroma1.it/~wine09/media/system/js/cap tion.jsInlinks: fromUrl: anchor: nks: fromUrl: anchor: egrep -v $'^$' mylinks/part >inlinks.txt Ilaria Bordino MG4J -- Managing GigaBytes for Java

24 Estrazione degli outlink Il database linkdb fornisce informazioni relavimente ai soli link entranti. Per estrarre gli outlink dai dati raccolti dobbiamo leggere I segmenti. Usiamo il comando readseg Usage: SegmentReader (-dump... | -list... | -get...) [general options]* General options:-nocontentignore content directory-nofetchignore crawl_fetch directory- nogenerateignore crawl_generate directory-noparseignore crawl_parse directory- noparsedataignore parse_data directory-noparsetextignore parse_text directory* SegmentReader -dump [general options] Dumps content of a as a text file to. name of the segment directory. name of the (non-existent) output directory.* SegmentReader -list (... | -dir ) [general options] List a synopsis of segments in specified directories, or all segments in a directory, and print it on System.out...list of segment directories to process-dir directory that contains multiple segments* SegmentReader -get [general options] Get a specified record from a segment, and print it on System.out. name of the segment directory. value of the key (url).Note: put double-quotes around strings with spaces. Ilaria Bordino MG4J -- Managing GigaBytes for Java

25 Estrazione outlink: merging dei vari segmenti Usiamo il comando mergeseg per fondere i vari segmenti ottenuti con il crawling nutch mergesegs whole-segments mycrawl/segments/* Quindi usiamo il comando readseg per estrarre outlink dal segmento globale ottenuto nutch readseg -dump whole-segments/ / dump-outlinks cat dump-outlinks/dump | egrep 'URL|toUrl' >outlinks.txt Ilaria Bordino MG4J -- Managing GigaBytes for Java

26 Lista degli outlink URL:: outlink: toUrl: anchor: Identit? visiva outlink: toUrl: anchor: Sitemap outlink: toUrl: anchor: Merchandising outlink: toUrl: anchor: Elenco telefonico outlink: toUrl: anchor: Contatti outlink: toUrl: anchor: Chi siamo outlink: toUrl: anchor: Iniziative culturali proposte dagli studenti (finanziate dall?universit?) outlink: toUrl: anchor: Laboratorio teatrale outlink: toUrl: anchor: Cappella universitaria outlink: toUrl: anchor: Servizio di educazione nutrizionale e gastronomica outlink: toUrl: anchor: Servizi di counseling psicologico outlink: toUrl: anchor: Postazioni per l?utilizzo di pc e connessioni internet outlink: toUrl: anchor: Distribuzione gratuita di software Ilaria Bordino MG4J -- Managing GigaBytes for Java

27 Creazione della lista dei link java nutchGraph.PrintInlinks inlinks.txt >links.txt java nutchGraph.PrintOutlinks outlinks.txt >>links.txt Rimozione di eventuali duplicati: LANG=C sort links.txt | uniq >cleaned-links.txt head cleaned-links.txt col1http://www.dis.uniroma1.it/~wine09/http://www.dis.uniroma1.it/~wine09/#ja- col2http://www.dis.uniroma1.it/~wine09/http://www.dis.uniroma1.it/~wine09/#ja- contenthttp://www.dis.uniroma1.it/~wine09/http://www.dis.uniroma1.it/~wine09/#ja- mainnavhttp://www.dis.uniroma1.it/~wine09/http://www.dis.uniroma1.it/~wine09/index. phphttp://www.dis.uniroma1.it/~wine09/http://www.dis.uniroma1.it/~wine09/media/syst em/js/caption.jshttp://www.dis.uniroma1.it/~wine09/http://www.dis.uniroma1.it/~wine09 /media/system/js/mootools.jshttp://www.dis.uniroma1.it/~wine09/http://www.dis.unirom a1.it/~wine09/modules/mod_briaskISS/mod_briaskISS.jshttp://www.dis.uniroma1.it/~w ine09/http://www.dis.uniroma1.it/~wine09/templates/ja_purity/js/ja.rightcol.jshttp://www.dis.uniroma1.it/~wine09/http://www.dis.uniroma1.it/~wine09/templates/ja_purity/js/ja.s cript.js Ilaria Bordino MG4J -- Managing GigaBytes for Java

28 Creazione mappa delle URL cut -f1 links.txt >url-list.txt cut -f2 links.txt >>url-list.txt LANG=C sort url-list.txt | uniq >sorted-url-list.txt java -Xmx2G it.unimi.dsi.util.FrontCodedStringList -u -r 32 umap.fcl < sorted-url-list.txt java -Xmx2G it.unimi.dsi.mg4j.util.MinimalPerfectHash --offline sorted-url-list.txt -c it.unimi.dsi.mg4j.util.HashCodeSignedMinimalPerfectH ash -s umap.smph Ilaria Bordino MG4J -- Managing GigaBytes for Java

29 Creazione del grafo java -Xmx2G nutchGraph.PrintEdges cleaned-links.txt umap.smph > webgraph.dat numNodes=$(wc -l < webgraph.dat ) java -Xmx2G nutchGraph.IncidenceList2Webgraph $numNodes webgraph java -Xmx2G it.unimi.dsi.webgraph.BVGraph -g ASCIIGraph webgraph webgraph Ilaria Bordino MG4J -- Managing GigaBytes for Java

30 Pagina 30 Download delle pagine html –Procediamo all' indicizzazione delle pagine raccolte da Nutch mediante MG4J. –Le pagine devono essere precedentemente scaricate, visto che non e possible ottenerle dal db di Nutch –Scaricare le pagine: wget -N pagine –I sorted-url-list.txt

31 Pagina 31 db Link structure IPS RankPG Nutch ParserDB WEB readdb graph.txt txt2IPS PageRank HITS RankHITS getfiles files MG4J QueryMG4J Query

32 Pagina 32 Indicizzazione delle pagine html – Costruzione della base documentale: find../htmlDIS -type f | java it.unimi.dsi.mg4j.document.FileSetDocumentCollectio n -f it.unimi.dsi.mg4j.document.HtmlDocumentFactory htmldis.collection –Creazione dellindice: java -Xmx512M it.unimi.dsi.mg4j.tool.Index -- downcase -S htmldis.collection collectionDIS

33 Pagina 33 MG4J: Scorer – Tra gli scorer di MG4J : – clarkeComarckScorer: documentazione in Class ClarkeCormarkScorer di MG4J – DocumentRankScorer: assegna un rank pre-calcolato alle pagine. Il default e il resultato di query booleana: le pagine sono ritornate in ordine crescente di suei ID.

34 Pagina 34 Interrogazione da riga di comando – java it.unimi.dsi.mg4j.query.Query –help –Uso: java Query -c collection collectionBaseName1 collectionBaseName2 –java -Xmx512M it.unimi.dsi.mg4j.query.Query -c htmldis.collection collectionDIS-text collectionDIS-title –[!help]>Dipartimento –Redirezionare la query su un file di output (outFile) –grep "Document #" outFile | more

35 Pagina 35 db Link structure IPS RankPG Nutch ParserDB WEB readdb graph.txt txt2IPS PageRank HITS RankHITS getfiles files MG4J RankMG4J Query


Scaricare ppt "Raccolta, ranking e query delle pagine di un webgraph Ilaria Bordino."

Presentazioni simili


Annunci Google