MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Ida Mele Sapienza Università.

Slides:



Advertisements
Presentazioni simili
Managing Gigabytes for Java MG4J Indicizzazione ed interrogazione di basi di documenti Ilaria Bordino e Debora Donato.
Advertisements

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 Yahoo! Research, Barcelona.
MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di basi documentali Ilaria Bordino Yahoo! Research, Barcelona.
Table View. Problemi ricorrenti Una situazione ricorrente è quella in cui il controller potrebbe avere un’altezza superiore a quella dello schermo. In.
Script bash I file di comandi in Linux. BASH  Bourne Again Shell  Modalità interattiva o batch (file di comandi)  Ambiente di programmazione “completo”
Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica FONDAMENTI DI INFORMATICA Domenico Talia
CORSO elementare su DATABASE Applicativo utilizzato OpenOffice 3.0.
1 Elementi DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
MG4J -- Managing GigaBytes for Java Pagina 1 MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di basi documentali Ilaria Bordino Ida.
1 Come cercare le fonti di informazione scientifica Operatori e wildcards a cura della Biblioteca di Agraria.
Amministrazione di reti di calcolatori - Massimo Bertozzi Shell e scripting.
.  I tipi di dati non primitivi sono gli array, le struct e le union.  Gli array sono degli aggregati di variabili dello stesso tipo.  La dichiarazione.
CONTROLLO DELLA CONCORRENZA
La chimica della vita Ogni organismo vivente è una macchina sofisticata, risultato di un complesso insieme di reazioni chimiche. La costruzione e il funzionamento.
Ereditarietà Uno dei principi della programmazione orientata agli oggetti (OOP) è il riuso Le classi dovrebbero essere progettate come componenti riutilizzabili.
CERCARE IN INTERNET Cercare un’informazione su Internet non è facile. Le pagine Web contengono informazioni su tutti gli argomenti possibili e in tutte.
© 2007 SEI-Società Editrice Internazionale, Apogeo
Le operazioni relazionali
I commenti Tutti i linguaggi di programmazione e di markup prevedono la possibilità di inserire commenti nel codice I commenti non sono interpretati.
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
I/O redirection AND PIPES
Progettare algoritmi veloci usando strutture dati efficienti
Hyper Text Markup Language
VISUAL BASIC.
Microsoft Access E’ un programma utile per lo sviluppo di applicazioni gestionali che si appoggiano a una base dati.
Microsoft Access E’ un programma utile per lo sviluppo di applicazioni gestionali che si appoggiano a una base dati.
Dal problema al processo risolutivo
Terza Lezione → Navigare nel file System → parte 2
Tutorato Elementi di Informatica 2013
Tutorial help.ebsco.com.
Dal problema al processo risolutivo
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
I comandi.
Commenti Ogni riga che comincia con il simbolo # non viene letta dall’interprete per cui rappresenta un modo per commentare il listato # Questo è un esempio.
Excel 1 - Introduzione.
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
LA GESTIONE DEI PACCHETTI
Organizzazione fisica
FORMULE E FUNZIONI SU EXCEL
Quick Tip Tutorial Come accedere alle statistiche di EBSCOhost e di EBSCO Discovery Service attraverso EBSCOadmin help.ebsco.com.
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
PROGRAMMAZIONE BASH – ISTRUZIONE IF
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Tipi di Shell sh – Bourne shell csh – C shell ksh – Korn shell
SAS® OnDemand for Academics SAS Studio
Consultare un corpus con AntConc
Access.
Programmare.
Corso Java Cicli e Array.
BootCaT: Bootstrapping Corpora and Terminology
4.
Modulo 4 – Ricerca di informazioni nel web
SQL per la modifica di basi di dati
ADO Per gestire i database con tecnologia ASP si utilizzano strumenti ADO (ActiveX Data Objects): un'architettura che fornisce oggetti.
I fogli elettronici Microsoft Excel.
Esercitazione sulle modalità
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Progetto 1 Input Creare una Funzione commentata che prenda come input:
8. Altri oggetti JavaScript
WORD 28/02/2019 Informatica - WORD.
Excel 3 - le funzioni.
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
A-to-Z Consente di Localizzare e Accedere a tutte le risorse della biblioteca: riviste online riviste cartacee riviste nelle banche dati in full text riviste.
Array e Stringhe Linguaggio C.
Array (vettori) In linguaggio C / C++.
PowerShell di Windows PowerShell è un shell che mette a disposizione un prompt interattivo e un interprete a riga di comando , per le sue caratteristiche.
Docente: Sabato Bufano
Script su vettori Realizza uno script che chiede in input una dimensione d e crea un vettore di d numeri interi casuali. Poi calcola la somma dei due numeri.
Corso di Fondamenti di Informatica
Transcript della presentazione:

