Prof. Dr.-Ing. Klaus Berberich Information Retrieval Sommersemester 2016 Telefon: 06 81 58 67-243 [email protected] Projektaufgabe 2 Die Projektaufgabe wird in der Veranstaltung am 6. Juni besprochen. Sofern Sie Bonuspunkte erhalten möchten, reichen Sie Ihre Lösung bis zum 5. Juni um 23.59 Uhr per E-Mail ein. Die Aufgaben bauen auf denen aus Projektaufgabe 1 auf – eine Beispiellösung finden Sie auf der Webseite zur Vorlesung. Aufgabe 2.1 SQLite und Xerial (1 Punkt) Installieren Sie SQLite (https://www.sqlite.org) auf Ihrem System. Laden Sie den JDBC-Treiber Xerial (https://bitbucket.org/xerial/sqlite-jdbc) in der Version 3.8.11.2 herunter. Machen Sie sich mit dem Zugriff auf eine SQLite-Datenbank von der Kommandozeile und per JDBC aus Java vertraut. Code-Beispiele hierzu finden Sie unter den genannten URLs. Reichen Sie als Lösung zu dieser Aufgabe die Ausgabe des Kommandos .version aus der SQLite-Kommandozeile ein. Aufgabe 2.2 Datenbank erstellen (1 Punkt) Erstellen Sie nun eine SQLite-Datenbank mit dem Namen nyt.sqlite zum Verwalten unserer Dokumentensammlung. In dieser soll es zwei Tabellen geben: In der Tabelle docs werden die Meta-Daten der Dokumente verwaltet. Sie soll folgende Attribute haben: (i) did als eindeutige ID des Dokumentes, (ii) title als Titel des Dokumentes und (iii) url als URL des Dokumentes In der Tabelle tfs wird verwaltet, welches Dokument, identifiziert durch seine ID, welchen Term mit welcher Häufigkeit enthält. Sie soll folgende Attribute haben: (i) did als ID des Dokumentes, (ii) term als Term und (iii) tf als Häufigkeit des Terms im Dokument. Wählen Sie für die Attribute sinnvolle Datentypen aus. Eine Übersicht der in SQLite verfügbaren Datentypen finden Sie unter folgender URL: https://www.sqlite.org/datatype3.html Geben Sie als Lösung geeignete CREATE TABLE Kommandos an. htw saar · Hochschule für Technik und Wirtschaft des Saarlandes · Fakultät für Ingenieurwissenschaften Goebenstraße 40 · 66117 Saarbrücken · http://www.htwsaar.de Prof. Dr.-Ing. Klaus Berberich Aufgabe 2.3 Importieren der Dokumente (2 Punkte) Wir möchten die Dokumente nun in die Datenbank importieren. Hierzu erweitern wir die Klassen Importer und Parser aus Projektaufgabe 1. Die Methode importDirectory von Importer soll nun für jede gefundene Datei mit der Endung .xml die Methode parse von Parser aufrufen. Die zurückgelieferte Instanz von Document soll in die Datenbank importiert werden. Für jedes Dokument wird eine neue Zeile in die Tabelle docs eingefügt. Je unterschiedlichem Term im Attribut content wird eine Zeile in die Tabelle tfs eingefügt. Für ein Dokument mit den Attributen • id : 23 • title : ABC • url : http://www.nytimes.com/abc • content : [a, b, c, a, b, a] soll also eine Zeile mit den Werten • 23, ABC, http://www.nytimes.com/abc in die Tabelle docs eingefügt werden. In die Tabelle tfs sollen insgesamt drei Zeilen mit folgenden Werten eingefügt werden • 23, a, 3 • 23, b, 2 • 23, c, 1 Um das Einfügen in die Datenbank möglichst effizient zu gestalten, empfiehlt es sich die Klasse java.sql.PreparedStatement zu verwenden. Diese ermöglicht vorkompilierte SQL-Kommandos und erlaubt zudem das stapelweise Einfügen mehrerer Zeilen in die Datenbank. Machen Sie sich hierzu mit den Methoden addBatch und executeBatch der Klasse vertraut. Eine sinnvolle Stapelgröße in unserem Fall sind zehn Dokumente. Reichen Sie Ihren Code als Lösung ein. Aufgabe 2.4 Berechnen von Statistiken über die Dokumentensammlung (1 Punkt) Bei der Besprechung von IR-Modellen haben wir verschiedene Statistiken kennengelernt. In dieser Aufgabe sollen Sie weitere Tabellen anlegen, die solche Statistiken aus der Tabelle tfs berechnen. Verwenden Sie hierzu Kommandos der Bauart CREATE TABLE ... AS (SELECT ...). Es sollen folgende Tabellen erzeugt werden: Eine Tabelle dls mit den Attributen (i) did und (ii) len, welche zu jedem Dokument seine Länge, d.h. die Gesamtzahl der Termvorkommen darin, enthält. Eine Tabelle dfs mit den Attributen (i) term und (ii) df, welche zu jedem Term seine Dokumentenhäufigkeit enthält. Eine Tabelle d mit dem Attribut (i) size. Darin soll nur eine Zeile enthalten sein mit der Gesamtzahl der Dokumente als Wert. Geben Sie die verwendeten SQL-Kommandos als Lösung an. 2/2