Ranking di pagine Web
Ilaria Bordino, Yahoo! Research Barcelona
Ida Mele, Sapienza Universita’ di Roma
Ranking delle pagine
• Raccolta delle pagine html;
• Costruzione del webgraph;
• Transformazione dei dati in un formato adeguato;
• Ranking delle pagine del webgraph:
– Con Pagerank;
– Con Hits.
Ranking Web
pages
Pagina 2
Librerie per Web IR
• FastUtil
• DSI Utilities
• WebGraph
• LAW
• MG4J
Ranking Web
pages
Pagina 3
FastUtil
URL: http://fastutil.dsi.unimi.it
 Tre nuclei fondamentali:

- Classi che estendono Java Collections Framework
esponendo strutture dati (mappe, insiemi, liste e code con
priorità) con modesto ingombro di memoria e supporto per
accesso/inserimento veloce di elementi.
- Classi che espongono strutture dati (array, insieme, liste) a
64 bit per il supporto di collezioni di dati molto grandi;
- Classi che forniscono supporto per I/O veloce ed efficiente
su file binari e testuali.
Ranking Web
pages
Pagina 4
FastUtil: Supporto per collezioni tipizzate
Fastutil specializza le classi più utili di Java Collections
Framework (HashSet, HashMap, LinkedHashSet,
LinkedHashMap, TreeSet, TreeMap, IdentityHashMap,
ArrayList, Stack) fornendo delle versioni che accettano uno
specifico tipo di chiave/valore (es., interi).
Ogni struttura dati implementa, se possibile, la corrispondente
interfaccia standard (ad es. Map per le mappe). Le strutture
dati di Fastutil possono essere pluggate all'interno di codice
già esistente ed utilizzate con metodi di accesso tradizionali.
Le classi di Fastutil forniscono anche molte versioni polimorfiche
dei metodi più ampiamente utilizzati, implementando interfacce
più stringenti che estendono e rafforzano quelle standard.
Ranking Web
pages
Pagina 5
FastUtil: Supporto per collezioni di grandi dimensioni
Fastutil 6 mette a disposizione un insieme di classi per la
gestione di collezioni di dati molto grandi (dimensione > 2^31).
Big arrays: array di array utilizzabili come array
monodimensionali con indici a 64 bit.
Big lists: liste a 64 bit
Big hash set: set la cui dimensione è limitata solo dalla quantità
di memoria disponibile.
Tutte le collezioni implementano l'interfaccia Size64, il cui metodo
size64() ritorna la dimensione della collezione come long
integer
Ranking Web
pages
Pagina 6
FastUtil: Supporto per I/O pratico ed efficiente
Fastutil fornisce una vasta collezione di metodi che forniscono un
supporto pratico ed efficiente per leggere/scrivere grandi
vettori ottenere iteratori da file binari o testuali, etc.
Obiettivo principale è l'incremento delle prestazioni (sia spazio
che memoria).
I metodi rilevanti per mappe e insieme tipizzati sono 2-10 volte
più veloci di quelli delle classi standard.
Fastutil riduce enormemente la creazione e collezione di oggetti,
utilizzando metodi e iteratori polimorfici, che non richiedono la
creazione di oggetti wrapper,
e tecniche di hashing che permettono di evitare creazione di un
grande numero di oggetti e la loro raccolta da parte del
garbage collector.
Ranking Web
pages
Pagina 7
Dsiutil
• MutableString: le classi standard messe a disposizione
da Java, String e StringBuffer, giacciono agli estremi
opposti dello spettro immutabile/modificabile.
• Indicizzare testi su larga scala richiede alcune
caratteristiche intemerdie: ad es, usare una stringa
modificabile, una volta “congelata”, nello stesso modo
ottimizzato di una immutabile
• Allo stessp tempo non abbiamo bisogno della
sincronizzazione (che rallenta StringBuffer)
• Controllare se una parola esiste nel dizionario senza
creare un nuovo oggetto
Ranking Web
pages
Pagina 8
Dsiutil
• Altre utilità:
• BitVector – implementazioni flessibili e performanti
• It.unimi.dsi.compression gestisce diversi tipi di
codifiche
• ProgessLogger
• I/O
• Package util: fornisce implementazioni di strutture
come prefix map e filtri di bloomit
Ranking Web
pages
Pagina 9
WebGraph
• Framework che consente la manipolazione di grafi di
grandi dimensione grazie all’utilizzo di moderne tecniche
di compressione. Il framework si compone di:
• Codici (zeta- codes) particolarmente adatti per la
memorizzazione di grafi del web.
• Algoritmi in grado di accedere ai grafi compressi senza
effettuarne la decompressione, grazie a tecniche di tipo
lazy che rimandano la decompressione al momento in cui
diventa necessaria.
• Implementazione java completa e documentata.
• http:/webgraph.dsi.unimi.it
Ranking Web
pages
Pagina 10
WebGraph: Classi fondamentali
• ImmutableGraph: specifica metodi d’accesso per la
manipolazione di un grafo immutabile.
• BVGraph: fornisce metodi flessibili e configurabili per
memorizzare e utilizzare grafi del web in formato compresso.
• ASCIIGraph può essere usata per leggere grafi rappresentati
attraverso un semplice formato testuale.
• ArcLabelledImmutableGraph: grafi etichettati sugli archi.
• Transform: consente l’applicazione di molte trasformazioni,
come simmetrizzazione o calcolo del trasposto.
Ranking Web
pages
Pagina 11
WebGraph: Rappresentazione compressa
• La rappresentazione compressa di un grafo in formato BV è
costituita da 3 file:
• .graph contiene le liste di successori di tutti I nodi nel grafo.
Ogni lista di successori è una lista di interi mappata in una
sequenza di bit attraverso l’uso di efficienti tecniche di
compressione.
• .offsets Memorizza il bit offset per ogni nodo del grafo. L’offset
del primo nodo è 0. Per comodità rappresentiamo anche
l’offset dell’ultimo nodo, che di fatto fornisce l’indicazione della
lunghezza in bit del file .graph
• .properties Contiene una serie di informazioni che sono
necessarie per decodificare correttamente I file.offsets e
.properties, e anche informazioni statistiche come numero di
bit per link.
Ranking Web
Pagina 12
pages
Caricamento del grafo in memoria
• Il modo naturale di usare un grafo compresso è quello di
caricarlo in un array di byte e poi indicizzare I suoi bit usando
opportunamente gli offsets.
• Tenere in memoria gli offsets è molto costoso. Altra opzione è
quella del caricamento parziale: specifichiamo un offset step J
e carichiamo in memoria soltanto un offset ogni J. In questo
modo è ancora possibile caricare un grafo in una speciale
forma riarrangiata: per ogni J liste di successori
memorizziamo prima gli outdegree, poi le restanti liste di
successori.
• Per alcune applicazioni (es, calcolo del trasposto) non è
necessario calcolare il grafo in memoria: in questo caso
possiamo ottenere iteratori che leggono direttamente dal file
.graph.
Ranking Web
pages
Pagina 13
Utilizzo delle librerie Webgraph e LAW per il calcolo di
PageRank
– LAW: collezione software distribuita dal Laboratory of Web
Algorithmics.
– Contiene il più grande insieme di classi e documentazione
relativi a PageRank reso disponibile pubblicamente.
– http://law.dsi.unimi.it/software/
Ranking Web
pages
Pagina 14
Impostazione del classpath
– Scaricare e scompattare gli archivi seguenti:
– http://law.dsi.unimi.it/software/download/law-2.1-bin.tar.gz
– http://webgraph.dsi.unimi.it/webgraph-3.0.1-bin.tar.gz
– http://webgraph.dsi.unimi.it/webgraph-deps.tar.gz
– Creare una directory dove posizionare tutte le librerie e copiarvi dentro
i file .jar
– Aggiungere al classpath tutti i file .jar contenuti negli archivi suddetti,
procedendo come descritto nella esercitazione precedente.
NOTA: sul sito è disponibile l’archivio lib.zip contenente tutte le librerie
necessarie per l’esercitazione e il file set-classpath.sh per settare il
classpath.
Ranking Web
pages
Pagina 15
set-classpath.sh
N.B. sostituire
your_own_directory con la path
assoluta della cartella contenente
le librerie (es. /User/…/lib)
– export DIR= your_own_directory
– export CLASSPATH=.:$DIR/colt-1.2.0.jar:$DIR/dsiutils2.0.1.jar:$DIR/fastutil-6.4.1.jar:$DIR/jakarta-commonscollections-3.2.1.jar:$DIR/jakarta-commons-logging1.1.jar:$DIR/jakarta-commons-io-1.4.jar:$DIR/jakarta-commonslang-2.3.jar:$DIR/jakarta-commons-configuration1.4.jar:$DIR/jsap-2.1.jar:$DIR/junit4-4.5.jar:$DIR/law2.1.jar:$DIR/log4j-1.2.14.jar:$DIR/mg4j-4.0.jar:$DIR/sux4j3.0.jar:$DIR/webgraph-3.0.1.jar:$DIR/nutchGraph.jar
Ranking Web
pages
Pagina 16
set-classpath.sh
– Scaricare dal sito il file set-classpath.sh e posizionarlo
nella directory dell’esercitazione.
– Sostituire your_own_directory con il path completo della
cartella contenente le librerie.
– Usare il comando: source set-classpath.sh
– Scaricare dal sito il file esempio contenente gli archi del
grafo e posizionarlo nella directory dell’esercitazione.
– Scaricare dal sito Text2ASCII.java e PrintRanks.java,
posionarli nella directory dell’esercitazione e copilare.
Ranking Web
pages
Pagina 17
Conversione del grafo in formato Webgraph
– Passo 1: conversione nel formato testuale supportato dal
framework.
– Il grafo è memorizzato in un file chiamato graph-name.graphtxt. La prima linea contiene il numero di nodi, n. Quindi, il file
contiene n linee: la linea i-esima contiene i successori del nodo i
in ordine crescente (la numerazione dei nodi va da 0 a n−1). I
successori sono separati tra di loro da uno spazio.
– Il comando java Text2ASCII graph-name crea un file graphname.graph-txt contenente il grafo in formato ASCIIGraph
– java Text2ASCII esempio
– more esempio.graph-txt
Ranking Web
pages
Pagina 18
Conversione del grafo in formato Webgraph
– Passo 2: conversione dal formato testuale al formato BV.
– java it.unimi.dsi.webgraph.BVGraph -g ASCIIGraph graph-name
graph-name produce un grafo compresso in formato BVGraph.
– Il grafo risultante viene memorizzato in tre file:
– graph-name.graph
– graph-name.offsets
– graph-name.properties
– java it.unimi.dsi.webgraph.BVGraph -g ASCIIGraph esempio
esempio
– more esempio.properties
Ranking Web
pages
Pagina 19
Utilizzo della libreria LAW per il calcolo di PageRank
– Il package it.unimi.dsi.law.rank contiene una vasta collezione di classi
dedicate al calcolo di PageRank.
– PageRank: classe astratta base. Definisce metodi e attributi per il
supporto delle computazioni di PageRank o simili.
– PageRank.IterationNumberStoppingCriterion: criterio di terminazione:
si ferma quando il numero di iterazioni raggiunge un dato limite.
– PageRankJacobi: calcola PageRank usando il metodo di Jacobi.
– PageRankPowerMethod: calcola PageRank usando il metodo delle
potenze.
…
Ranking Web
pages
Pagina 20
Calcolo di PageRank: esempio
– Il comando java it.unimi.dsi.law.rank.PageRankPowerMethod
graph-name rank-name calcola sul grafo di nome graph-name il
PageRank score di tutti i nodi.
– Output: rank-name.properties, rank-name.ranks (file binario
contenente i punteggi calcolati per ogni nodo)
– java it.unimi.dsi.law.rank.PageRankPowerMethod esempio
esempioPR
– Usare java PrintRanks rank-name.ranks per la lettura degli score.
PrintRanks stampa lo score calcolato per tutti i nodi. La riga i-esima
contiene lo score del nodo i-esimo.
– java PrintRanks esempioPR.ranks > ranks
– more ranks
Ranking Web
pages
Pagina 21
Calcolo di PageRank: esercizio
– Applicare gli altri metodi supportati per il calcolo di PageRank.
– java it.unimi.dsi.law.rank.PageRankGaussSeidel graph-name
rank-name
– java PrintRanks rank-name.ranks
– java it.unimi.dsi.law.rank.PageRankJacobi graph-name rankname
– java PrintRanks rank-name.ranks
Ranking Web
pages
Pagina 22