Accéder au contenu principal

Oracle Secure Enterprise Search

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.

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.

(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: $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 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.
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.

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

Posts les plus consultés de ce blog

Oracle Sites Cloud Service - Adding authentication to a site

With Oracle Sites Cloud Services, access to any site is Public, by default. If you have to add authentication, there is a very simple way to achieve it: First, we assume that authentication will be against the existing Identity Domain provided with the tenant. In a dedicated page of a site, called Login for instance, we add an App component which embeds an URL to any folder of Documents Cloud Service. ie: App URL =  https://documents.XX.oraclecloud.com/documents/ embed /home/nameasc Note that the URL will be called with the EMBED keyword . Then we add the App component is a region, and  we setup a height=1 and a width=1 (almost invisible). That's all. Each time a user will navigate to this custom   Login Page, and if the user is not yet authenticated, a new page will splash on the screen, asking for credentials. Once login and pasword are provided by the user, the page disapears and return to custom Login page. Optionnaly it's possible to add a dedicated butt

Auschwitz

 Quelques livres à propos des camps d'Auschwitz La mort est mon métier (Robert Merle) - 1952 Roman avec Rudolf Hoess (responsable camps d'Auschwitz) comme personnage principal Si c'est un homme (Primo Levi) - 1947 Témoignage de Primo Levi sur sa captivité à Auschwitz Les médecins d'Auschwitz (Bruno Halioua) - 1922 Etude sur l'organisation des services de médecine à Auschwitz Je me suis évadé d'Auschwitz (Rudolf Vrba) - 2004 Récit d'un captif qui a réussi à s'échapper d'Auschwitz Shoah  (Claude Lanzmann) - 1985 Dialogues du film "Shoah" Sonderkommando : Dans l'enfer des chambres à gaz  (Shlomo Venezia ) Entretien avec un ancien prisonnier qui a tenu le rôle de sonderkommando (manipulation des corps dans les chambres à gaz) Auschwitz I Birkenau

Streaming mp3 fromVLC / Icecast to Android

Here are some tips for streaming music to android mobile devices from a PC. Platform which has been used fo test: Ubuntu 11.10 oneiric + a NAS for storing music (windows can fit as well) Videolan VLC 1.1.12 (providing mp3 flow) icecast 2.3.2 (shoutcast radio) Winamp 1.2.12 for Android mobile(music player) Android-vlc-remote for Android (remote control for VLC) Start icecast server icecast2 -c icecast.xml The icecast xml config file is the original one. don't modify anything at this stage.  Setup VLC in order to stream mp3 instead ogg format Close VLC Prepare a playlist (ie: scarlatti.m3u) with Banshee or whatever. Launch VLC in command line vlc scarlatti.m3u --sout '#standard{access=shout,mux=ogg,dst=source:hackme@192.168.0.3:8000/scarlatti}' --sout-keep --extraintf=luahttp --fullscreen --http-album-art     Check that icecast is displaying a mount point for the new radio Check the HTTP acces