Interrogazioni Interrogazioni keyword based
Transcript
Interrogazioni Interrogazioni keyword based
Interrogazioni Keyword based Pattern matching Basate sui thesauri Query strutturali – – Per documenti strutturati (HTML,XML,…) Non le vediamo Dato un modello dei dati, ogni query deve essere tradotta nel modello considerato prima della sua esecuzione 87 Interrogazioni keyword based Query – Risultato – parola o combinazione di parole insieme di documenti che contengono tali parole Si distinguono in: – – – – Semplici Di contesto Booleane Basate sul linguaggio naturale 88 1 Interrogazioni keyword based semplici Viene specificata una sola parola Direttamente supportate dal modello vettoriale/booleano Esempio: – Query: retrieval 89 Interrogazioni keyword based contesto Permettono di cercare insiemi di parole tra loro vicine E’ possibile specificare la distanza (max 4 parole) Esempio – – Query: Enhance, retrieval, 4 ‘… enhance the power of retrieval …’ soddisfa la query Ranking modificato 90 2 Interrogazioni keyword based booleane Query come formula logica – – Atomi: query di base che restituiscono documenti Operatori: compongono gli insiemi di documenti corrispondenti ad ogni query di base e restituiscono un particolare insieme di documenti e1 OR e2: documenti che soddisfano e1 o e2 e1 AND e2: documenti che soddisfano e1 e e2 e1 BUT e2: documenti che soddisfano e1 ma non e2 Gli operatori possono anche essere rilassati: – – 91 AND: documenti restituiti devono appartenere al risultato di tutte le query di base AND fuzzy: documenti restituiti devono appartenere al risultato di alcune query di base Interrogazioni keyword based basate sul linguaggio naturale Query: enumerazione di parole e query di contesto Risultato: tutti i documenti che soddisfano una parte della query Ranking basato su quante condizioni il documento soddisfa Si possono specificare thresholds Modello formale – – Query riscritte come vettori con condizioni aggiuntive (per query di prossimita’) Modello vettoriale 92 3 Interrogazioni di pattern matching Query: proprieta’ del testo, espressa tramite un pattern (si pensi ai pattern usati nell’operatore LIKE di SQL ma piu’ estesi) Risultato: documenti che contengono testo che soddisfa la proprieta’ Possono essere visti come query di base, analogamente alle query keyword-based semplici – Possibilita’ di usare contesti o formule booleane per comporle 93 Possibili pattern Stringa: – – Prefissi Suffissi Sottostringhe Intervalli Similarita’ – – – – – 94 Il documento deve contenere la parola Query keyword based semplici come caso particolare query pattern based Comput computer, computation, computing … ters computers, testers, painters, … tal talk, metallic,… Tutte le parole tra stringa S1 e stringa S2 Parole simili a quella data, per tenere conto per esempio di eventuali errori di battitura … 4 Interrogazioni basate sui thesauri Nel caso in cui il thesaurus si basi su una rete semantica, le relazioni semantiche possono essere utilizzate nelle query Esempio – – – Relazione SP: sinonimo Query: SP(veicolo) Risultato: documenti che contengono veicolo o un suo sinonimo 95 Indice inverso Per semplificare le ricerche dei documenti, i sistemi creano un indice inverso – tabella che per ogni termine indice contiene una lista dei documenti che la contengono Solitamente gli indici inversi vengono estesi per mantenere per ogni termine non solo i documenti che lo contengono ma anche il numero di occorrenze di tale termine nei vari documenti 96 5 Indice inverso termine documenti a 1,3,4,6,7 b 1,7 c 3,7 d 4,7 97 Gestione di testi in Oracle 9i Oracle 9i Text permette di – indicizzare testi e documenti memorizzati in Oracle 9i, in file del sistema operativo o URL, in maniera integrata con i dati relazionali tradizionali con possibilità di interrogazioni basate sul contenuto – possibilità di utilizzare un thesaurus classificare documenti in base al loro contenuto vedremo solo il primo aspetto 98 6 Gestione di testi in Oracle 9i Formati – – – – – File di testo HTML, XML documenti Word PDF … Linguaggi – – 99 per ricerche tematiche, inglese e francese possibilità di estendere i linguaggi caricando opportuni thesauri per il linguaggio di interesse Sviluppo applicazione testuale Tre fasi – – – Caricamento documenti Indicizzazione Manipolazione 100 7 Esempio create table docs (id number primary key, text varchar2(80)); insert into docs values (1,'first document'); insert into docs values (2, 'second document'); create index doc_index on docs(text) indextype is ctxsys.context; select id from docs where contains(text, 'first') > 0; 101 Rappresentazione documenti A B C 102 8 Rappresentazione documenti A. Documento contenuto in un campo di tipo CHAR, VARCHAR, VARCHAR2, LONG, LONG RAW, BLOB, CLOB B. Campo di tipo BFILE C. Campo di tipo URIType la tabella deve avere una chiave primaria, utilizzata per identificare i documenti 103 Caricamento documenti Direttamente con statement INSERT SQL Loader procedure ad hoc OCI 104 9 Indicizzazione documenti Oracle supporta diverse tipologie di indice – – – CONTEXT, per ricerche su documenti arbitrari CTXCAT, per ricerche combinate su documenti brevi e dati strutturati MATCHES, per classificazione documenti noi vedremo solo il tipo CONTEXT la creazione dell’indice è un passo necessario per l’esecuzione di interrogazioni sul documento 105 Indice CONTEXT Determina i termini indice associati ad ogni documento – – crea il surrogato organizza il surrogato come indice inverso 106 10 Indicizzazione documenti comando per la creazione di indici create index INDEXNAME on TABLE(COLUMN) indextype is ctxsys.context il comando per default assume che: – – – – è possibile modificare le impostazioni di base, customizzando il comando CREATE INDEX – 107 la colonna sia di tipo A il linguaggio sia quello specificato durante l’installazione Usa lista di stopword di default (e quindi le elimina dal testo senza indicizzarle) Abilita stemming sistema di preferences Indicizzazione documenti In generale, il comando di creazione di indice esegue un insieme di processi che creano oggetti intermedi per ogni processo è possibile specificare delle preferenze 108 11 Indicizzazione documenti 109 Indicizzazione documenti - processi Datastore: scorre le righe della tabella e legge i dati della colonna, restituendo i dati contenuti nel documento Filter: prende i documenti restituiti dal datastore e li trasforma in una rappresentazione testuale – – 110 non necessaria per plain text, XML o HTML documenti Word, PDF, ecc. Vengono convertiti in un testo con mark-up (esempio HTML) Sectioner: divide l’informazione strutturale (markup) dal contenuto Lexer: suddivide il plain text in token (parole) e crea token tematici (in relazione alle preferenze specificate) Indexing engine: crea l’inverted index, eliminando stopword, contenute in STOPLIST e crea indici per stemming utilizzando informazioni in WORDLIST 12 Indicizzazione documenti preferenze per ciascun processo ci sono uno o più oggetti che rappresentano i possibili comportamenti in generale, gli oggetti sono raggruppati in classi: 111 Indicizzazione documenti preferenze tali oggetti non possono essere usati direttamente negli indici: – – – si crea una preference a partire da tali oggetti template la si personalizza settandone gli attributi si usa tale preference per customizzare l’oggetto durante la creazione dell’indice 112 13 Indicizzazione documenti Esempio ctx_ddl.create_preference('mypref', 'FILE_DATASTORE'); Tipo preferenza ctx_ddl.set_attribute('mypref', 'PATH', '/docs'); Attributo create index doc_index on docs(text) indextype is ctxsys.context parameters ('datastore mypref'); Oggetto con preferenza 113 Indicizzazione documenti preferenze nella clausola parameters si possono specificare più classi, semplicemente aggiungendo una coppia keyword-preference – parameters('datastore mypref filter myfilter') questo meccanismo è usato per tutte le classi tranne SECTION GROUP e STOPLIST, che hanno una API propria esistono dei parametri utilizzati dal sistema di default (quelli per LEXER, WORDLIST e STOPLIST dipendono dal linguaggio) 114 14 Datastore DIRECT_DATASTORE (default) assume che il documento sia memorizzato direttamente nella colonna indicizzata, ne restituisce semplicemente il contenuto FILE_DATASTORE interpreta la colonna come un nome di file, lo apre e ne restituisce il contenuto URL_DATASTORE interpreta la colonna come un URL, effettua una GET e restituisce il contenuto ... 115 Filter 116 NULL_FILTER (default) utilizzato quando il contenuto del documento non è in formato binario, passa semplicemente il testo dal datastore al sectioner CHARSET_FILTER converte i documenti da un insieme di caratteri straniero al character set del database USER_FILTER/PROCEDURE_FILTER filtering ad hoc (es. per convertire tutto in lettere maiuscole) in forma di procedura INSO_FILTER riconosce automaticamente e filtra oltre un centinaio di formati diversi, tra cui Word e Acrobat, producendo HTML come output 15 Lexers BASIC_LEXER: per la maggioranza delle lingue europee, si può modificare il comportamento di default attraverso gli attributi – – – – JOINS per specificare caratteri non alfanumerici da trattare come lettere valide PUNCTUATION per specificare i simboli di punteggiatura (importanti per sezioni SENTENCE e PARAGRAPH) per la normalizzazione del testo (es. accenti, maiuscole/minuscole, parole composte) per selezionare indicizzazione di testo o tematica 117 Stoplist lista delle stopword, che non vengono considerate per l’indicizzazione API separata: ctx_ddl.create_stoplist('mylist'); ctx_ddl.add_stopword('mylist', 'the'); stoplist di default, che dipendono dal linguaggio si possono aggiungere stopword all’indice senza doverlo ridefinire alter index myidx rebuild parameters ('add stopword AND'); 118 stop classes (es. NUMBERS) e stop themes 16 Wordlist non ha effetto sull’indicizzazione, ma contiene i setting per espansione stem e fuzzy dei termini utilizzati per rispondere alle interrogazioni un solo oggetto BASIC_WORLDLIST con attributi: – – – – STEMMER (espansione di una parola a forme differenti, es. ENGLISH, ITALIAN, NULL) FUZZY_MATCH (considera parole mistyped, es. varie lingue e OCR) FUZZY_SCORE (score floor per espansione fuzzy) FUZZY_NUMRESULT (max. numero parole per espansione fuzzy) 119 Section Groups La classe section group prende un formato di testo (es. XML o HTML) come input e restituisce i section boundaries e plain text i section group non sono creati con create_preferences, ma con una API separata – ctx_ddl.create_section_group('mygroup’, 'html_section_group'); il primo argomento è il nome del section group, il secondo è il tipo, che specifica il formato del testo di input e le regole per individuare le sezioni 120 17 Section Groups tipi di section groups: – NULL_SECTION_GROUP: da usare quando non ci sono sezioni o ci sono solo sezioni speciali: SENTENCES e PARAGRAPH – – – – Default Vedremo solo questo BASIC_SECTION_GROUP: per XML o HTML, rimuove semplicemente i markup tags, che devono essere bilanciati, non supporta attributi e commenti HTML_SECTION_GROUP: per HTML XML_SECTION_GROUP: per XML NEWS_SECTION_GROUP: per newsgroup style postings, rimuove header lines 121 Section Groups Le sezioni create possono essere di vario tipo Utili in caso di documenti con tag Noi vedremo solo sezioni di tipo SPECIAL – non sono riconosciute attraverso tag, ma dal lexer attraverso la punteggiatura SENTENCE PARAGRAPH 122 18 Section Groups 123 Section Groups - esempio Documento plain text Creazione section group ctx_ddl.create_section_group('mygroup', ’null_section_group'); aggiunta sezioni di tipo SPECIAL ctx_ddl.add_special_section('mygroup', ’SENTENCE'); Si specifica il section group durante la creazionde dell’indice create index doc_index on docs(text) indextype is ctxsys.context parameters (‘section group mygroup'); 124 A questo punto e’ possibile eseguire interrogazioni all’interno delle dezioni definite – Si veda oltre 19 Aggiornamento degli indici L’indice creato non viene aggiornato automaticamente dopo ogni operazione DML indicizzare un singolo documento richiede molto tempo gli inverted index si aggiornano meglio su un insieme di documenti per volta le applicazioni in genere sono abbastanza statiche, e non è necessaria una completa consistenza – – – possibilità di ricostruzione totale o parziale Procedura ctx_ddl.sync_index – 125 Interrogazioni La creazione di un indice di tipo CONTEXT permette di eseguire interrogazioni sul contenuto dei documenti funzione CONTAINS permette di specificare interrogazioni di tipo – – – – – – Keyword based Pattern-based Booleane Di contesto Thesaurus Su sezioni Ogni interrogazione viene rappresentata come una stringa – Interrogazioni in linguaggio naturale 126 20 Interrogazioni – funzione CONTAINS select id from texttab where contains(textcol,'query') > 0 – – il primo argomento è il nome della colonna, il secondo è il testo dell’interrogazione (max 2000 byte) restituisce un numero, che quantifica il match 0 = no match 127 Interrogazioni - scoring select id, score(1) from texttab where contains(textcol, 'query', 1) > 0 order by score(1) desc 1 è contains label e può essere un qualsiasi numero, utilizzato per associare lo score nella select list con quello nella clausola where lo score è un numero compreso tra 0 e 100, ed è relativo (significativo solo per la query considerata) 128 21 Interrogazioni - scoring Modello vettoriale Pesi wij = 3 f(i,j)(1+log(N/ni)) con – – N numero totale tuple normalizzati tra 0 e 100 la similarità è un valore tra 0 e 100 Vari operatori di composizione 129 Interrogazioni - tipologie A. Ricerca di documenti che contengono parole o frasi – – Per default case insensitive (modificabile con preferenze BASIC_LEXER) Keyword based, pattern based, contesto B. Ricerca all’interno di sezioni di documenti (WITHIN) C. Ricerca di documenti che trattano un certo argomento (ABOUT) o utilizzo di thesaurus D. Interrogazioni booleane E. operatori di score 130 22 Interrogazioni A – keyword-based Keyword based semplice contains(text, 'dog') > 0 Keyword based con frasi contains(text,'dog my cat') > 0 le stopword sono trattate come wildcard (matchano qualsiasi parola) contains(text, 'dog the cat') > 0 restituisce 'dog my cat’, 'dog your cat’, 'dog the cat' le stopword da sole vengono eliminate dalla query 131 Interrogazioni A – pattern-based WILDCARD (%_) per pattern matching (come in LIKE di SQL) FUZZY (?) trova parole con spelling simile a quella data (usa wordlist): ?termine STEM ($) trova parole con radice comune (usa wordlist): $termine SOUNDEX (!) trova parole con stesso suono (usa una specifica espansione fuzzy): !termine EQUIV (=) permette di indicare esplicitamente varie forme della stessa parola: labradors = alsatians are big dog – Si considera indifferentemente labrador o alsatians E’ possibile applicare questi operatori anche all’italiano, settando opportuni parametri 132 23 Interrogazioni A - contesto operatore NEAR, che ha due forme dog ; cat ; boat il punteggio dipende da quanto i termini sono vicini l’uno all’altro, in termini di numero di parole NEAR((dog,boat), 10, TRUE) – primo argomento è lista di parole – secondo è distanza massima (numero di parole) tra tutte le parole indicate – terzo specifica se tenere conto dell’ordine in cui appaiono nella lista 133 True: considero ordine Default false Interrogazioni B - sezioni WITHIN: limita una query a una particolare sezione Approccio – – Documento plain text Creazione section group ctx_ddl.create_section_group('mygroup', – ’null_section_group'); aggiunta sezioni di tipo ZONE ctx_ddl.add_special_section('mygroup', ’SENTENCE'); – Creazione indice con preferenza create index myindex on docs(text) parameters (section group mygroup) – 134 Query di tipo within contains(text, ’tiger & cat within sentence') > 0 24 Interrogazioni tematiche C Si vogliono determinare i documenti che trattano un certo concetto la stringa specifica rappresenta il concetto (tema) cercato, rappresentato da ‘frase’ solo per inglese e francese richiede la presenza di una knowledge base – – – ABOUT(frase) gerarchia di concetti con 6 sottoalberi: scienza-tecnologia, affari e finanza, politica e militare, sociale, geografia, idee astratte E’ case sensitive l’indice deve avere una componente tematica se non ce l’ha, l’interrogazione viene espansa in una query non tematica 135 Interrogazioni tematiche C esempio contains(text, 'about(canines)') se esiste l’indice, può restituire documenti che contengono “dog” se non esiste, about(go home now) è trasformata in $go,$home,$now 136 25 Interrogazioni C - Thesaurus Possibilità di creare Thesaurus che definiscono sinonimi e relazioni gerarchiche tra parole o frasi il thesaurus non viene installato di default ma deve essere caricato – il sistema contiene un thesaurus di default per l’inglese il caricamento di un Thesaurus permette di espandere le ricerche ai sinomini di una certa parola o ad altre parole ad essa associate 137 Interrogazioni C - Thesaurus file con formattazione particolare alcune relazioni considerate – SYN: sinonimi – PT: preferred term – BT: broader term – NT: narrower term – RT: related term – TR: traduzione in altri linguaggi gli stessi identificatori corrispondono a procedure che permettono di utilizzare queste relazioni nelle interrogazioni 138 26 Interrogazioni C - Thesaurus 139 SYN( term [, thesname] ) PT( term [, thesname] ) BT( term [, level [,thesname]] ) NT( term [, level [,thesname]] ) TT( term [, thesname] ) RT( term [,thesname] ) TR( term [,lan [,thesname] ]) Livelli di distanza nel thesaurus dal termine considerato Thesname: nome del thesaurus Lan: linguaggio Se non si specifica il thesaurus, si considera quello di default Interrogazioni C - esempio Se la query contiene – BT(dog) E nel thesaurus dog viene generalizzato con – animal la query viene sostituita con – dog OR animal Si veda dopo per il significato di OR 140 27 Interrogazioni D - booleane AND (&): documenti che contengono almeno un’occorrenza di ciascun termine indicato Restituisce il punteggio minimo tra quelli degli operandi – OR (|): documenti che contengono almeno un’occorrenza di almeno un termine indicato Restituisce il punteggio massimo tra quelli degli operandi – NOT (~) è "AND NOT” (differenza): – 'dog NOT cat' restituisce i documenti che contengono "dog" ma non contendono "cat” – il punteggio restituito è quello del figlio sinistro 141 Interrogazioni D – booleane rilassate 142 MINUS (-) sottrae il punteggio dell’operando destro a quello del sinistro contains(text, 'tiger MINUS rabbit') > 0 – tiger e preferibilmente non rabbit – sottrae i punteggi ACCUM (,) raggruppa più parole o frasi e ne accumula i punteggi contains(text, 'tiger ACCUM rabbit)') > 0 – tiger e preferibilmente rabbit – Peso maggiore a chi contiene tutti i termini. Per documenti che contengono gli stessi termini, si considerano le frequenze 28 Interrogazioni D - osservazione AND – – – nella logica a due valori, richiede che entrambi gli argomenti siano veri interpretando vero = 1 e falso = 0, viene restituito il valore minimo stesso discorso nel caso di valori compresi tra 0 e 1 ACCUM – – semplicemente somma i punteggi più termini compaiono, più il documento è rilevante 143 Interrogazioni D - osservazione OR – – – nella logica a due valori, richiede che almeno un argomento sia vero interpretando vero = 1 e falso = 0, viene restituito il valore massimo stesso discorso nel caso di valori compresi tra 0 e 1 MINUS – – toglie punteggi un documento è più rilevante se i termini a destra non compaiono 144 29 Interrogazioni E - operatori di score WEIGHT (*) moltiplica il punteggio di un termine di ricerca per renderlo più o meno importante nella query (peso tra .1 e 10) contains(text,'(dog*2) AND cat') > 0 Se il valore diventa maggiore di 100, lo si setta a 100 THRESHOLD (>) elimina i documenti sotto una certa soglia contains(text,'(dog*2) AND cat') > 50 145 30