mg4j – managing gigabytes for java indicizzazione ed interrogazione di una collezione di documenti...

47
MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di Roma & Universitat Pompeu Fabra de Barcelona

Upload: anacleto-cosentino

Post on 01-May-2015

214 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

MG4J – Managing GigaBytes for Java

Indicizzazione ed interrogazione di una collezione di documenti

Esercitazione

Ilaria Bordino

Sapienza Università di Roma & Universitat Pompeu Fabra de Barcelona

Page 2: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 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

Page 3: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- 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

Page 4: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 4

Document

Page 5: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- 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.

Page 6: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- 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.

Page 7: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- 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.

Page 8: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 8

Implementazioni di DocumentFactory

• CompositeDocumentFactory• HtmlDocumentFactory• IdentityDocumentFactory• MailDocumentFactory• PdfDocumentFactory• ReplicatedDocumentFactory• PropertyBasedDocumentFactory• TRECHeaderDocumentFactory• ZipDocumentCollection.ZipFactory

Page 9: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- 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

Page 10: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- 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.

Page 11: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- 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.

Page 12: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 12

Costruzione della prima collezione di documenti

• L’indicizzazione 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

Page 13: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 13

Addizionare al CLASSPATH

• DIR=mg4j-dependencies• CLASSPATH=.:$DIR/BeanShell/bsh-2.0b2.jar:$DIR/mg4j-2.0.1.jar:

$DIR/colt-1.2.0.jar:$DIR/jakarta-commons-collections-3.1.jar:$DIR/jakarta-commons-configuration-1.2.jar:$DIR/jal-20031117.jar:$DIR/jsap-2.0.jar:$DIR/mysql-connector-java.jar:$DIR/fastutil5-5.0.9.jar:$DIR/jakarta-commons-io-1.2.jar:$DIR/javacc-4.0.jar:$DIR/libreadline-java.jar:$DIR/pdfbox-0.7.1.jar:$DIR/gnu.getopt.jar:$DIR/jakarta-commons-lang-2.1.jar:$DIR/javamail/mailapi.jar:$DIR/servletapi5.jar:$DIR/jaf.jar:$DIR/jakarta-commons-logging-1.1.jar:$DIR/jetty5/jetty5.jar:$DIR/mstor.jar:$DIR/tagsoup.jar:$DIR/log4j-1.2.14.jar:$DIR/velocity-1.4.jar:$DIR/classpathx-jaf-1.0.jar:$DIR/tomcat5-servlet-2.4-api-5.5.23.jar:$DIR/xalan-j2-serializer-2.7.0.jar

Page 14: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 14

Costruzione della prima collezione di documenti

• java it.unimi.dsi.mg4j.document.FileSetDocumentCollection --help

• FileDocumentFactory –e <encoding> –f <factory> <collection-name>

• find Attori_e_attrici/ -iname \*.html -type f | 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.

Page 15: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 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.

Page 16: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 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();

Page 17: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 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

Page 18: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 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.

Page 19: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 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 -code, -code, golub)

Page 20: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 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 -code)

• mycollection-{title,text}.sizes: contiene, per ciascun documento indicizzato, la corrispondente dimensione (=numero di parole) in - code.

Page 21: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 21

