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

Post on 01-May-2015

220 views 2 download

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

Managing Gigabytes for JavaMG4J

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

Ilaria Bordino e Debora Donato

Informazioni Generali

• E-mail: bordino@dis.uniroma1.it donato@dis.uniroma1.it

• Ricevimento: momentaneamente non possibile :)

MG4J

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

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

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

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

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

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

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

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

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

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

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

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

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

• Una factory esegue il parsing di documenti omogenei.

Istanze della DocumentFactory

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

Class HttpFileServer

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

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

Class Query

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

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

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.

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.

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

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

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.

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)

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.

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

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

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

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

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

Interrogazione dell'indice

• Interprete a linea di comando

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

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

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

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*

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