Programmieraufgabe 4 (Query Prozessor)

Startseite
THE TRUTH Informationssysteme
Sommersemester 2005
     From:              Do, 19.05.2005
     Upload deadline:   Do, 23.06.2005 09:15 MEZ (verlaengert!)

Ziel dieser Programmieraufgabe ist es, einen einfachen Query Prozessor für den gecrawlten Datenbestand zu implementieren. Der Query Processor soll einfache Suchanfragen bearbeiten und Ranglisten der besten Treffer - sortiert nach Relevanz (Aehnlichkeit) - zurückgeben.

Der Query Prozessor soll:

  1. die Anfrage analysieren (z.B. Sonderzeichen entfernen, String.toLowerCase() anwenden, etc.) und einzelne Suchbegriffe extrahieren;
  2. Stoppwörter aus der Query entfernen;
  3. die restlichen Keywords in Wortstämme mit Hilfe des Stemmers umwandeln;
  4. Die Anfrage auf eine SQL-Query abbilden und diese auf der Datenbank ausführen;
  5. Die Top-10 der Trefferliste (URLs der gefundenen Dokumente) - sortiert nach Relevanz - zurückgeben.

Die Anfrage, die der Query Prozessor verarbeiten soll, besteht aus positiven und auszuschliessenden Suchbegriffen, getrennt durch Leerzeichen (d.h ein Treffer soll passende Features zu allen positiven Wörtern enthalten und darf keine Negativ-Features enthalten). Man kann davon ausgehen, dass jede Query mindestens einen 'positiven' Suchbegriff enthalten soll.

Format der Suchanfrage:

        
     [-]key_1 [-]key_2 ... [-]key_n
mit:
       
       key   - Treffer soll den Wortstamm des Suchbegriffs enthalten.
      -key   - Treffer darf den Wortstamm des Suchbegriffs nicht enthalten.

Mögliche Beispiele einer Query:

Als Relevanzmaß (Aehnlichkeit) verwenden wir den Skalarprodukt zwischen dem Query-Vektor und dem Featurevektor des Dokuments. Die Query wird in unserem Modell durch den Vektor ihrer Positiv-Features (jeweils mit Gewicht 1.0) dargestellt, für die Gewichtung der Features in den Dokumenten soll tf*idf Maß benutzt werden. Die Negativ-Features der Query werden bei der Berechnung der Relevanz nicht berücksichtigt.

Der Query-Prozessor soll als Ergebnis die URLs der Top-10 Treffer, absteigend sortiert nach Relevanz, zurückgeben. Bei sehr selektiven Anfragen, die insgesamt weniger als 10 Treffer finden, ist die Ergebnisliste entsprechend kleiner.

Die Lösung soll die Pflichtklasse

   public class ISQueryProcessor implements ISQueryProcessorInterface
enthalten, die die vorgeschribene Funktionalität nach Vorgaben des Interfaces ISQueryProcessorInterface realisiert.

Erweiterte Funktionen (z.B. Unterstützung der Präfixsuche, des "OR"-Operators, Cosinus-Maß für die Query-Dokument Ähnlichkeit, etc.) sind optional (aber natürlich willkommen).