Struttura dell’indice (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 l’offset in -code

• mycollection-{text,title}.batch<i>: 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.

Page 22: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 22

Struttura dell’indice (3)

• mycollection{text,title}.stats: raccoglie alcune statistiche sull' indicizzazione

• mycollection{text,title}.index: l’indice invertito in -code.

Page 23: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 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

Page 24: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 24

Il Web Server

• Query: it.unimi.dsi.mg4j.query.Query [--help] [(-c|--collection) <collection>] [(-t|--titleList) <titleList>] [-n|--no-sizes] [-h|--http] [(-i|--itemclass) <itemClass>] [(-m|--item-mime-type) <itemMimeType>][(-p|--port) <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

Page 25: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 25

Interrogazione dell’indice

• Interprete a linea di comando• Web page : http://localhost:4242/Query

Page 26: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 26

Interrogazioni semplici

• Ricerca delle occorrenze di una parola– EX: attorettore– EX: attrice

• AND: scrivendo piu’ termini separati da AND (o &) si ottengono i documenti che contengono tutte le parole specificate;– EX: claudia & pandolfi & pandolfi

• OR: restituisce i documenti che contengono almeno una delle parole separate da OR (o |);– EX: pandolfi | gerini | gerini

Page 27: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 27

Interrogazioni semplici (2)

• NOT: restituisce i documenti che non contengono la parola preceduta da NOT (o !);– EX: claudia & !pandolfi & !pandolfi

• Parentesi: le parentesi sono usate per definire le priorita’ nella query

• EX: claudia & (pandolfi | gerini) & (pandolfi | gerini)

• FraseFrase: le parole messe fra “ “ appaiono consecutivamente nelle documenti ritornati– EX: “invia questa” | “ricerca avanzata”

Page 28: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 28

Interrogazioni con asterisco (wildcard)

• Prossimita’:Prossimita’: si puo` limitare la distanza massima fra si puo` limitare la distanza massima fra un insieme di paroleun insieme di parole– EX: (claudia attrice)~3

• AsteristicoAsteristico: * serve per specificare una qualunque sequenza di caratteri– EX: att*

Page 29: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 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

Page 30: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 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

• $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

Page 31: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 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

Page 32: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 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

Page 33: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 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

Page 34: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 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

Page 35: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 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.

Page 36: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 36

Indicizzazione dei campi virtuali

• java it.unimi.dsi.mg4j.tool.URLMPHVirtualDocumentResolver -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

Page 37: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 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

Page 38: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 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

Page 39: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 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

Page 40: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 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

Page 41: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 41

Rappresentazione del dizionario

• Una rappresentazione più efficiente può essere ottenuta

attraverso l’uso di una MPH (Unsigned Minimal Perfect

Hash), una struttura dati molto efficiente che può essere

utilizzata per rispondere alla domanda: “Qual è l’indice del

termine XXX ?”

• java it.unimi.dsi.mg4j.util.MinimalPerfectHash -s -o

basename.terms basename.mph

Page 42: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 42

Rappresentazione del dizionario

• La struttura Unsigned Minimal Perfect Hash è in grado di rispondere

correttamente alla domanda “ Qual è l’indice del termine XXX” solo per I termini

che compaiono veramente nel dizionario. Se si ha bisogno non solo di mappare

i termini in indici ma anche di determinare se un termine è davvero presente nel

dizionario occorre usare la struttua SMPH (Signed Minimal Perfect Hash)

java it.unimi.dsi.mg4j.util.MinimalPerfectHash -c

it.unimi.dsi.mg4j.util.HashCodeSignedMinimalPerfectHash -s -o

basename.terms basename.smph

Page 43: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 43

Minimal Perfect Hash: esempio di utilizzo

• import it.unimi.dsi.fastutil.io.BinIO;

• import it.unimi.dsi.mg4j.util.MinimalPerfectHash;

• MinimalPerfectHash myMap = (MinimalPerfectHash)

BinIO.loadObject("basename.mph");

• int pos = myMap.getNumber(“pippo”);

Page 44: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 44

Signed Minimal Perfect Hash: esempio di utilizzo

• import it.unimi.dsi.fastutil.io.BinIO;

• import it.unimi.dsi.mg4j.util.MinimalPerfectHash;

• MinimalPerfectHash myMap = (MinimalPerfectHash)

BinIO.loadObject("basename.smph");

• int pos = myMap.getNumber(“pippo”);

Page 45: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 45

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.mg4j.util.ImmutableExternalPrefixDictionary -b4Ki -o basename.urls basename.dict

Page 46: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 46

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");

Page 47: MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Sapienza Università di

Ilaria BordinoMG4J -- Managing GigaBytes for Java Pagina 47

Esercizio

• Ripetere l'esercitazione utilizzando la collezione

HTMLDIS.