Dienstag, 24. Juni 2008

Scoring mit Oracle Text

Wie schon im ersten Blog angedeutet gibt es die unterschiedlichsten Arten, Oracle Text zu nutzen. Es können z.B. linguistische Suchen, Mustersuchen, Suchen mit Booleschen Operatoren, Abschnittssuchen bei XML und HTML-Formaten durchgeführt werden. Um dabei die Suchqualität zu erhöhen, wird zusätzlich die Technik des Relevanz Rankings genutzt. Im Folgenden wollen wir das Oracle Text Scoring (Ranking) Verhalten untersuchen und die neueste Entwicklung in 11g illustrieren. Folgende Beispiel-Tabelle wird als Grundlage genutzt:

SQL> SELECT * FROM texttabelle;

 ID DOKUMENT
--- ---------------------------------------------------------------------------
  1 Politik: A-Partei gewinnt Wahl in Hansestadt
  2 Politik: Terror in Nahost: Kriminalität steigt immer weiter an
  3 Wirtschaft: Erneuter Gewinnzuwachs in diesem Jahr
  4 Sport: Olympia rückt näher: Der Fackellauf ist in vollem Gange
  5 Politik: Wer wird US-Präsident? Obama und Clinton machen Wahlkampf
  6 Religion: Papst bestürzt über jüngsten Skandal!
  7 Politik: Wahlkampf in den USA geht weiter:  Clinton und Obama LIVE zu sehen
  8 Karriere: Software-Kenntnisse werden immer wichtiger
  9 Politik: Umfrage:  Alle wollen mehr Geld!
 10 Religion: Der Papst liest seine erste Messe in den USA!
 11 Wirtschaft: Muppet-Show der Steuerversprecher
 12 Politik: Bahn-Aufsichtsrat macht Weg frei für Börsengang
 13 Wissenschaft: Europäer im All
 14 Sport: EM-Gegner Türkei: Torwart Volkan bleibt gesperrt
 15 Sport: EM-Gastgeber Österreich: Trainer Hickersberger hört auf
 16 Sport: Deutschland-Gegner Türkei: Chaos als Prinzip
 17 Sport: Türkei-Spieler Altintop: "Ich habe Deutschland alles zu verdanken"
 18 Sport: Euro-Helden: Die größten Stars der EM-Geschichte
 19 Sport: WIMBLEDON Federer mühelos, Kohlschreiber enttäuscht
 20 Sport: Sport bleibt Sport!

20 rows selected.

Um ein Ranking (Scoring) für Dokumente in einer Abfrage zu erhalten, nutzt Oracle Text standardmäßig den inversen Häufigkeits-Algorithmus basierend auf Salton. Scoring nach der inversen Dokumenthäufigkeit bedeutet, dass häufiges Vorkommen eines Begriffes in Dokumenten zu einem niedrigen Scoringwert führt. Damit der Scoringfaktor hoch ist, muss ein Begriff zwar häufig im Dokument selbst, allerdings zusätzlich selten in allen Dokumenten insgesamt vorkommen. Im Handbuch Oracle® Text Reference 11g Release 1 (11.1) im Appendix F wird der Algorithmus am Beispiel erklärt. Um Relevanz-bezogene Abfragen auf Ergebnislisten durchzuführen, wird der Operator SCORE verwendet. Dabei kann auch eine Gewichtung durchgeführt werden, um das Ergebnis zu beeinflussen. Folgende Beispiele illustrieren die Gewichtung und den Einsatz des SCORE Operators: Es wird nach Dokumenten gesucht die den Suchbegriff 'Sport' oder 'Türkei' enthalten - sortiert nach ihrer Relevanz. Das Ergebnis sieht dann folgendermassen aus:

SQL> SELECT dokument, score(1) AS s FROM texttabelle
     WHERE contains(dokument, 'Sport or Türkei',1)>0
     ORDER BY score(1) DESC;

DOKUMENT                                                                      S
--------------------------------------------------------------------------- ---
Sport: Sport bleibt Sport!                                                   19
Sport: Olympia rückt näher: Der Fackellauf ist in vollem Gange                6
Sport: EM-Gegner Türkei: Torwart Volkan bleibt gesperrt                       6
Sport: EM-Gastgeber Österreich: Trainer Hickersberger hört auf                6
Sport: Deutschland-Gegner Türkei: Chaos als Prinzip                           6
Sport: Türkei-Spieler Altintop: "Ich habe Deutschland alles zu verdanken"     6
Sport: Euro-Helden: Die größten Stars der EM-Geschichte                       6
Sport: WIMBLEDON Federer mühelos, Kohlschreiber enttäuscht                    6

8 rows selected.

Gewichtet man den Suchbegriff 'Türkei', ändert sich der entsprechende Scoringwert und die Reihenfolge.

SQL> SELECT dokument, score(1) as s FROM texttabelle
     WHERE contains(dokument, 'Sport or Türkei*5',1)>0
     ORDER BY score(1) DESC