MG4J – Managing GigaBytes for Java Indicizzazione ed interrogazione di una collezione di documenti Esercitazione Ilaria Bordino Ida Mele Sapienza Università di Roma

MG4J -- Managing GigaBytes for Java Pagina 2 Overview dei pacchetti principali Document –Document –DocumentCollection –FileSetDocumentCollection –DocumentFactory Index Query –HttpQueryServer –QueryEngine Documentazione: Manuale:

MG4J -- 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: – from, to, data, subject, body –Pagina html: title, url, body

MG4J -- Managing GigaBytes for Java Pagina 4 Document (2)

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

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

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

MG4J -- Managing GigaBytes for Java Pagina 8 Implementazioni di DocumentFactory CompositeDocumentFactory HtmlDocumentFactory IdentityDocumentFactory MailDocumentFactory PdfDocumentFactory ReplicatedDocumentFactory PropertyBasedDocumentFactory TRECHeaderDocumentFactory ZipDocumentCollection.ZipFactory

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

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

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

MG4J -- Managing GigaBytes for Java Pagina 12 Costruzione della prima collezione di documenti L’indicizzazione in MG4J è 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.

MG4J -- Managing GigaBytes for Java Pagina 13 CLASSPATH Scompattare l’archivio: deps.tar.gz Settare il classpath: export DIR=deps export CLASSPATH=.:$DIR/classpathx-jaf-1.0.jar:$DIR/colt jar:$DIR/dsiutils jar:$DIR/fastutil jar:$DIR/jakarta- commons-collections-3.2.jar:$DIR/jakarta-commons-configuration- 1.4.jar:$DIR/jakarta-commons-digester-1.8.jar:$DIR/jakarta-commons-io- 1.4.jar:$DIR/jakarta-commons-lang-2.3.jar:$DIR/jakarta-commons-logging- 1.1.jar:$DIR/jal jar:$DIR/javacc-4.0.jar:$DIR/jetty jar:$DIR/jetty6-html jar:$DIR/jetty6-util jar:$DIR/jsap- 2.0.jar:$DIR/junit jar:$DIR/log4j jar:$DIR/mailapi jar:$DIR/mg4j-3.0.jar:$DIR/pdfbox jar:$DIR/sux4j jar:$DIR/sux4j-2.0.jar:$DIR/tomcat5-servlet-2.4-api jar:$DIR/velocity-1.5.jar:$DIR/velocity-tools-1.3.jar:$DIR/webgraph jar:$DIR/xalan-j2-serializer jar Digitare: source set-classpath.sh

Costruzione della prima collezione di documenti java it.unimi.dsi.mg4j.document.FileSetDocumentCollection --help Scompattare la cartella: Attori_e_attrici.tar.gz find Attori_e_attrici -name *.html | java it.unimi.dsi.mg4j.document.FileSetDocumentCollection -f it.unimi.dsi.mg4j.document.HtmlDocumentFactory -p encoding=UTF-8 actors.collection find : è un comando linux che fornisce la lista dei file contenuti nella directory specificata. Restituisce un file per ogni linea. MG4J -- Managing GigaBytes for Java Pagina 14

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. MG4J -- Managing GigaBytes for Java Pagina 15

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

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: MG4J -- Managing GigaBytes for Java Pagina 17

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. MG4J -- Managing GigaBytes for Java Pagina 18

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 gamma-code, Golomb) MG4J -- Managing GigaBytes for Java Pagina 19

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 gamma-code). mycollection-{title,text}.sizes: contiene, per ciascun documento indicizzato, la corrispondente dimensione (=numero di parole) in gamma-code. MG4J -- Managing GigaBytes for Java Pagina 20

Struttura dell’indice (2) mycollection{text,title}.globcounts: per ciascun termine, viene memorizzato il numero di occorrenze in gamma-code. mycollection{text,title}.offset: per ciascun termine, viene memorizzato l’offset in gamma-code. mycollection-{text,title}.batch : quando la memoria è piena di termini, viene effettuata una copia codificata in gamma-code in un file batch e viene iniziata una nuova lista. Alla fine del processo, i file di batch vengono uniti. MG4J -- Managing GigaBytes for Java Pagina 21

Struttura dell’indice (3) mycollection{text,title}.stats: raccoglie alcune statistiche sull'indicizzazione. mycollection{text,title}.index: l’indice invertito in gamma-code. MG4J -- Managing GigaBytes for Java Pagina 22

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 MG4J -- Managing GigaBytes for Java Pagina 23

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... bas enameWeightN 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 MG4J -- Managing GigaBytes for Java Pagina 24

Interrogazione dell’indice Interprete a linea di comando Web page: MG4J -- Managing GigaBytes for Java Pagina 25

