Text-Retrieval mit Oracle Vortrag von Andreas Mück & David Diestel Oracle 8i interMedia • “... a product designed to manage multimedia Web content within Oracle 8i.” • Das Programmpacket unterteilt in drei Bereiche. Gliederung von Oracle 8i interMedia Oracle 8i interMedia Oracle 8i interMedia Text Oracle 8i interMedia Audio, Image, and Video Oracle 8i interMedia Locator Oracle 8i interMedia Text • versteht sich als Werkzeug zur Erstellung von Applikationen zur Anfrage auf Texte • bietet Möglichkeiten – zur Suche in – zum Retrieval auf – zur Ansicht von Textdokumenten Oracle 8i interMedia Text(2) • zusätzlich für englischsprachige Dokumente – Begriffssuche – Themenanalyse • verwendet Standard-SQL und PL/SQL Erstellung einer Querry Application 4 Schritte • • • • Laden der Dokumente Indexieren der Dokumente Suchanfragen stellen gefundene Dokumente präsentieren Laden von Dokumenten • System erwartet, daß Dokumente in eine Textspalte geladen werden • Spaltentypen: – – – – – VARCHAR2 CLOB BLOB CHAR BFILE Laden von Dokumenten (2) • LONG & LONG RAW für DB-Upgrade Oracle7 auf Oracle8 • auch Speichern von Dokumenten im lokalen Dateisystem oder Inter/Intranet u.a. möglich – Eintrag von Dateipfaden oder URLs in die Tabelle Laden von Dokumenten (3) • Unterstützung fast aller Dokumentformate • Laden von Dokumenten unter Verwendung des SQL INSERT Statements Beipiel: CREATE TABLE docs (id number primary key, text varchar2(80)); – erzeugt Tabelle mit 2 Spalten: id und text Tabelle füllen mit INSERT: insert into docs values(1, 'this is the text of the first document'); insert into docs values(12, 'this is the text of the second document'); Laden von Dokumenten (4) • Laden von Dokumenten aus dem Dateisystem mit – SQL*Loader – ctxload executable – DBMS_LOB.LOADFROMFILE() PL/SQL procedure to load LOBs from BFILEs – Oracle Call Interface Indexierung • Indexierung erfolgt auf der Dokumentenspalte • spezieller Indextyp: ctxsys.context • Tabelle muß PK besitzen (Doc-ID!?) • Beispiel: create index myindex on docs(text) indextype is ctxsys.context; Indexierung (2) • Erzeugen des Index mit CREATE INDEX, Bearbeiten mit ALTER INDEX • Definition von Parametern mit – – – – CTX_DDL.CREATE_PREFERENCE CTX_DDL.SET_ATTRIBUTE CTX_DDL.CREATE_STOPLIST CTX_DDL.CREATE_SECTION_GROUP Indexierung (3) • Datastore: Wie/Wo sind die Dokumente gespeichert? • Filter: Welche(s) „Importformat(e)“? • Lexer: Sprachauswahl für Termextraktion Vielsprachigkeit möglich • Wordlist: Einstellungen für Stemming, Fuzzy & Substring-Index Indexierung (4) • Storage: Parameter für die Indexspeicherung z.B. tablespace • Stop List: Stopwortliste • Section Group: Definition von Sektionen bzw. wie diese erkannt werden, benötigt für WITHIN Anfragen Anfragen • SQL-, PL/SQL-Anfragen • Verwendung des CONTAINSOperators z.B.: SELECT SCORE(1), title from newsindex WHERE CONTAINS(text, 'oracle', 1) > 0; Anfragen(2) • Mögliche Operatoren – Word-Querys – Boolsche Verknüpfung – Near-Operator – beliebige Wildcards – WITHIN – ABOUT-Querys (Themensuche) – Thesaurus Ranking • „inverse Termfrequenz“: Termfrequenz/Dokumentfrequenz • Berechnet durch SCORE-Operator Erzeugung der Ausgabe • Ausgabe des Dokuments in HTML/Text • Highlighting möglich