310 likes | 397 Views
Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato. Managing Gigabytes for Java MG4J. Informazioni Generali. E-mail : bordino@dis.uniroma1.it donato@dis.uniroma1.it Ricevimento : momentaneamente non possibile :). MG4J.
E N D
Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato Managing Gigabytes for JavaMG4J
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 DocumentCollectioncorrisponde 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.
Istanzedella 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: attore • EX: attrice • AND: scrivendo piu’ termini separati da AND (o &) si ottengono i documenti che contengono tutte le parole specificate; • EX: claudia & pandolfi • OR: restituisce i documenti che contengono almeno una delle parole separate da OR (o |); • EX: pandolfi | gerini
NOT: restituisce i documenti che non contengono la parola preceduta da NOT (o !); • EX: claudia & !pandolfi • Parentesi: le parentesi sono usate per definire le priorita’ nella query • EX: claudia & (pandolfi | gerini) • Frase: 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 parole • EX: (claudia attrice)~3 • Asteristico: * serve per specificare una qualunque sequenza di caratteri • EX: att*
Esercizi: compressione • Il tipo di compressione puo` essere indicato con –c codeType. Le codifiche disponibili in MG4J sono: • GAMMA: coding • DELTA: delta coding