Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoEfisio Parodi Modificato 11 anni fa
1
MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Yahoo! Research, Barcelona
2
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 2 Overview dei pacchetti principali Document –Document –DocumentCollection –FileSetDocumentCollection –DocumentFactory Index Query –HttpQueryServer –QueryEngine Documentation: http://mg4j.dsi.unimi.it/docs/ Manual: http://mg4j.dsi.unimi.it/man/manual.pdf
3
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 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
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 4 Document
5
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 5 Document Collection Interfaccia definita in it.unimi.dsi.mg4j.document Una collection è una lista di documenti accessibili in modo casuale.
6
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 6 FileSetDocumentCollection Classe definita in it.unimi.dsi.mg4j.document Una DocumentCollection corrisponde a un insieme di file specificati in forma di array.
7
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 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
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 8 Implementazioni di DocumentFactory CompositeDocumentFactory HtmlDocumentFactory IdentityDocumentFactory MailDocumentFactory PdfDocumentFactory ReplicatedDocumentFactory PropertyBasedDocumentFactory TRECHeaderDocumentFactory ZipDocumentCollection.ZipFactory
9
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 9 Query Interprete a riga di comando per linterrogazione di indici Può anche avviare un web server che mostra i risultati in modo simile ai motori di ricerca a cui siamo abituati
10
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 10 QueryEngine Un motore di ricerca che prende una query e restituisce i risultati, utilizzando un insieme programmabile di politiche di scoring.
11
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 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
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 12 Costruzione della prima collezione di documenti Lindicizzazione in MG4J e 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
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 13 CLASSPATH Scaricare e scompattare MG4J http://mg4j.dsi.unimi.it/mg4j-4.0-bin.tar.gz e le dipendenze necessarie: http://mg4j.dsi.unimi.it/mg4j-deps.tar.gz Copiare tutti i file.jar in una directory a vostra scelta Scrivere in un file set-classpath.sh le righe seguenti: export DIR= your_directory export CLASSPATH=.:$DIR/dsiutils-2.0.jar:$DIR/fastutil-6.4.jar:$DIR/fontbox- 1.4.0.jar:$DIR/jakarta-commons-collections-3.2.1.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/javacc-5.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.1.jar:$DIR/junit4-4.5.jar:$DIR/log4j- 1.2.14.jar:$DIR/mailapi-1.3.1.jar:$DIR/mg4j-4.0.jar:$DIR/pdfbox-1.4.0.jar:$DIR/sux4j- 3.0.jar:$DIR/tagsoup-1.0.1.jar:$DIR/tika-core-0.7.jar:$DIR/tika-parsers- 0.7.jar:$DIR/tomcat5-servlet-2.4-api-5.5.27.jar:$DIR/velocity-1.5.jar:$DIR/velocity- tools-1.4.jar source set-classpath.sh per settare il classpath nella shell corrente (per settaggio permanente aggiungere le righe sopra al.bashrc)
14
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 14 Costruzione della prima collezione di documenti java it.unimi.dsi.mg4j.document.FileSetDocumentCollection --help FileDocumentFactory –e –f 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 : e un comando linux che fornisce la lista dei file contenuti nella directory specificata. Restituisce un file per ogni linea.
15
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 15 La collezione di documenti La collezione actors.collection non contiene i file, ma soltanto i loro nomi (riferimenti). Linserimento o la cancellazione di file nellinsieme di documenti che vogliamo indicizzare, rende inconsistente la collezione.
16
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 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();
17
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 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
18
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 18 Creazione dellindice 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 allindice.
19
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 19 Fasi dellindicizzazione Passo 0 (opzionale): costruisce il dizionario dei termini. Genera i file basename.index e basename.properties Passo 1: costruisce lindice invertito: doc1: pos1,.., posM Passo intermedio (opzionale): produce un ordinamento lessicografico dei termini nellindice. 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 -code, -code, golub)
20
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 20 Struttura dellindice mycollection-{text,title}.terms: un file di testo contenente litero dizionario, un termine per riga, ordinato secondo lindice –more mycollection-text.terms mycollection-{text,title}.frequencies: per ciascun termine, il numero di documenti in cui tale termine appare (codificato in -code) mycollection-{title,text}.sizes: contiene, per ciascun documento indicizzato, la corrispondente dimensione (=numero di parole) in - code.
21
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 21 Struttura dellindice (2) mycollection{text,title}.globcounts: per ciascun termine, viene memorizzato il numero di occorrenze in -code. mycollection{text,title}.offset: per ciascun termine, viene memorizzato loffset in -code mycollection-{text,title}.batch : quando la memoria e piena di termini, viene effettuata una copia codificata in -code in un file batch e viene iniziata una nuova lista. Alla fine del processo, i file di batch vengono uniti.
22
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 22 Struttura dellindice (3) mycollection{text,title}.stats: raccoglie alcune statistiche sull' indicizzazione mycollection{text,title}.index: lindice invertito in - code.
23
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 23 Struttura dellindice (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 nellintera 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
24
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 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... basenameWeightN 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
25
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 25 Interrogazione dellindice Interprete a linea di comando Web page : http://localhost:4242/Query
26
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 26 Interrogazioni semplici Ricerca delle occorrenze di una parola ttore –EX: attore –EX: attrice AND: scrivendo piu termini separati da AND (o &) si ottengono i documenti che contengono tutte le parole specificate; & pandolfi –EX: claudia & pandolfi OR: restituisce i documenti che contengono almeno una delle parole separate da OR (o |); | gerini –EX: pandolfi | gerini
27
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 27 Interrogazioni semplici (2) NOT: restituisce i documenti che non contengono la parola preceduta da NOT (o !); & !pandolfi –EX: claudia & !pandolfi Parentesi: le parentesi sono usate per definire le priorita nella query & (pandolfi | gerini)EX: claudia & (pandolfi | gerini) FraseFrase: le parole messe fra appaiono consecutivamente nelle documenti ritornati –EX: invia questa | ricerca avanzata
28
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 28 Interrogazioni con asterisco (wildcard) Prossimita: si puo` limitare la distanza massima fra un insieme di paroleProssimita: si puo` limitare la distanza massima fra un insieme di parole –EX: (claudia attrice)~3 AsteristicoAsteristico: * serve per specificare una qualunque sequenza di caratteri –EX: att*
29
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 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 linterfaccia a linea di comando. $ --- Mostra le opzioni disponibili $mode -- Seleziona la modalità di presentazione del risultato
30
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 30 Interrogazioni complesse $score -- Seleziona uno scorer per i documenti es. $score BM25Scorer VignaScorer $mplex on -- Determina lindirizzamento della query a tutti gli indici disponibili $weigth – Cambia il peso degli indici es. $weigth text:1 title:3 $selector -- Seleziona max numero di intervalli e massima lunghezza di ogni intervallo. es. $selector 3 40
31
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 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
32
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 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
33
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 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, e`, per un documento di lunghezza l in cui il termine appare c volte: log(N/f) c /l $score TfIdfScorer
34
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 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
35
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 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 lelenco delle URL dei documenti che appartengono alla collezione.
36
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 36 Indicizzazione dei campi virtuali java it.unimi.dsi.mg4j.tool.URLMPHVirtualDocumentResol ver -o actors.urls actors-anchor.resolver costruisce il resolver di cui abbiamo bisogno per indicizzare il campo anchor. Ora possiamo ricostruire lindice chiedendo esplicitamente lindicizzazione dei campi virtuali: java it.unimi.dsi.mg4j.tool.IndexBuilder -a -v anchor:actors-anchor.resolver --downcase -S actors.collection mycollection
37
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 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
38
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 38 Utilizzo dei gap virtuali Per evitare la restituzione di documenti che contengono i termini della query in ancore differenti, si puo` imporre una prossimita` dei termini tenendo conto dello spazio virtuale (numero di parole vuote) lasciato tra due frammenti consecutivi. es. (claudia AND attrice)~64
39
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 39 Specificare gap virtuali differenti Si possono ottenere falsi negativi se la lunghezza di qualche ancora e` maggiore di quella scelta per lo spazio virtuale. In fase di indicizzazione e` possibile specificare una differente lunghezza per il gap virtuale. java it.unimi.dsi.mg4j.tool.IndexBuilder -a -g anchor:100 -v anchor:mycollection-anchor.resolver –downcase -S actors.collection mycollection
40
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 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
41
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 41 Rappresentazione del dizionario Una rappresentazione più efficiente può essere ottenuta attraverso luso di una monotone minimal perfect hash function, una struttura dati molto compatta che può essere utilizzata per rispondere alla domanda: Qual è lindice del termine XXX ? Tale mappa può essere costruita a partire da una lista ordinata di termini java it.unimi.dsi.sux4j.mph.MinimalPerfectHashFunction titles.mph mycollection-title.terms
42
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 42 Rappresentazione del dizionario 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 allinterno della mappa. java it.unimi.dsi.util.ShiftAddXorSignedStringMap titles.mph titles.map mycollection-title.terms
43
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 43 Esempio di utilizzo import it.unimi.dsi.fastutil.io.BinIO; import it.unimi.dsi.fastutil.objects.Object2LongFunction;; Object2LongFunction url2node = (Object2LongFunction ) BinIO.loadObject( "titles.mph" ); long node = url2node.getLong(audrey);
44
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 44 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 è lindice dei termini che iniziano con XXX. Se i termini sono ordinati lessicograficamente la risposta è costituita da due interi, gli indici del primo e dellultimo termine che soddisfano la proprietà. java it.unimi.dsi.mg4j.util.ImmutableExternalPrefixDictionary -b4Ki –o mycollection-title.terms mycollection-title.dict
45
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 45 Term Map: esempio di utilizzo La mappa costruita consente di effettuare il mapping tra termini e indici in entrambe le direzioni. import it.unimi.dsi.fastutil.io.BinIO; import it.unimi.dsi.mg4j.util.ImmutableExternalPrefixDictionary; ImmutableExternalPrefixDictionary ext = (ImmutableExternalPrefixDictionary)BinIO.loadObject("termini.dict");
46
Ilaria Bordino MG4J -- Managing GigaBytes for JavaPagina 46 Esercizio Ripetere l'esercitazione utilizzando la collezione HTMLDIS.
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.