Information Retrieval con Apache Lucene

Transcript

Information Retrieval con Apache Lucene
Corso di Laurea Magistrale in
Ingegneria Informatica
Corso di Linguaggi e Tecnologie Web
II modulo – Tecnologie e Sistemi Web-oriented
A. A. 2013 - 2014
LINGUAGGI E TECNOLOGIE WEB
Information retrieval con Apache Lucene
Floriano Scioscia
1
LTW
A.A. 2013/14
Apache Lucene
DEI - Politecnico di Bari
• Lucene è un motore di Information Retrieval di Apache
Software Foundation
• Sito web: http://lucene.apache.org/
• Caratteristiche:
–
–
–
–
open source
100% Java → cross-platform
indicizzazione efficiente
ricerca full-text versatile: per frasi esatte, con caratteri jolly, di
prossimità, su specifici campi, etc.
– risultati ordinati per rilevanza
– porting disponibili in diversi linguaggi
Lucene
2
LTW
A.A. 2013/14
Architettura
DEI - Politecnico di Bari
Lucene
3
LTW
A.A. 2013/14
Modello di IR di Lucene 1/2
DEI - Politecnico di Bari
• Combina il modello booleano (BM) con quello a spazi
vettoriali (VSM): se un documento è “approvato” dal BM il
suo punteggio viene calcolato con il VSM
• Un documento è composto da più campi
Index
Document 1
Document 2
Field A (name/value)
Field A (name/value)
Field B (name/value)
Field B (name/value)
Lucene
4
LTW
A.A. 2013/14
Modello di IR di Lucene 2/2
DEI - Politecnico di Bari
– coord: fattore basato su quanti termini della query sono trovati nel
documento
– queryNorm: fattore di normalizzazione per rendere confrontabili i
punteggi di query diverse
– tf: term frequency
– idf: inverse document frequency
– boost: fattore di importanza dato a ciascun termine della query
– norm: incapsula fattori di importanza assegnati al documento, al campo
all'interno del documento, e un fattore di normalizzazione in base alla
lunghezza del campo
Lucene
5
LTW
A.A. 2013/14
Come usare Lucene
DEI - Politecnico di Bari
Lucene
6
LTW
A.A. 2013/14
Creare un indice
DEI - Politecnico di Bari
• Occorre usare un oggetto IndexWriter
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_46);
IndexWriterConfig iwc = new IndexWriterConfig(
Version.LUCENE_46, analyzer);
IndexWriter writer = new IndexWriter(dir, iwc);
• Lucene mette a disposizione diversi analizzatori di
documenti
– StandardAnalyzer è un valido analizzatore general-purpose per
la lingua inglese
Lucene
7
LTW
A.A. 2013/14
Aggiungere un documento all'indice
DEI - Politecnico di Bari
• La classe Document si usa per aggiungere un
documento/oggetto all'indice
Document doc = new Document();
• Per ogni Field appartenente al Document occorre
decidere se deve essere memorizzato nell'indice
(Field.Store.YES o Field.Store.NO)
Field pathField = new StringField("path", file.getPath(),
Field.Store.YES);
doc.add(pathField);
• Tipi di Field:
– TextField: un testo letto da InputStream
– StringField, IntField, LongField, FloatField, DoubleField
– ...
Lucene
8
LTW
A.A. 2013/14
Interpretare la query
DEI - Politecnico di Bari
• QueryParser interpreta la query e costruisce un oggetto
Query
– N.B.: per la query va usato lo stesso analyzer usato per i
documenti
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_46);
QueryParser parser = new QueryParser(Version.LUCENE_46,
field, analyzer);
Query query = parser.parse(line);
Lucene
9
LTW
A.A. 2013/14
Ricercare e gestire i risultati
DEI - Politecnico di Bari
• IndexSearcher per calcola lo score di match tra query e
documenti; restituisce un oggetto TopDocs, una lista di
oggetti ScoreDoc in ordine di rilevanza
• Da ogni ScoreDoc si possono recuperare il documento e
lo score
TopDocs results = searcher.search(query, 5 * hitsPerPage);
ScoreDoc[] hits = results.scoreDocs;
...
System.out.println("doc=" + hits[i].doc +
" score=" + hits[i].score);
Lucene
10
LTW
A.A. 2013/14
Live demo
DEI - Politecnico di Bari
• Sistema di IR sui testi dell'album “Wrecking Ball” di Bruce
Springsteen
• Per ogni documento nell'indice vengono analizzati tre
campi:
– Percorso
– Data di ultima modifica
– Testo
Lucene
11
LTW
A.A. 2013/14
DEI - Politecnico di Bari
Riferimenti
• Apache Lucene documentation,
http://lucene.apache.org/
Lucene
12