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