Interrogazioni semplici Ricerca delle occorrenze di una parola; –Es: attore –Es: attrice AND: scrivendo più termini separati da AND (o &) si ottengono i documenti che contengono tutte le parole specificate; & pandolfi –Es: claudia & pandolfi OR: restituisce i documenti che contengono almeno una delle parole separate da OR (o |); | gerini –Es: pandolfi | gerini MG4J -- Managing GigaBytes for Java Pagina 26

Interrogazioni semplici (2) NOT: restituisce i documenti che non contengono la parola preceduta da NOT (o !); & !pandolfi –Es: claudia & !pandolfi Parentesi: le parentesi sono usate per definire le priorità nella query; & (pandolfi | gerini) – Es: claudia & (pandolfi | gerini) FraseFrase: le parole messe fra “ ” appaiono consecutivamente nelle documenti ritornati; –Es: “invia questa” | “ricerca avanzata” MG4J -- Managing GigaBytes for Java Pagina 27

Interrogazioni con asterisco (wildcard) Prossimità: si può limitare la distanza massima fra un insieme di parole;Prossimità: si può limitare la distanza massima fra un insieme di parole; –Es: (claudia attrice)~3 AsteristicoAsteristico: * serve per specificare una qualunque sequenza di caratteri; –Es: att* MG4J -- Managing GigaBytes for Java Pagina 28

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. MG4J -- Managing GigaBytes for Java Pagina 29

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. $weight -- Cambia il peso degli indici; es. $weight text:1 title:3 $select -- Seleziona max numero di intervalli e massima lunghezza di ogni intervallo; es. $select 3 40 MG4J -- Managing GigaBytes for Java Pagina 30

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. MG4J -- Managing GigaBytes for Java Pagina 31

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 MG4J -- Managing GigaBytes for Java Pagina 32

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 è, per un documento di lunghezza l, in cui il termine appare c volte: log(N/f) c / l $score TfIdfScorer MG4J -- Managing GigaBytes for Java Pagina 33

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 MG4J -- Managing GigaBytes for Java Pagina 34

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. MG4J -- Managing GigaBytes for Java Pagina 35

Indicizzazione dei campi virtuali java it.unimi.dsi.mg4j.tool.URLMPHVirtualDocumentResolv er -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 MG4J -- Managing GigaBytes for Java Pagina 36

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 MG4J -- Managing GigaBytes for Java Pagina 37

Utilizzo dei gap virtuali Per evitare la restituzione di documenti che contengono i termini della query in ancore differenti, si può imporre una prossimità dei termini tenendo conto dello spazio virtuale (numero di parole vuote) lasciato tra due frammenti consecutivi. es. (claudia AND attrice)~64 MG4J -- Managing GigaBytes for Java Pagina 38

Specificare gap virtuali differenti Si possono ottenere falsi negativi se la lunghezza di qualche ancora è maggiore di quella scelta per lo spazio virtuale. In fase di indicizzazione è possibile specificare una differente lunghezza per il gap virtuale. java it.unimi.dsi.mg4j.tool.IndexBuilder -a -g anchor:100 -v anchor:actors- anchor.resolver --downcase -S actors.collection mycollection MG4J -- Managing GigaBytes for Java Pagina 39

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 MG4J -- Managing GigaBytes for Java Pagina 40

Rappresentazione del dizionario Una rappresentazione più efficiente può essere ottenuta attraverso l’uso di una monotone minimal perfect hash function, una struttura dati molto compatta che può essere utilizzata per rispondere alla domanda: “Qual è l’indice del termine XXX ?”. Tale mappa può essere costruita a partire da una lista ordinata di termini con il comando: java it.unimi.dsi.sux4j.mph.MinimalPerfectHashFunction titles.mph mycollection-title.terms MG4J -- Managing GigaBytes for Java Pagina 41

Rappresentazione del dizionario (2) La correttezza della risposta restituita da una MinimalPerfectHash è garantita solo per i termini efffettivamente presenti nel dizionario. Se non si è sicuri che la struttura venga interrogata utilizzando solo termini del dizionario, occorre utilizzare una funzione “firmata”, che utlizza uno speciale valore di ritorno (-1) per segnalare il fatto che un termine non esiste all’interno della mappa: java it.unimi.dsi.util.ShiftAddXorSignedStringMap titles.mph titles.map mycollection-title.terms MG4J -- Managing GigaBytes for Java Pagina 42

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.util.ImmutableExternalPrefixMap - b4Ki -o mycollection-title.terms mycollection- title.dict MG4J -- Managing GigaBytes for Java Pagina 43

Esercizi per casa Ripetere l'esercitazione utilizzando la collezione htmlDIS e la collezione cities. Indicizzare anche le ancore. Esercizio opzionale: provare altre collezioni di documenti. Esempio: – PdfDocumentFactory; – TREC index. – Istruzioni sul manuale di MG4J: – TREC GOV2 è scaricabile dal sito: (file: trecgov bysource.v1.gz). – MG4J -- Managing GigaBytes for Java Pagina 44