La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Ida Mele Sapienza Università.

Presentazioni simili


Presentazione sul tema: "MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Ida Mele Sapienza Università."— Transcript della presentazione:

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


Scaricare ppt "MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Ida Mele Sapienza Università."

Presentazioni simili


Annunci Google