Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoGiacomo Deluca Modificato 8 anni fa
1
MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Ida Mele Sapienza Università di Roma
2
MG4J -- Managing GigaBytes for Java Pagina 2 Overview dei pacchetti principali Document –Document –DocumentCollection –FileSetDocumentCollection –DocumentFactory Index Query –HttpQueryServer –QueryEngine Documentazione: http://mg4j.dsi.unimi.it/docs/ Manuale: http://mg4j.dsi.unimi.it/man/manual.pdf
3
MG4J -- Managing GigaBytes for Java Pagina 3 Document Interfaccia definita in it.unimi.dsi.mg4j.document Ogni classe che implementa Document rappresenta un singolo documento indicizzabile. Un documento è composto da un numero di campi che dipende dal tipo di documento; esempio: –E-mail: from, to, data, subject, body –Pagina html: title, url, body
4
MG4J -- Managing GigaBytes for Java Pagina 4 Document (2)
5
MG4J -- Managing GigaBytes for Java Pagina 5 Document Collection Interfaccia definita in it.unimi.dsi.mg4j.document Una collection è una lista di documenti accessibili in modo casuale.
6
MG4J -- Managing GigaBytes for Java Pagina 6 FileSetDocumentCollection Classe definita in it.unimi.dsi.mg4j.document Una DocumentCollection corrisponde a un insieme di file specificati in forma di array.
7
MG4J -- Managing GigaBytes for Java Pagina 7 Document Factory Interfaccia definita in it.unimi.dsi.mg4j.document Una factory esegue il parsing di documenti omogenei. Ogni documento prodotto da una stessa factory contiene un certo numero di campi che vanno indicizzati separatemente.
8
MG4J -- Managing GigaBytes for Java Pagina 8 Implementazioni di DocumentFactory CompositeDocumentFactory HtmlDocumentFactory IdentityDocumentFactory MailDocumentFactory PdfDocumentFactory ReplicatedDocumentFactory PropertyBasedDocumentFactory TRECHeaderDocumentFactory ZipDocumentCollection.ZipFactory
9
MG4J -- Managing GigaBytes for Java Pagina 9 Query Interprete a riga di comando per l’interrogazione di indici. Può anche avviare un web server che mostra i risultati in modo simile ai motori di ricerca a cui siamo abituati.
10
MG4J -- Managing GigaBytes for Java Pagina 10 QueryEngine Un motore di ricerca che prende una query e restituisce i risultati, utilizzando un insieme programmabile di politiche di scoring.
11
MG4J -- Managing GigaBytes for Java Pagina 11 HttpQueryServer Un semplice web server che processa le query. Se una collezione di documenti è disponibile, il server mostrerà alcuni intervalli che soddisfano la query sottomessa.
12
MG4J -- Managing GigaBytes for Java Pagina 12 Costruzione della prima collezione di documenti L’indicizzazione in MG4J è centrata sul concetto di documento. Collezione di partenza: Attori e attrici. Si usa la class FileSetDocumentCollection che permette di costruire e serializzare un insieme di documenti specificati mediate il nome del file.
13
MG4J -- Managing GigaBytes for Java Pagina 13 CLASSPATH Scompattare l’archivio: deps.tar.gz Settare il classpath: export DIR=deps export CLASSPATH=.:$DIR/classpathx-jaf-1.0.jar:$DIR/colt- 1.2.0.jar:$DIR/dsiutils-1.0.10.jar:$DIR/fastutil5-5.1.5.jar:$DIR/jakarta- commons-collections-3.2.jar:$DIR/jakarta-commons-configuration- 1.4.jar:$DIR/jakarta-commons-digester-1.8.jar:$DIR/jakarta-commons-io- 1.4.jar:$DIR/jakarta-commons-lang-2.3.jar:$DIR/jakarta-commons-logging- 1.1.jar:$DIR/jal-20031117.jar:$DIR/javacc-4.0.jar:$DIR/jetty6- 6.1.14.jar:$DIR/jetty6-html-6.1.14.jar:$DIR/jetty6-util-6.1.14.jar:$DIR/jsap- 2.0.jar:$DIR/junit-3.8.2.jar:$DIR/log4j-1.2.14.jar:$DIR/mailapi- 1.3.1.jar:$DIR/mg4j-3.0.jar:$DIR/pdfbox-0.7.1.jar:$DIR/sux4j- 1.0.3.jar:$DIR/sux4j-2.0.jar:$DIR/tomcat5-servlet-2.4-api- 5.5.27.jar:$DIR/velocity-1.5.jar:$DIR/velocity-tools-1.3.jar:$DIR/webgraph- 2.4.2.jar:$DIR/xalan-j2-serializer-2.7.0.jar Digitare: source set-classpath.sh
14
Costruzione della prima collezione di documenti java it.unimi.dsi.mg4j.document.FileSetDocumentCollection --help Scompattare la cartella: Attori_e_attrici.tar.gz find Attori_e_attrici -name *.html | java it.unimi.dsi.mg4j.document.FileSetDocumentCollection -f it.unimi.dsi.mg4j.document.HtmlDocumentFactory -p encoding=UTF-8 actors.collection find : è un comando linux che fornisce la lista dei file contenuti nella directory specificata. Restituisce un file per ogni linea. MG4J -- Managing GigaBytes for Java Pagina 14
15
La collezione di documenti La collezione actors.collection non contiene i file, ma soltanto i loro nomi (riferimenti). L’inserimento o la cancellazione di file nell’insieme di documenti che vogliamo indicizzare, rende inconsistente la collezione. MG4J -- Managing GigaBytes for Java Pagina 15
16
Informazioni sulla collezione BeanShell: java source interpreter java bsh.Interpreter bsh % t = load(“actors.collection"); bsh % print (t.size()); bsh % d = t.document(0); bsh % print (d.title()); bsh % print (d.uri()); bsh % exit(); MG4J -- Managing GigaBytes for Java Pagina 16
17
La BeanShell E’ una shell java che permette di eseguire frammenti di codice java in maniera interattiva. Utile per scrivere prototipi o per il test di applicazioni. Download e tutorial: http://www.beanshell.org/intro.html MG4J -- Managing GigaBytes for Java Pagina 17
18
Creazione dell’indice Index: java it.unimi.dsi.mg4j.tool.IndexBuilder --help java it.unimi.dsi.mg4j.tool.IndexBuilder --downcase -S actors.collection mycollection --downcase: tutti i termini vengono considerati minuscoli (case folding). -S: specifica la collection generata al punto precedente. Se non specificata, IndexBuilder legge lo standard input. mycollection: basename che vogliamo assegnare all’indice. MG4J -- Managing GigaBytes for Java Pagina 18
19
Fasi dell’indicizzazione Passo 0 (opzionale): costruisce il dizionario dei termini. Genera i file basename.index e basename.properties Passo 1: costruisce l’indice invertito: doc1: pos1,.., posM Passo intermedio (opzionale): produce un ordinamento lessicografico dei termini nell’indice. Passo 2: sceglie il metodo di compressione e crea il basename.index ed inserisce altre voci in basename.properties -e specifica il metodo di compressione (attualmente implementati gamma-code, Golomb) MG4J -- Managing GigaBytes for Java Pagina 19
20
Struttura dell’indice mycollection-{text,title}.terms: un file di testo contenente l’intero dizionario, un termine per riga, ordinato secondo l’indice; –more mycollection-text.terms mycollection-{text,title}.frequencies: per ciascun termine, il numero di documenti in cui tale termine appare (codificato in gamma-code). mycollection-{title,text}.sizes: contiene, per ciascun documento indicizzato, la corrispondente dimensione (=numero di parole) in gamma-code. MG4J -- Managing GigaBytes for Java Pagina 20
21
Struttura dell’indice (2) mycollection{text,title}.globcounts: per ciascun termine, viene memorizzato il numero di occorrenze in gamma-code. mycollection{text,title}.offset: per ciascun termine, viene memorizzato l’offset in gamma-code. mycollection-{text,title}.batch : quando la memoria è piena di termini, viene effettuata una copia codificata in gamma-code in un file batch e viene iniziata una nuova lista. Alla fine del processo, i file di batch vengono uniti. MG4J -- Managing GigaBytes for Java Pagina 21
22
Struttura dell’indice (3) mycollection{text,title}.stats: raccoglie alcune statistiche sull'indicizzazione. mycollection{text,title}.index: l’indice invertito in gamma-code. MG4J -- Managing GigaBytes for Java Pagina 22
23
Struttura dell’indice (4) mycollection{text,title}.properties: contiene alcuni dati relativi al processo di indicizzazione: Documents: numero di documenti nella collection; Terms: numero di termini indicizzati; Occurrences: numero di parole nell’intera collection; Batches: numero di batch file generati; Maxdocsize: massima dimensione di un documento (parole); Termprocessor: il term processor (se presente) usato durante la costruzione: ad esempio DowncaseTermProcessor; Occsperbatch: massimo numero di occorrenze in ciascun batch; Permutation: nome del file di premutazione usato. –More mycollection-text.properties –ls –lh mycollection MG4J -- Managing GigaBytes for Java Pagina 23
24
Il Web Server Query: it.unimi.dsi.mg4j.query.Query [--help] [(-c|-- collection) ] [(-t|--titleList) ] [-n|--no- sizes] [-h|--http] [(-i|--itemclass) ] [(-m|--item- mime-type) ][(-p|-- port) ]basenameWeight1 basenameWeight2... bas enameWeightN java it.unimi.dsi.mg4j.query.Query --help java it.unimi.dsi.mg4j.query.Query -h -i it.unimi.dsi.mg4j.query.FileSystemItem -c actors.collection mycollection-text mycollection-title MG4J -- Managing GigaBytes for Java Pagina 24
25
Interrogazione dell’indice Interprete a linea di comando Web page: http://localhost:4242/Query MG4J -- Managing GigaBytes for Java Pagina 25
26
Interrogazioni semplici Ricerca delle occorrenze di una parola; –Es: attore –Es: attrice AND: scrivendo più termini separati da AND (o &) si ottengono i documenti che contengono tutte le parole specificate; & pandolfi –Es: claudia & pandolfi OR: restituisce i documenti che contengono almeno una delle parole separate da OR (o |); | gerini –Es: pandolfi | gerini MG4J -- Managing GigaBytes for Java Pagina 26
27
Interrogazioni semplici (2) NOT: restituisce i documenti che non contengono la parola preceduta da NOT (o !); & !pandolfi –Es: claudia & !pandolfi Parentesi: le parentesi sono usate per definire le priorità nella query; & (pandolfi | gerini) – Es: claudia & (pandolfi | gerini) FraseFrase: le parole messe fra “ ” appaiono consecutivamente nelle documenti ritornati; –Es: “invia questa” | “ricerca avanzata” MG4J -- Managing GigaBytes for Java Pagina 27
28
Interrogazioni con asterisco (wildcard) Prossimità: si può limitare la distanza massima fra un insieme di parole;Prossimità: si può limitare la distanza massima fra un insieme di parole; –Es: (claudia attrice)~3 AsteristicoAsteristico: * serve per specificare una qualunque sequenza di caratteri; –Es: att* MG4J -- Managing GigaBytes for Java Pagina 28
29
Interrogazioni complesse MG4J fornisce sofisticati meccanismi di tuning delle query. Gli scorer permettono di riordinare i documenti ottenuti in risposta ad una interrogazione in base a un dato criterio. Per sfruttare queste possibilità occorre usare l’interfaccia a linea di comando. $ -- Mostra le opzioni disponibili. $mode -- Seleziona la modalità di presentazione del risultato. MG4J -- Managing GigaBytes for Java Pagina 29
30
Interrogazioni complesse $score -- Seleziona uno scorer per i documenti; es. $score BM25Scorer VignaScorer $mplex on -- Determina l’indirizzamento della query a tutti gli indici disponibili. $weight -- Cambia il peso degli indici; es. $weight text:1 title:3 $select -- Seleziona max numero di intervalli e massima lunghezza di ogni intervallo; es. $select 3 40 MG4J -- Managing GigaBytes for Java Pagina 30
31
Scorer: esempi Opzione di default: BM25Scorer + VignaScorer: $score BM25Scorer VignaScorer ConstantScorer: $score ConstantScorer Uno scorer che assegna uno score costante (0 di default) a tutti i documenti. MG4J -- Managing GigaBytes for Java Pagina 31
32
Scorer: esempi (2) CountScorer: uno scorer molto semplice che conta il numero di occorrenze di ogni termine all'interno del documento corrente moltiplicato per il peso del relativo indice: $score CountScorer MG4J -- Managing GigaBytes for Java Pagina 32
33
Scorer: esempi (3) TfIdfScorer: uno scorer che implementa la formula di ranking TF/IDF. Il peso assegnato ad un documento che, in una collezione di N documenti appare in f documenti è, per un documento di lunghezza l, in cui il termine appare c volte: log(N/f) c / l $score TfIdfScorer MG4J -- Managing GigaBytes for Java Pagina 33
34
Score: esempi (4) DocumentRankScorer: Assegna un punteggio fisso ad ogni documento. Gli score sono letti da un file il cui nome deve essere passato al costruttore: $score DocumentRankScorer MG4J -- Managing GigaBytes for Java Pagina 34
35
Indicizzazione dei campi virtuali Come primo passo occorre costruire un document resolver che sia in grado di tradurre le document spec prodotte per il campo anchor di ogni documento HTML in riferimenti a documenti della collezione. URLMPHVirtualDocumentResolver trasforma le URL in riferimenti a documenti. Il comando: java it.unimi.dsi.mg4j.tool.ScanMetadata -S actors.collection -u actors.urls permette di costruire l’elenco delle URL dei documenti che appartengono alla collezione. MG4J -- Managing GigaBytes for Java Pagina 35
36
Indicizzazione dei campi virtuali java it.unimi.dsi.mg4j.tool.URLMPHVirtualDocumentResolv er -o actors.urls actors-anchor.resolver costruisce il resolver di cui abbiamo bisogno per indicizzare il campo anchor. Ora possiamo ricostruire l’indice chiedendo esplicitamente l’indicizzazione dei campi virtuali: java it.unimi.dsi.mg4j.tool.IndexBuilder -a -v anchor:actors-anchor.resolver --downcase -S actors.collection mycollection MG4J -- Managing GigaBytes for Java Pagina 36
37
Interrogazioni sul campo anchor A questo punto possiamo riavviare il query engine e sottomettere query che richiedono i documenti che soddisfano determinate condizioni anche nel campo anchor. java it.unimi.dsi.mg4j.query.Query -h -i FileSystemItem -c actors.collection mycollection- text mycollection-title mycollection-anchor MG4J -- Managing GigaBytes for Java Pagina 37
38
Utilizzo dei gap virtuali Per evitare la restituzione di documenti che contengono i termini della query in ancore differenti, si può imporre una prossimità dei termini tenendo conto dello spazio virtuale (numero di parole vuote) lasciato tra due frammenti consecutivi. es. (claudia AND attrice)~64 MG4J -- Managing GigaBytes for Java Pagina 38
39
Specificare gap virtuali differenti Si possono ottenere falsi negativi se la lunghezza di qualche ancora è maggiore di quella scelta per lo spazio virtuale. In fase di indicizzazione è possibile specificare una differente lunghezza per il gap virtuale. java it.unimi.dsi.mg4j.tool.IndexBuilder -a -g anchor:100 -v anchor:actors- anchor.resolver --downcase -S actors.collection mycollection MG4J -- Managing GigaBytes for Java Pagina 39
40
Realizzazione della mappa dei termini Il più semplice tipo di rappresentazione di un dizionario è la lista dei termini: un file di testo contentente un termine su ogni riga. Esempio: file.terms MG4J -- Managing GigaBytes for Java Pagina 40
41
Rappresentazione del dizionario Una rappresentazione più efficiente può essere ottenuta attraverso l’uso di una monotone minimal perfect hash function, una struttura dati molto compatta che può essere utilizzata per rispondere alla domanda: “Qual è l’indice del termine XXX ?”. Tale mappa può essere costruita a partire da una lista ordinata di termini con il comando: java it.unimi.dsi.sux4j.mph.MinimalPerfectHashFunction titles.mph mycollection-title.terms MG4J -- Managing GigaBytes for Java Pagina 41
42
Rappresentazione del dizionario (2) La correttezza della risposta restituita da una MinimalPerfectHash è garantita solo per i termini efffettivamente presenti nel dizionario. Se non si è sicuri che la struttura venga interrogata utilizzando solo termini del dizionario, occorre utilizzare una funzione “firmata”, che utlizza uno speciale valore di ritorno (-1) per segnalare il fatto che un termine non esiste all’interno della mappa: java it.unimi.dsi.util.ShiftAddXorSignedStringMap titles.mph titles.map mycollection-title.terms MG4J -- Managing GigaBytes for Java Pagina 42
43
Mappa dei termini Per rispondere ad una wildcard query occorre utilizzare una term map, una struttura dati che è in grado di rispondere efficientemente alla domanda “Qual è l’indice dei termini che iniziano con XXX”. Se i termini sono ordinati lessicograficamente la risposta è costituita da due interi, gli indici del primo e dell’ultimo termine che soddisfano la proprietà. java it.unimi.dsi.util.ImmutableExternalPrefixMap - b4Ki -o mycollection-title.terms mycollection- title.dict MG4J -- Managing GigaBytes for Java Pagina 43
44
Esercizi per casa Ripetere l'esercitazione utilizzando la collezione htmlDIS e la collezione cities. Indicizzare anche le ancore. Esercizio opzionale: provare altre collezioni di documenti. Esempio: – PdfDocumentFactory; – TREC index. – Istruzioni sul manuale di MG4J: http://mg4j.dsi.unimi.it/man/manual.pdfhttp://mg4j.dsi.unimi.it/man/manual.pdf – TREC GOV2 è scaricabile dal sito: http://boston.lti.cs.cmu.edu/callan/Data (file: trecgov2-25000- bysource.v1.gz). http://boston.lti.cs.cmu.edu/callan/Data – MG4J -- Managing GigaBytes for Java Pagina 44
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.