Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria...

31
Managing Gigabytes for Java MG4J Indicizzazione ed Indicizzazione ed interrogazione di basi di interrogazione di basi di documenti documenti Ilaria Bordino e Debora Donato

Transcript of Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria...

Page 1: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

Managing Gigabytes for JavaMG4J

Indicizzazione ed interrogazione di Indicizzazione ed interrogazione di basi di documentibasi di documenti

Ilaria Bordino e Debora Donato

Page 2: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

Informazioni Generali

• E-mail: [email protected] [email protected]

• Ricevimento: momentaneamente non possibile :)

Page 3: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

MG4J

• È un tool sviluppato presso il Dipartimento di Scienza della Informazione della Universitá di Milano Disponibile gratuitamente;

• Webpage: http://mg4j.dsi.unimi.it

Page 4: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

Addizionare al classpath• DIR=usr/share/java

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

Page 5: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

MG4J

• Permette l’indicizzazione e l’interrogazione di collezioni di documenti di grandi dimensioni;

• INPUT: serie di documenti omogenei (dello stesso tipo)

• OUTPUT: indice invertito

• USO: Permette di effettuare semplici interrogazioni sulla collezione di documenti indicizzata

Page 6: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

Architettura (Pacchetti Principali)• Document

– Document– DocumentCollection– FileSetDocumentCollection– DocumentFactory

• Index• Query

– HttpFileServer

• Documentation: http://mg4j.dsi.unimi.it/docs/• Manual: http://mg4j.dsi.unimi.it/man/manual.pdf

Page 7: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

Document

• Interface definita in it.unimi.dsi.mg4j.document

• Un documento è composto da un numero di campi che dipende dal tipo di documento;

• Per esempio:

– E-mail: from, to, data, subject, body

– Pagina html: title, url, body

Page 8: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

Interface Document• Definita in it.unimi.dsi.mg4j.document

• Ogni classe che implementa Document rappresenta un singolo documento indicizzabile.

Page 9: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

Interface DocumentCollection• Definita in it.unimi.dsi.mg4j.document

• Una collection e’ una collezione di documenti accessibili in modo casuale.

Page 10: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

Class FileSetDocumentCollection• Definita in it.unimi.dsi.mg4j.document

• Una DocumentCollection corrisponde a un insieme di file specificati in forma di array.

Page 11: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

Interface DocumentFactory• Definita in it.unimi.dsi.mg4j.document

• Una factory esegue il parsing di documenti omogenei.

Page 12: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

Istanze della DocumentFactory

• CompositeDocumentFactory• HtmlDocumentFactory• IdentityDocumentFactory• MailDocumentFactory• PdfDocumentFactory• ReplicatedDocumentFactory

Page 13: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

Class HttpFileServer

• Definita in it.unimi.dsi.mg4j.query

• Implementazione di un server http che permette di interrogare una collezione indicizzata

Page 14: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

Class Query

Interprete a linea di comando per l’interrogazione della collezione indicizzata.

Page 15: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

Costruire la 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 16: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

Costruire la prima collezione di documenti

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

• FileDocumentFactory: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 17: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

La Collection

• 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 collection.

Page 18: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

Informazioni sulla Collection

• BeanShell: java source interpreter

• java bsh.Interpreter• bsh % t = load("htmlshare.collection");• bsh % print (t.size());• bsh % d = t.document(0);• bsh % print (d.title());• bsh % print (d.uri());• bsh % exit();

Page 19: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

La BeanShell

• E’ una shell java che permette di eseguire iterativamente frammenti di codice java.

• Utile per scrivere prototipi o per il test di applicazioni.

• E’ gia inclusa nell’insieme dei jar scaricabili dalla pagina del corso.

• Download e tutorial: http://www.beanshell.org/intro.html

Page 20: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

Creazione dell’indice • Index:

– java it.unimi.dsi.mg4j.tool.Index --help

• java -Xmx512M it.unimi.dsi.mg4j.tool.Index --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, Index legge lo standard input

• mycollection: basename che vogliamo assegnare all’indice.

Page 21: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

Fasi dell’indicizzazione• Zeroth pass (opzionale): costruisce il dizionario dei

termini. Genera i file basename.index e basename.properties

• First pass: costruisce l’indice invertito:doc1: pos1,.., posM

• Middle pass (opzionale): produce un ordinamento lessicografico dei termini nell’indice.

• Second pass: 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 22: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

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 23: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

• 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 24: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

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

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

Page 25: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

• 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 26: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

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 27: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

Interrogazione dell'indice

• Interprete a linea di comando

• Web page : http://localhost:4242/Query

Page 28: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

Querying MG4J• Simple query: cerca le 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 29: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

• 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 30: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

Querying MG4J con asterisco (wild card)

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

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

Page 31: Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.

Esercizi: compressione

• Il tipo di compressione puo` essere indicato con –c codeType–c codeType. Le codifiche disponibili in MG4J sono:– GAMMA: coding– DELTA: delta coding