Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato
Informazioni Generali Ricevimento: momentaneamente non possibile :)
MG4J È un tool sviluppato presso il Dipartimento di Scienza della Informazione della Universitá di Milano Disponibile gratuitamente; Webpage:
Addizionare al classpath DIR=usr/share/java $DIR/mg4j/BeanShell/bsh-2.0b2.jar:$DIR/mg4j/mg4j jar:$DIR/mg4j/colt jar:$DIR/mg4j/jakarta-commons-collections-3.1.jar:$DIR/mg4j/jakarta- commons-configuration-1.2.jar:$DIR/mg4j/jal jar:$DIR/mg4j/jsap- 2.0.jar:$DIR/mg4j/mysql-connector-java.jar:$DIR/mg4j/fastutil jar:$DIR/mg4j/jakarta-commons-io-1.2.jar:$DIR/mg4j/javacc- 4.0.jar:$DIR/mg4j/libreadline-java.jar:$DIR/mg4j/pdfbox 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 jar:$DIR/mg4j/velocity-1.4.jar:$DIR/mg4j/classpathx-jaf- 1.0.jar:$DIR/mg4j/tomcat5-servlet-2.4-api jar:$DIR/mg4j/xalan-j2-serializer jar
MG4J Permette lindicizzazione e linterrogazione 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: Manual:
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: – 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 linterrogazione della collezione indicizzata.
Costruire la 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
Costruire la prima collezione di documenti java it.unimi.dsi.mg4j.document.FileSetDocumentCollection -- help FileDocumentFactory : FileDocumentFactory –e –f 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). Linserimento o la cancellazione di file nellinsieme 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 nellinsieme dei jar scaricabili dalla pagina del corso. Download e tutorial:
Creazione dellindice 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 allindice.
Fasi dellindicizzazione Zeroth pass (opzionale): costruisce il dizionario dei termini. Genera i file basename.index e basename.properties First pass: costruisce lindice invertito: doc1: pos1,.., posM Middle pass (opzionale): produce un ordinamento lessicografico dei termini nellindice. 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 dellindice mycollection-{text,title}.terms: un file di testo contenente lintero 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.
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.
mycollection{text,title}.stats: raccoglie alcune statistiche sull' indicizzazione mycollection{text,title}.index: lindice 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 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*
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... b asenameWeightN 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 :
Querying MG4J Simple query: cerca le 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
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
Querying MG4J con asterisco (wild card) 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*
Esercizi: compressione –c codeTypeIl tipo di compressione puo` essere indicato con –c codeType. Le codifiche disponibili in MG4J sono: –GAMMA: coding –DELTA: delta coding