DOKUMENT                                                                      S
--------------------------------------------------------------------------- ---
Sport: EM-Gegner Türkei: Torwart Volkan bleibt gesperrt                      32
Sport: Deutschland-Gegner Türkei: Chaos als Prinzip                          32
Sport: Türkei-Spieler Altintop: "Ich habe Deutschland alles zu verdanken"    32
Sport: Sport bleibt Sport!                                                   19
Sport: Olympia rückt näher: Der Fackellauf ist in vollem Gange                6
Sport: EM-Gastgeber Österreich: Trainer Hickersberger hört auf                6
Sport: Euro-Helden: Die größten Stars der EM-Geschichte                       6
Sport: WIMBLEDON Federer mühelos, Kohlschreiber enttäuscht                    6

Wem diese Möglichkeiten des Rankings nicht ausreichen, kann in Oracle Database 11g die Möglichkeit nutzen, das Scoring weiter zu beeinflussen bzw. im Rahmen bestimmter Funktionen selbst zu definieren. Dazu stehen die neuen Operatoren DEFINESCORE und DEFINEMERGE zur Verfügung. Dem Suchbegriff können folgende Scoring-Ausdrücke und Funktionen zugeordnet werden:
  • DISCRETE: Term vorhanden 100, falls nicht 0
  • OCCURRENCE: Anzahl der Vorkommen
  • RELEVANCE: Standard-Relevanz-Ranking
  • COMPLETION: Ratio für Section Suche: Anzahl der der Treffer zu Anzahl aller Ausdrücke
  • IGNORE: Scoring des Terms ignorieren
  • LOG,ABS und Rechenoperationen
  • () für Gruppierung
  • Folgende Beispiele demonstrieren die Verwendung:
    
    SQL> SELECT dokument, score(1) as s
         FROM texttabelle
         WHERE contains(dokument,'DEFINESCORE(Sport, occurrence)', 1) >0
         ORDER BY score(1);
    
    DOKUMENT                                                                       S
    --------------------------------------------------------------------------- ----
    Sport: Olympia rückt näher: Der Fackellauf ist in vollem Gange                 1
    Sport: EM-Gegner Türkei: Torwart Volkan bleibt gesperrt                        1
    Sport: EM-Gastgeber Österreich: Trainer Hickersberger hört auf                 1
    Sport: Deutschland-Gegner Türkei: Chaos als Prinzip                            1
    Sport: Türkei-Spieler Altintop: "Ich habe Deutschland alles zu verdanken"      1
    Sport: Euro-Helden: Die größten Stars der EM-Geschichte                        1
    Sport: WIMBLEDON Federer mühelos, Kohlschreiber enttäuscht                     1
    Sport: Sport bleibt Sport!                                                     3
    
    8 rows selected.
    
    
    
    Die Scoring-Ausdrücke lassen sich auch hier gewichten, wie das nächste Beispiel zeigt:
    
    SQL> SELECT dokument, score(1) as s
         FROM  texttabelle
         WHERE contains(dokument,'DEFINESCORE(Sport, relevance*5)',1) >0
         ORDER BY score(1);
    
    DOKUMENT                                                                       S
    --------------------------------------------------------------------------- ----
    Sport: Olympia rückt näher: Der Fackellauf ist in vollem Gange                24
    Sport: EM-Gegner Türkei: Torwart Volkan bleibt gesperrt                       24
    Sport: EM-Gastgeber Österreich: Trainer Hickersberger hört auf                24
    Sport: Deutschland-Gegner Türkei: Chaos als Prinzip                           24
    Sport: Türkei-Spieler Altintop: "Ich habe Deutschland alles zu verdanken"     24
    Sport: Euro-Helden: Die größten Stars der EM-Geschichte                       24
    Sport: WIMBLEDON Federer mühelos, Kohlschreiber enttäuscht                    24
    Sport: Sport bleibt Sport!                                                    72
    
    8 rows selected.
    
    
    Möchte man die Scoring Algorithmen miteinander verbinden, ist dies mit dem AND und OR Operator in Kombination mit dem neuen DEFINEMERGE-Operator möglich. Das Scoring Endresultat wird dann über eine MERGE Methode wie AVG, ADD, MIN oder MAX bestimmt. Folgendes Beispiel zeigt die Verwendung:
    
    SQL> SELECT dokument, score(1) as s
         FROM texttabelle
         WHERE contains(dokument,'DEFINEMERGE(
    ((DEFINESCORE(Sport,occurrence)),(DEFINESCORE(Sport, relevance*5))),AND,MAX)',1) >0;
    
    DOKUMENT                                                                       S
    --------------------------------------------------------------------------- ----
    Sport: Olympia rückt näher: Der Fackellauf ist in vollem Gange                24
    Sport: EM-Gegner Türkei: Torwart Volkan bleibt gesperrt                       24
    Sport: EM-Gastgeber Österreich: Trainer Hickersberger hört auf                24
    Sport: Deutschland-Gegner Türkei: Chaos als Prinzip                           24
    Sport: Türkei-Spieler Altintop: "Ich habe Deutschland alles zu verdanken"     24
    Sport: Euro-Helden: Die größten Stars der EM-Geschichte                       24
    Sport: WIMBLEDON Federer mühelos, Kohlschreiber enttäuscht                    24
    Sport: Sport bleibt Sport!                                                    72
    
    
    Am besten probiert man das Ganze einfach einmal aus ...

    Beliebte Postings