Requêtes simples et mise en œuvre d’un thésaurus avec Oracle Secure Enterprise Search
Rappel
sur Oracle Secure Enterprise Search
Oracle SES est un
produit livré "clef en main". Il permet d'indexer des contenus
d'information déjà existants en désignant simplement leur localisation :
- Sites Web;
- Système de fichier;
- Compte de messagerie;
- Tables ou vues d'un SGBD
accessible en jdbc.
- Systèmes documentaires
(CMS, GED)
- Progiciels de gestion
(ERP)
Les propriétés descriptives des documents, appelées aussi
métadonnées ou metadata (description,
mots clefs, auteur..) sont extraites et proposées pour la saisie de critères
dans l'interface d'interrogation.
L'interface utilisateur est très flexible et se prête à une intégration, soit dans un Portail déjà existant, soit dans des applications qui nécessitent des fonctions de recherches évoluées appliquées à un référentiel préexistant.
Oracle SES propose également
une interface de type WebServices.L'interface utilisateur est très flexible et se prête à une intégration, soit dans un Portail déjà existant, soit dans des applications qui nécessitent des fonctions de recherches évoluées appliquées à un référentiel préexistant.
Extraction des méta-données
Avant d'aborder la partie "interrogations",
il est à noter que SES présente la particularité de pouvoir extraire les
meta-données incorporés dans certains documents. Il s'agit par exemple des tags
META que l'on retrouve dans l'en-tête de pages HTML, ou bien des attributs renseignés
par l'intermédiaire de l'option Propriétés pour les documents Microsoft
Office. On retrouve également ces metadata pour les documents Acrobat (PDF).
Le tableau suivant dresse une liste des correspondances entre attributs SES et metadata pour quelques types significatifs de documents.
Le tableau suivant dresse une liste des correspondances entre attributs SES et metadata pour quelques types significatifs de documents.
(Remarque: ce sont les termes français qui
ont été retenus.)
SES
|
HTML
|
Microsoft
Office
|
Acrobat
PDF
|
SUBJECT
|
SUJET
|
SUBJECT
|
|
AUTHOR
|
AUTEUR
|
AUTHOR
|
|
KEYWORDS
|
MOTS CLES
|
KEYWORDS
|
|
COMMENT
|
COMMENTAIRES
|
||
OWNER
|
|||
PUBLISHER
|
|||
CREATION DATE
|
|||
REVISION DATE
|
|||
SOURCE MIME TYPE
|
Oracle SES s'appuie, en particulier, sur l'utilitaire
ctxhx
lors de la phase de lecture des documents. Cette utilitaire prend
comme argument d'entrée le nom d'un document et construit une version HTML ou
bien TEXTE. Un paramètre META indique à ctxhx d'extraire les metadata qui ont
été recensées plus haut.
Exemple de Tags META dans un document HTML
name="title" content="Oracle Technology Network | World's
Largest Community for Developers, DBAs, and Architects">
name="description" content="Oracle Technology Network provides
services and resources to help developers, DBAs, and architects build, deploy,
manage, and optimize applications using Oracle products and industry-standard
technologies.">
name="keywords" content="oracle, technet, otn, oracle technology
network, linux, dba, linux, jdeveloper, database, dbms, java, j2ee, jee, developer,
php, grid, architect, soa, bea, dev2dev, weblogic">
Dans le cas de
Microsoft Excel, les meta-Data extraites sont identiques.
Interrogations simples
Setup des préférences
Le script de création des préférences pour
une instance SES est:
Rappelons que la création d'un index de type textuel (CTXYS) est sous le contrôle d'un jeu de préférences qui doivent être fixées avant la construction de l'index. Ces préférences agissent, en particulier, sur la prise en compte de particularités linguistiques.
$OH/SES/admin/wk0pref.sql
Rappelons que la création d'un index de type textuel (CTXYS) est sous le contrôle d'un jeu de préférences qui doivent être fixées avant la construction de l'index. Ces préférences agissent, en particulier, sur la prise en compte de particularités linguistiques.
Par défaut, le stemmer est correctement paramétré pour le Français (il s'agit d'un
multi-stemmer), ainsi que l'option
BASE_LETTER. En revanche la stop list est celle adaptée pour l'Anglais.
On peut y substituer celle prévue pour le Français de la façon suivante:
Sous sqlplus :
se connecter avec
WK_TEST
lancer le script :
$OH_INFRA/ctx/admin/default/drdeff.sql
lancer
l'ordre suivant
ALTER INDEX wk$doc_path_idx
rebuild parameters('replace stoplist DEFAULT_STOPLIST');
En ce qui concerne le stemmer, il sera préférable de le forcer pour le Français.
Par défaut, la syntaxe autorisée dans les formulaires d'oracle SES supporte quelques expressions mais certainement pas toutes celles supportées par Oracle text. En particulier, l'emploi d'opérateur de thésaurus, les recherches de proximité ou bien le stemming ne sont pas transmis par l'interface au moteur Oracle text.
Il est nécessaire
de réaliser un formulaire JSP qui utilise une classe Java de traitement plus
transparent du prédicat
Cette classe est :
CtxContains
.
L'exemple donné
est une sorte de pass-through où le prédicat est transféré intégralement
au moteur Oracle text, sans aucune interprétation ou altération de l'algorithme
de scoring. (t2Search.jsp)
Pour installer
cette page jsp:
Sur le système de fichiers:
Copier
t2Search.jsp
sur $OH_MIDDLETIERS/SES/query/tag
Initialement, la
classe
Le prédicat final qui est passé à Oracle text est généré de telle sorte que l'apparition d'un mot cherché dans le titre d'un document est considérée comme plus significative que sa découverte dans le contenu. On part du principe que le titre est très révélateur du sens du document.
Contains
effectue un traitement
filtrant des critères fournis par l'utilisateur. On peut ainsi considérer que
le comportement par défaut est de ramener les motifs d'interrogation à un petit
nombre: mots simples, liste de mots, exclusion, phrase, accumulation.Le prédicat final qui est passé à Oracle text est généré de telle sorte que l'apparition d'un mot cherché dans le titre d'un document est considérée comme plus significative que sa découverte dans le contenu. On part du principe que le titre est très révélateur du sens du document.
Remarque: Dans l'interface d'interrogation par défaut, les opérateurs "-" et "+" ont un comportement différent de celui observé nativement avec Oracle text. Par exemple, l’opérateur "-" est équivalent à l’opérateur NOT de Oracle text.
Interrogations simples sur le contenu de
l'instance WK_TEST
Afin de vérifier certaines fonctionnalités
avancées d'Oracle Text, voici quelques requêtes qui permettront de se
familiariser avec la syntaxe:
Le domaine de recherche choisi est celui de
notre exemple de recettes de cuisine, et l'interface d'interrogation est celui
fourni par la page t2Search.jsp qui
ne filtre pas la requête en entrée. L'url d'accès est :
/SES/query/tag/t2search.jsp
Interrogation
|
prédicat en
format natif
|
Commentaires
|
Type
d'opérateur
|
|
recettes avec du riz
|
riz
|
mot simple
|
||
recettes avec des
sardines |
$sardine
|
opérateur de stemming
($) afin de rechercher les
formes fléchies (formes plurielles dans ce cas) |
expansion
|
|
Recettes avec le verbe frémir
|
$frémir
|
opérateur de stemming pour rechercher les formes conjuguées (inflectional
stemming). Le derivational stemming n’est pas supporté pour le
Français
|
expansion
|
|
Recettes avec des radis
mais SANS beurre
|
radis NOT beurre
|
opérateur NOT
|
booléen
|
|
Recettes avec des radis
ET du beurre
|
radis & beurre
|
opérateur & ou bien AND
|
booléen
|
|
Recettes avec, de
préférence, des radis et du beurre ensemble
|
radis,beurre
|
le symbole "," agit sur le score. l'ordre des recettes
sera délivrée en fonction du score.
|
score
|
|
Recettes avec des radis,
mais de préférence sans beurre
|
radis - beurre
|
le symbole "-" devrait donner, en priorité, les
recettes avec radis mais sans beurre. (l'exemple ne semble ne pas
fonctionner!)
|
score
|
|
Recettes contenant le
fragment sardi
|
%sardi%
|
le caractère jocker est "%" et non pas "*"
|
expansion
|
|
Recette avec les termes
cuillère et arachide assez proches l'un de l'autre
|
cuillère;arachide
|
operateur de proximité NEAR ou bien ";".
100 mots d'écart maximum par défaut |
proximité
|
|
Recette avec les termes
cuillère et arachide proches l'un de l'autre
|
NEAR((cuillère,arachide), 10, TRUE)
|
opérateur de proximité
écart de moins de 10 mots, et dans l'ordre précisé |
proximité
|
|
Recettes avec pomme ou
pome
|
?pome
|
opérateur fuzzy pour les mots mal orthographiés ou avec des
lettres manquantes
|
expansion
|
|
Ajout d'un thésaurus
Comment exprimer
une interrogation du type: recettes à base de poisson mais sans coquillage?
ou bien, recettes incorporant des fruits secs ?
Pour répondre à cette question, on peut envisager de recourir à une gestion de contenu dans laquelle on s'efforcerait de catégoriser chacune des recettes. Cette approche nécessite un effort important de classement. On peut, d'autre part, exprimer la requête de la façon la plus exhaustive.
A l'inverse on peut avoir recours à un thésaurus. Ici, on constitue une nomenclature des aliments en partant du plus générique vers le plus spécifique. On pourra également se permettre quelques raffinements en autorisant des expressions populaires telles que: patates pour "pomme de terre", fayots pour "haricots", etc., par le biais de synonymes.
Le rôle de thésaurus est ainsi de proposer une classification des aliments à partir de laquelle une recherche pourra être construite automatiquement par Oracle SES.
Prenons un thésaurus simple, adapté au domaine culinaire (il s'agit d'un exemple très simplifié, servant uniquement à illustrer le propos)
Le thésaurus que l'on veut rajouter doit respecter un certain formalisme, dicté par la norme ISO-2788. Il s'agit d'un format où les relations entre termes sont exprimées à l'aide d'opérateurs parmi les suivants:
BT, NT, SYN , etc.
La constitution d'un thésaurus peut être une tache complexe qui exige beaucoup de temps et de concertation. Très souvent, on achète des thésaurus spécialisés sur un domaine (Médecine, Astronomie, Général etc.). Le thésaurus qui est probablement le plus conséquent est celui de l'UNESCO.
Consulter également un autre post consacré à ce sujet, et dédié au thésaurus de la communauté européenne EUROVOC.
Mais... revenons à notre modeste thésaurus culinaire. Pour le constituer, nous avons utilisé un éditeur de texte afin d'aboutir à un document exploitable pour la phase ultérieure de parsing.
Mais... revenons à notre modeste thésaurus culinaire. Pour le constituer, nous avons utilisé un éditeur de texte afin d'aboutir à un document exploitable pour la phase ultérieure de parsing.
Un utilitaire de chargement est prévu à cet
effet
ctxload -user ctxsys/@asdb -thes -name aliments
-file thesaliments
(Observer qu'il doit y avoir au moins un caractère d'espacement avant chacun des termes BT, SYN etc).
Voici les informations affichées avec l'outil d'administration (lancement:
oemapp dbastudio
puis choisir Oracle text manager)
Est-ce qu'il faut
régénérer les index pour tirer parti d'un thésaurus? Non, puisque le
thesaurus n'est utilisé que lors de l'interrogation et non pas lors de la phase
d'indexation.
Échantillons de requête
Voici quelques exemples de requêtes qui
peuvent être lancées sur la base de test. (Utiliser l'interface t2Search.jsp)
interrogation
|
Exemple de prédicat en format natif
|
Commentaires
|
Poissons avec, par
priorité, les recettes sans laitage sans laitages
|
NT(poissons,1,aliments)
- NT( laitages,1, aliments)
|
NT:
Narrower terms
poisson(s) n'est pas équivalent à poisson. C'est la raison pour laquelle un synonyme a été introduit dans le thésaurus pour préserver l'emploi de formes plurielles dans les requêtes. |
Recettes de poissons
sans laitages
|
NT(poissons,1,aliments)
NOT NT( laitages,1, aliments)
|
emploi
de deux termes génériques
|
Recettes de poissons
sans coquillages
|
NT(poissons,1,aliments)
NOT NT( crustacés,1, aliments)
|
|
Recettes à base de
pommes (en ignorant les recettes avec des pommes de terre)
|
syn(pommes,aliments)
NOT syn(patates,aliments)
|
remarquer
l'emploi du synonyme "patate" pour pomme de terre.
Cette requête permet de trouver des recettes où seule la variété de pomme a été mentionnée: ex: golden. |
L'emploi d'expressions de manipulation d'un thésaurus implique que la requête d'origine soit enrichie par le moteur Oracle Text à partir d'un éclatement du terme employé en ses formes plus spécifiques ou plus génériques. Par exemple, l'emploi du terme fruit avec une recherche pour tous les termes spécifiques de niveau 1 aboutira à une expression finale de plusieurs dizaines de termes. Il faut garder à l'esprit que ce n'est pas sans impact sur les performances.
A l'inverse, l'utilisation de l'opérateur
ABOUT est décrite dans la documentation comme plus efficace.
A
cette fin, le contenu d'un thésaurus doit, pour être pris en compte par Oracle Text, être ajouté à la base de
connaissance fournie en standard. Rappelons que cette base de
connaissance est bilingue : Anglais et Français uniquement, et qu'elle comprend
400.000 termes environ, liés pour la plupart par des relations hiérarchiques.
Cette base de connaissance recouvre des concepts généraux : Géographie,
Sciences, Sociologie etc..Ces tests ne sont pas couverts par ce document.
L'index pour SES doit être recréé avec
l'option INDEX_THEME actif pour le lexer choisi.
Quelques enseignements...
L'emploi d'un thésaurus est très utile
lorsque le corpus est homogène, et permet d'obtenir une très bonne exhaustivité
de résultat.
L'utilisation de synonymes apporte une réelle
valeur au contenu et permet l'expression de requêtes plus libres. En revanche,
la notion de généricité ne sera peut-être pas pertinente pour tous les
domaines, et risque d'aboutir à un nombre de résultats excessif.
Le thésaurus ne permet pas de décrire quelle
est la nature du document. Par exemple, si on étend notre base de
recettes à la constitution d'une base de connaissance sur tous les domaines
culinaires, il est vraisemblable que plusieurs thésaurus seront peut-être
nécessaires et qu'il faudra catégoriser les documents : Recette ?, Fiche
restaurant ?, Fiche de tour de main ?
Les documents doivent donc être classés en
fonction de cet axe. Il s'agit d'une catégorisation difficilement
automatisable.
Oracle SES propose la notion de groupe de documents
qui peut être utilisé dans ce sens, afin d'effectuer une catégorisation
manuelle de premier niveau.
Annexes
Adaptation de l'index WK_TES au Français
Le code qui suit permet de forcer la construction de l'index pour
les particularités de la langue Française.
BEGIN
ctx_ddl.set_attribute('WKSYS.WK_WORDLIST',
'STEMMER',
'FRENCH');
END;
BEGIN
ctx_ddl.set_attribute('WKSYS.WK_BASIC_LEXER',
'INDEX_THEMES', 'YES');
ctx_ddl.set_attribute('WKSYS.WK_BASIC_LEXER',
'CONTINUATION','-');
ctx_ddl.set_attribute('WKSYS.WK_BASIC_LEXER',
'THEME_LANGUAGE',
'FRENCH');
END;
ALTER INDEX
WK_TEST.WK$DOC_PATH_IDX
REBUILD PARAMETERS ('REPLACE LEXER WKSYS.WK_BASIC_LEXER
WORDLIST WKSYS.WK_WORDLIST');
Liste des opérateurs de thésaurus
(extrait de
Technical Overview of New interMedia text Services for Oracle8i)
SYN( term [, thesname] )
|
The
input term is always part of the output; if no synonyms are found then term
is the expansion. thesname is the name of the thesaurus to use. If omitted,
thesaurus DEFAULT is consulted. There is no DEFAULT thesaurus installed
automatically -- it is up to the user to load a thesaurus named DEFAULT.
|
PT( term [, thesname] )
|
Preferred
term. Only the preferred term is returned in the expansion.
|
BT( term [,
level [,thesname]] )
BTP( term [, level [,thesname]] ) BTG( term [, level [,thesname]] ) BTI( term [, level [,thesname]] ) NT( term [, level [,thesname]] ) NTP( term [, level [,thesname]] ) NTG( term [, level [,thesname]] ) NTI( term [, level [,thesname]] ) |
Broader/Narrower
terms of all types. The optional second argument is a numeric scope
indicating how many levels of hierarchy you want. A BT with a level of 2, for
instance, would search for the term, all broader terms of the term, and all
broader terms of those terms.
|
TT( term [, thesname] )
|
Top
term. Travel up the BT hierarchy to the root term. Only this root term is
searched.
|
RT( term [,thesname] )
|
Related
term. Search for term and all related terms.
|
TR( term [, lang [, thesname]]
)
|
Foreign
language translation of the term. Lang argument should match label used in
the input thesaurus. If omitted all foreign language translations will be
searched. Note that the foreign language translation must have been entered
in the input thesaurus -- we don't do automatic translation.
|
TRSYN( term [, lang [,
thesname]] )
|
Foreign
language translation of term synonyms. This is functionally equivalent to
taking SYN of the term, then TR of each resulting term. Like TR, if the
target language is omitted, all available translations will be searched.
|
Extension de la base de connaissance
Voici quelques étapes pour enrichir la base de
connaissance avec un thésaurus.
Remarque: il est utile de préciser que la base de connaissance contient peut-être certains termes figurant dans le thésaurus, et que par conséquent, il sera nécessaire de procéder à quelques connexions entre les termes de telle manière que l'ensemble de la base de connaissance soit homogène et qu'une même terme générique ne soit pas référencé de deux façons différentes.
Remarque: il est utile de préciser que la base de connaissance contient peut-être certains termes figurant dans le thésaurus, et que par conséquent, il sera nécessaire de procéder à quelques connexions entre les termes de telle manière que l'ensemble de la base de connaissance soit homogène et qu'une même terme générique ne soit pas référencé de deux façons différentes.
set
NLS_LANG=FRENCH_FRANCE.WE8MSWIN1252
C:\app\oco\thesaurus>ctxkbtc
-user ctxsys/manager1@asdb -name aliments
Oracle Text knowledge base extension: thesaurus
compiler
Connecting...
Processing
thesaurus: ALIMENTS
Processed
194 terms.
Writing
extended knowledge base to files.
...............................
.............................................................................................
Oracle
Text knowledge base successfully extended.
Disconnected
Fixer
l'attribut index_themes à la valeur YES:
begin
ctx_ddl.set_attribute('wk_basic_lexer','index_themes','yes');
end;
/
ALTER INDEX wk$doc_path_idx rebuild;
Liens utiles
Technical Overview of New interMedia
text Services for Oracle8i : très bon article de prise en main.
Lexique
- Forme fléchie. Variante d’un mot : formes conjugués, substantifs au pluriel ou au féminin.
- Lemme. Racine grammaticale des formes fléchies d’un terme (forme au singulier pour les substantifs et adjectifs, forme à l’infinitif pour les verbes etc.) ; à rapprocher de terme normalisé [Lemma]
- Stemming.(lemmatisation en Français): Technique pour réduire les termes en leur racine grammaticale (lemme).recherche documentaire en texte intégral.Le stemming est une technique qui permet de généraliser les mots suivant leurs variantes morphologiques
Stemming expands a search to include all words with the same linguistic root, by performing a morphological analysis of the word which allows for a search on both the root form of a word, and its inflected or derived forms.
1. Inflectional Stemming ? For all the supported languages, the stemmers return standard inflected forms of a word. In English, an
inflection is a change in the number such as the plural form of a noun - dog à dogs, or a change in the tense such as the conjugated
forms of a verb - to run à run, runs, running, ran.
2. Derivational Stemming ? For English, and French the stemmer also returns standard derived forms of a word. A derivation is a change in the ending of a word, which is not related to number or tense; a search on the noun manager will retrieve the adjective managerial.
Derivational stemming is available in English and French. (depuis la 9i,??)
Thésaurus: l’enrichissement des requêtes
(query expansion) par l’ajout automatique de termes [Attar & Fraenkel,
1977] grâce à l’utilisation d’un thesaurus [Qiu & Frei, 1993].
L’enrichissement peut également être réalisé par l’utilisateur (manual
relevance feedback) ou automatiquement8 (automatic relevance feedback) en
fonction des documents rapportés lors d’une première recherche (cf. [Salton, 1971-a]
ou [Robertson & Sparck-Jones, 1976]).
Commentaires