460 likes | 625 Views
Ilaria Bordino. Raccolta, ranking e query delle pagine di un webgraph. 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;
E N D
Ilaria Bordino Raccolta, ranking e query delle pagine di un webgraph
Programma della lezione • Nutch: un motore di ricerca configurabile dall’utente • Esecuzione di Pagerank sul grafoDIS; • Esecuzione di HITSsul grafoDIS; • Indicizzazione delle pagine html del grafo DIS in MG4J; • Query da riga di comando usando MG4J;
WEB Nutch readdb Link structure ParserDB db graph.txt getfiles txt2IPS files PageRank RankPR RankMG4J IPS MG4J Query HITS RankHITS
WEB Nutch readdb Link structure ParserDB db graph.txt getfiles txt2IPS files PageRank RankPG RankMG4J IPS MG4J Query HITS RankHITS
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
Nutch: download • Disponibile gratuitamente in http://www.nutch.org • Tutorial: http://www.nutch.org/tutorial.html • Presentazione generale del codice: • http://www.nutch.org/apidocs/overview-summary.html • Ultimaversione: • http://www.nutch.org/release(il file nutch-0.7.tar.gz)
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;
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 ”
Raccolta delle pagine del DIS • Creare il file urlsnella directory public/infoRetr/nutch con l’insieme iniziale di pagine html. • Ex: http://www.dis.uniroma1.it • Modificare il filenutch-0.6/conf/crawl-urlfilter.txtper personalizzare la raccolta • Aggiungere +^http://([a-z0-9]*\.)*dis.uniroma1.it/ per limitare la raccolta alle pagine al dominio dis.uniroma1.it
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
WEB Nutch readdb Link structure ParserDB db graph.txt getfiles txt2IPS files PageRank RankPG RankMG4J IPS MG4J Query HITS RankHITS
Nutch WedDB • Permette di estrarre webgraph dalle pagine raccolte; • DB puo essere aggiornato con nuovi dati; • Usata per consultare i dati nel DB (html) • Si usa WebDBReader (net.nutch.db.WebDBReader)
Interrogazione del DB • nutch readdb: comando usato per esaminare campi arbitrari del db; • Eseguire: nutch readdb per vedere le opzioni • Dimensione del webgraph: • nutch readdb mycrawl/db –stats • (sembra dare un errore: il numero di archi e’ incorretto) • Lista dei links: • nutch readdb mycrawl/db –dumplinks • Pagine con ranking piu' alto: • nutch readdb mycrawl/db –toppages 2
WEB Nutch readdb Link structure ParserDB db graph.txt getfiles txt2IPS files PageRank RankPG RankMG4J IPS MG4J Query HITS RankHITS
Output di readdb sul webgraph from http://www.dis.uniroma1.it/%7Ecatarci/DBslides/Mod2L1-2/sld006.htm to http://www.dis.uniroma1.it/%7Ecatarci/DBslides/Mod2L1-2/index.htm to http://www.dis.uniroma1.it/%7Ecatarci/DBslides/Mod2L1-2/sld001.htm to http://www.dis.uniroma1.it/%7Ecatarci/DBslides/Mod2L1-2/sld005.htm to http://www.dis.uniroma1.it/%7Ecatarci/DBslides/Mod2L1-2/sld007.htm to http://www.dis.uniroma1.it/%7Ecatarci/DBslides/Mod2L1-2/sld036.htm to http://www.dis.uniroma1.it/%7Ecatarci/DBslides/Mod2L1-2/tsld006.htm from http://www.dis.uniroma1.it/~finzi/didattica/programmaFondI0203.html to http://tibur.dis.uniroma1.it/Fond_Inf_1_INF_DIPL/index.html to http://www.dis.uniroma1.it/~cioffi/homeciof.html from http://www.dis.uniroma1.it/~buriol/infoRetr.html to http://www.dis.uniroma1.it/~cosin/html_pages/COSIN-Tools.htm
WEB Nutch readdb Link structure ParserDB db graph.txt getfiles txt2IPS files PageRank RankPG RankMG4J IPS MG4J Query HITS RankHITS
Parsing del webgraph • graphExtractor.pl: un parser scritto in perl per estrarre il webgraph • Uso: graphExtractor.pl input-fileName output-fileName • ./graphExtractor.pl dis0905.crl dis0905.txt • Dis0905edges: lista dei archi del grafo • Dis0905nodes: lista dei nodi del grafo e sue rispettivi html page
Lista degli archi • more dis0905.txtedges • 1 2 • 1 3 • 4 5 • 4 6 • 5 22 • 5 791 • 5 792 • 5 793 • 5 794 • 6 22 • 6 1001 • 6 3406 • 6 3407 • 6 3408 • 6 3409 • 7 8 • 7 9
Lista dei nodi: id e url more dis0905.txtnodes 1 http://www.dis.uniroma1.it/~quaglia/pads2002/preliminary.html 2 http://www.dis.uniroma1.it/~quaglia/pads2002/bio-mag.html 3 http://www.dis.uniroma1.it/~quaglia/pads2002/panel.html 4 http://www.dis.uniroma1.it/~ai/citations/cado-giov-scha-98.html 5 http://www.dis.uniroma1.it/~cadoli/ 6 http://www.dis.uniroma1.it/~schaerf/ 7 http://www.dis.uniroma1.it/%7Eausiello/InfoTeoIIRM/libro.html 8 http://www.dis.uniroma1.it/%7Eausiello/InfoTeoIIRM/book/bibliography.pdf 9 http://www.dis.uniroma1.it/%7Eausiello/InfoTeoIIRM/book/chapter02.pdf 10 http://www.dis.uniroma1.it/%7Eausiello/InfoTeoIIRM/book/chapter03.pdf 11 http://www.dis.uniroma1.it/%7Eausiello/InfoTeoIIRM/book/chapter04.pdf 12 http://www.dis.uniroma1.it/%7Eausiello/InfoTeoIIRM/book/chapter05.pdf
WEB Nutch readdb Link structure ParserDB db graph.txt getfiles txt2IPS files PageRank RankPG RankMG4J IPS MG4J Query HITS RankHITS
Uso di PageRank • - sudo apt-get install libstdc++2.10-glibc2.2 • (per usare la libreria DIS con gcc 4) • INPUT: il grafo in formato IPS • OUTPUT: ranking delle pagine secondo l’algoritmo pagerank • Uso: pagerank <ram> <InputFile.%d> <prob> <residual> <maxIter> <pr-report.%d> columns > pr-printFile
Uso di PageRank • InputFile: base-name del file in formato IPS • prob: probabilita’ di scegliere una pagina vicina (e non saltare a altra pagina) • residual: pagerank si ferma se il residuo e’ piu piccolo di residual • maxIter: numero massimo di iterazioni eseguite per pagerank;
Uso di PageRank • Pr-report: file con i risultati di pagerank • columns: stampa vari tipi di informazione: • N: colonna con l’id del nodo; • I: colonna con l’indegree del nodo; • O: colonna con l’outdegree del nodo; • P: colonna con il rank del nodo; • Pr-printFile: stampa di varie statistiche su Pagerank • (correlazione Indegree/Outdegree, • correlazione Indegree/Pagerank, ecc.)
Esecuzione di PageRank • ../../bin/pagerank 100 graph-ips-name.%d 0.85 0.001 50 pr-report.%d NIOP > pr-print.txt • File generati: ls pr* • Pr-report*listNodes.txt: nodeID, indegree, outdegre, e page rank values per ogni node • Pr-results*pr_distrib.txt.: valori de PR e numero di nodi con il rispettivo valori di PR • Pr-results*.report.txt.: statistiche sul i risultati
more pr-report-dis.0.listNodes.txt • NODE INDEG OUTDEG PR(0..1) PR(0..N)0 0 0 0.0000093597 01 1 2 0.0000158141 02 1 0 0.0000173092 03 1 0 0.0000173092 04 1 2 0.0000097316 05 54 5 0.0002253834 46 67 6 0.0002500968 47 3 5 0.0000126779 08 1 0 0.0000119087 09 1 0 0.0000119087 010 1 0 0.0000119087 011 1 0 0.0000119087 012 1 0 0.0000119087 013 1 7 0.0000125320 014 1 0 0.0000111593 015 1 0 0.0000111593 016 1 0 0.0000111593 017 1 0 0.0000111593 018 1 0 0.0000111593 0
Analisi dei risultati • Larger indegree: • sort –n –r –k2,3 pr-report-dis0905.0.listNodes.txt > pr-sorted.txt | more pr-sorted.txt • Larger rank: • sort –n –r –k4 pr-report-dis0905.0.listNodes.txt > valoriPR.txt • sort: comando linux per ordinare valori -n: ordina secondo valori numerici -r: ordine inverso (decrescente) -k: numero d'ordine delle colonne in base a cui ordinare • more: comando linux che mostra i risultati una schermata alla volta
Analisi dei risultati • Osservare: • pagine in ordine crescente di indegree • pagine in ordine crescentedi outdegree • pagine in ordine decrescentedi outdegree
Analisi dei risultati • awk ‘BEGIN {while(getline>0) printf(“%d %d %d %lf %lf\n”,$1,$2,$3,$4,$5)}’ pr-report-dis0905.0.listNodes.txt | sort –n –r –k4 > pr-valori.txt • more pr-valori.txt • awk: linguaggio di programmazione per text-processing. Utile per modificare testo.
more pr-report-dis.0.pr_distrib.txt • ==================================================Values grouped by 25 (unit 1.66444e-08)%unit 1.66444e-08%PageRank %num nodes9.37637e-06 19.50952e-06 3139.52616e-06 969.54281e-06 2859.55945e-06 2519.5761e-06 719.59274e-06 29.60939e-06 899.62603e-06 799.64268e-06 1589.67596e-06 259.69261e-06 609.70925e-06 1099.7259e-06 2039.74254e-06 3509.75919e-06 1249.77583e-06 679.79248e-06 254
Visualizzazione dei risultati • Stampa la distribuizione:awk 'BEGIN {getline;getline;getline;getline;while(getline>0 && $2>0) printf("%.25f %lf\n",$1,$2);}' pr-report-dis.0.pr_distrib.txt> pr-distr.txt • Gnuplot: programma a linea di comando per produrre grafici 2D e 3D. • Per entrare nell’ambiente: gnuplot • gnuplot> plot “pr-distr.txt” using 1:2 w p • gnuplot> set logscale • gnuplot> replot • gnuplot> quit
Uso di HITS • INPUT: grafo in formato IPS • OUTPUT: ranking delle pagine secondo l’algoritmo hits • Uso: hits • Nota: programma interattivo: parametri forniti da std input • InputFile: GraphName.%d • maxResidual: hits si ferma se il residuo e’ piu piccolo di maxResidual • maxIter: numero massimo di iterazioni
Esecuzione di HITS • ../../bin/hits • Insert graph name : graphName.%d • Insert maxResidual : 0.001 • Insert maxIteration : 50
File generati • hits_distrib_AUTH.txt: valori di authority e numero di nodi con il suddetto valore. • hits_distrib_HUBS.txt: valori di hubs e numero di nodi con il suddetto valore. • hits_distrib_INDEG.txt: distribuzione dell’ indegree • hits_report_correlaz.txt: risultati della correlazione • hub.listNodes.txt: risultati di hits
more auth0.listNodes.txt • 0.0000e+004.6251e-224.5167e-254.5167e-251.9430e-082.7154e-022.8796e-021.6830e-124.3075e-214.3075e-214.3075e-214.3075e-214.3075e-211.3156e-051.2460e-191.2460e-191.2460e-191.2460e-191.2460e-191.2460e-191.2460e-194.6855e+011.3740e+01
Analisi dei risultati • awk ‘BEGIN {no=0;while(getline>0) printf(“%ld %.25f\n”,++no,$1)}’ auth0.listNodes.txt > valHits.txt • sort –n –r –k2 valHits.txt | more
sort –n –r –k2 valHits.txt | more • 213 392.9900000000000090949470177211 387.6299999999999954525264911214 374.3000000000000113686837722253 371.2400000000000090949470177212 366.4800000000000181898940355252 365.18999999999999772626324561623 363.2599999999999909050529823248 362.8700000000000045474735089251 362.0099999999999909050529823249 362.00999999999999090505298231621 359.8299999999999840838427190258 358.9200000000000159161572810257 358.9200000000000159161572810256 358.9200000000000159161572810255 358.9200000000000159161572810254 358.9200000000000159161572810250 358.92000000000001591615728101622 356.74000000000000909494701771620 356.64999999999997726263245571615 356.64999999999997726263245571628 353.56000000000000227373675441627 353.56000000000000227373675441626 353.56000000000000227373675441625 353.5600000000000022737367544
WEB Nutch readdb Link structure ParserDB db graph.txt getfiles txt2IPS files PageRank RankPG RankMG4J IPS MG4J Query HITS RankHITS
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 • Generare un file di testo con le pagine che devono essere raccolte: • cut -f2 dis0905.txtnodes > pagesList.txt • Scaricare le pagine: • wget -N pagine -i pagesList.txt
WEB Nutch readdb Link structure ParserDB db graph.txt getfiles txt2IPS files PageRank RankPG QueryMG4J IPS MG4J Query HITS RankHITS
Impostazione del Classpath per MG4J • export CLASSPATH=$CLASSPATH:/Public/infoRetr/mg4j/BeanShell/bsh-2.0b2.jar:/Public/infoRetr/mg4j/mg4j-0.9.2.jar:/Public/infoRetr/mg4j/colt.jar:/Public/infoRetr/mg4j/jakarta-commons-collections.jar:/Public/infoRetr/mg4j/jal.jar:/Public/infoRetr/mg4j/jsap.jar:/Public/infoRetr/mg4j/mysql-connector-java.jar:/Public/infoRetr/mg4j/fastutil.jar:/Public/infoRetr/mg4j/jakarta-commons-io.jar:/Public/infoRetr/mg4j/javacc.jar:/Public/infoRetr/mg4j/libreadline-java.jar:/Public/infoRetr/mg4j/pdfbox.jar:/Public/infoRetr/mg4j/gnu.getopt.jar:/Public/infoRetr/mg4j/jakarta-commons-lang.jar:/Public/infoRetr/mg4j/javamail/mailapi.jar:/Public/infoRetr/mg4j/servletapi5.jar:/Public/infoRetr/mg4j/jaf.jar:/Public/infoRetr/mg4j/jakarta-commons-logging.jar:/Public/infoRetr/mg4j/jetty5/jetty5.jar:/Public/infoRetr/mg4j/mstor.jar:/Public/infoRetr/mg4j/tagsoup.jar:/Public/infoRetr/mg4j/log4j.jar:/Public/infoRetr/mg4j/velocity.jar
Indicizzazione delle pagine html • Costruzione della base documentale: • find ../htmlDIS -type f | java it.unimi.dsi.mg4j.document.FileSetDocumentCollection -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
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.
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
WEB Nutch readdb Link structure ParserDB db graph.txt getfiles txt2IPS files PageRank RankPG RankMG4J IPS MG4J Query HITS RankHITS