La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Raccolta, ranking e query delle pagine di un webgraph

Presentazioni simili


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

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

2 Programma della lezione
Nutch: un motore di ricerca configurabile dall’utente 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 Software opne source costruito al top di Jakarta Lucene
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 MG4J -- Managing GigaBytes for Java Ilaria Bordino

4 Java API per lo sviluppo di motori di ricerca testuali
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) MG4J -- Managing GigaBytes for Java Ilaria Bordino

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 MG4J -- Managing GigaBytes for Java Ilaria Bordino

6 Giovane progetto open source
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. MG4J -- Managing GigaBytes for Java Ilaria Bordino

7 Nutch: Obiettivi tecnici
Scalare all’intero 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 dell’arte per la search. MG4J -- Managing GigaBytes for Java Ilaria Bordino

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

9 Nutch: motore di ricerca configurabile dall'utente
Permette la raccolta delle pagine, l’indicizzazione e l’interrogazione 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 Disponibile gratuitamente in http://www.nutch.org
Nutch: download Disponibile gratuitamente in Tutorial: Presentazione generale del codice: Ultimaversione: (il file nutch-0.7.tar.gz)‏

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 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 l’identificatore dello user-agent. Editare il file conf/nutch-site.xml settando alcune proprietà minimali: <property> <name>http.agent.name</name> <value></value> <description>HTTP 'User-Agent' request header. MUST NOT be empty - please set this to a single word uniquely related to your organization. </description> </property> MG4J -- Managing GigaBytes for Java Ilaria Bordino

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. MG4J -- Managing GigaBytes for Java Ilaria Bordino

15 Nutch: configurazione
<property> <name>http.agent.description</name> <value></value> <description>Further description of our bot- this text is used in the User-Agent header. It appears in parenthesis after the agent name. </description></property><property> <name>http.agent.url</name> <value></value> <description>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. </description></property><property> <name>http.agent. </name> <value></value> <description>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. </description></property> MG4J -- Managing GigaBytes for Java Ilaria Bordino

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 un’unità durante il fetching. Indici: nel formato supportato da Lucene MG4J -- Managing GigaBytes for Java Ilaria Bordino

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 MG4J -- Managing GigaBytes for Java Ilaria Bordino

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. MG4J -- Managing GigaBytes for Java Ilaria Bordino

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

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

22 Interrogazione del DB: readlinkdb
Usage: LinkDbReader <linkdb> {-dump <out_dir> | -url <url>) -dump <out_dir> dump whole link db to a text file in <out_dir> -url <url> print information about <url> 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. MG4J -- Managing GigaBytes for Java Ilaria Bordino

23 Interrogazione del DB: readlinkdb
more mylinks/part-00000 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 MG4J -- Managing GigaBytes for Java Ilaria Bordino

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 <segment_dir> <output> [general options] Dumps content of a <segment_dir> as a text file to <output>.<segment_dir>name of the segment directory.<output>name of the (non-existent) output directory.* SegmentReader -list (<segment_dir1> ... | -dir <segments>) [general options] List a synopsis of segments in specified directories, or all segments in a directory <segments>, and print it on System.out<segment_dir1> ...list of segment directories to process-dir <segments>directory that contains multiple segments* SegmentReader -get <segment_dir> <keyValue> [general options] Get a specified record from a segment, and print it on System.out.<segment_dir>name of the segment directory.<keyValue>value of the key (url).Note: put double-quotes around strings with spaces. MG4J -- Managing GigaBytes for Java Ilaria Bordino

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 MG4J -- Managing GigaBytes for Java Ilaria Bordino

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 MG4J -- Managing GigaBytes for Java Ilaria Bordino

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 MG4J -- Managing GigaBytes for Java Ilaria Bordino

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 MG4J -- Managing GigaBytes for Java Ilaria Bordino

29 numNodes=$(wc -l < webgraph.dat )
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 MG4J -- Managing GigaBytes for Java Ilaria Bordino

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 WEB readdb Nutch ParserDB db getfiles txt2IPS files RankPG PageRank
Link structure ParserDB db graph.txt getfiles txt2IPS files PageRank RankPG QueryMG4J IPS MG4J Query HITS RankHITS

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 dell’indice: java -Xmx512M it.unimi.dsi.mg4j.tool.Index -- downcase -S htmldis.collection collectionDIS

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 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 WEB readdb Nutch ParserDB db getfiles txt2IPS files RankPG PageRank
Link structure ParserDB db graph.txt getfiles txt2IPS files PageRank RankPG RankMG4J IPS MG4J Query HITS RankHITS


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

Presentazioni simili


Annunci Google