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