OpenLogos 1.0.1 Installation und Anwendung
Dieser Artikel führt durch die Installation des maschinellen Übersetzungssystems OpenLogos und die dafür notwendige PostgreSQL-Konfiguration. Die Anwendung des betriebsbereiten Systems wird demonstriert und ein Skript zum praktischen Einsatz wird vorgestellt. Der Artikel schließt mit einem Ausblick auf mögliche zukünftige Entwicklungen.
Einleitung
Seit Oktober 2005 ist das maschinelle Übersetzungssystem OpenLogos als freie Software verfügbar. Die Projektverantwortlichen des Deutschen Forschungszentrums für Künstliche Intelligenz (DFKI) haben bei der Portierung ganze Arbeit geleistet. Leider ist die Installation und die Anwendung noch sehr umständlich. Hinzu kommt, dass die Dokumentation eher etwas für die Knobel- und Rätselfreunde unter uns ist. In den Kommentaren zu den OpenLogos-Ankündigungen der Linux-Portale (z.B. Pro-Linux: Übersetzer Logos wird Open Source) gibt es kaum Hinweise auf erfolgreiche Installationen. Auch die OpenLogos-Mailingliste ist noch sehr ruhig.
Es gibt noch einiges zu tun, bevor OpenLogos in Form eines anwenderfreundlichen Distributionspakets zur Verfügung stehen wird. Doch da zukünftige Entwickler aus der Anwenderbasis kommen werden, sollte man zuerst die Installation und Anwendung erleichtern. Dieser Artikel leistet hierzu hoffentlich einen Beitrag. Ganz nebenbei kann auch ein wenig über das Datenbanksystem PostgreSQL gelernt werden.
Die Entwickler testeten OpenLogos 1.0.1 unter SuSE Linux 9.2 und Fedora Core 4. Dieser Artikel beschreibt die Installation unter Ubuntu 5.10 "Breezy Badger". Da Ubuntu auf Debian basiert, sollten auch Debian-Anwender mit dieser Anleitung zurecht kommen. Eine Warnung vorweg: Für Kompilierung und Installation sollte man 2 GB freien Festplattenspeicher vorhalten.
Vorbereitungen
Zuerst holen wir uns die Programmquellen (7,4MB) und die Sicherung der OpenLogos-Datenbank (48MB) und entpacken die Programmquellen wie auf der OpenLogos-Seite beschrieben.
> wget http://logos-os.dfki.de/release/openlogos-1.0.1.tar.gz > wget http://logos-os.dfki.de/release/pg_esense.dump > tar xzvf openlogos-1.0.1.tar.gz > cd openlogos-1.0.1
Gemäß den Systemanforderungen und den Hinweisen in der Datei INSTALL
installieren wir nun die benötigten Pakete:
> sudo apt-get install g++ j2sdk1.4 unixodbc unixodbc-dev \ postgresql-8.0 odbc-postgresql postgresql-doc-8.0
Ich empfehle zusätzlich noch das Paket checkinstall
zu installieren, damit die manuelle OpenLogos-Installation in die Ubuntu-Paketverwaltung integriert werden kann.
> sudo apt-get install checkinstall
Installation
Das Kompilieren ist schmerzlos, doch dauert es seine Zeit.
> ./configure --with-java=/usr/lib/j2se/1.4/ > make > # anstelle von 'make install': > sudo checkinstall
Bei der Installation mit checkinstall kann man einfach solange mit Enter
bestätigen, bis man vom Programm mit der erfolgreichen Installation verabschiedet wird. Das erzeugte Paket openlogos-1.0.1_1.0.1-1_i386.deb
ist 29 MB groß. Installiert beansprucht OpenLogos 101 MB auf der Festplatte.
Als nächstes erzeugen wir die benötigte Datenbank ESENSE
und füllen sie mit den Daten aus der Datei pg_esense.dump
. Hierdurch wachsen die Datenbankdateien im Pfad /var/lib/postgresql/8.0/main/base auf eine Größe von insgesamt etwa 1,3 GB an.
> cd .. > sudo -u postgres createdb -E LATIN1 ESENSE > sudo -u postgres createlang -d ESENSE plpgsql > sudo -u postgres pg_restore -O -x --dbname=ESENSE pg_esense.dump
Während des langwierigen Vorgangs meldet das System möglicherweise einige Fehler. Hinweise auf bereits existierende plpgsql-Funktionen dürfen ignoriert werden. Falls jedoch Fehler beim Erzeugen eindeutiger Indexe angezeigt werden, drohen später gravierende Einbußen bei der Übersetzungsgeschwindigkeit. Üblicherweise ist in diesem Fall der Datenbankcluster mit einer lokalen Sortierreihenfolge und Zeichenklassifikation (LC_COLLATE, LC_CTYPE) "verseucht". Liefert der folgende Befehl auf dem System für beide locale-Variablen nicht C
zurück, sollte der Datenbank-Cluster neu erzeugt und die Datenbank ESENSE
erneut wie oben beschrieben angelegt werden. In einem Fall beschleunigte dies die Übersetzung um den Faktor sieben.
> echo "show LC_COLLATE; show LC_CTYPE;" | sudo -u postgres psql ESENSE lc_collate ------------ C (1 row) lc_ctype ---------- C (1 row)
Die nachfolgenden Befehle zum Löschen und zum erneuten Erzeugen des Datenbank-Clusters sollten nur durchgeführt werden, wenn Fehler bei der Indexerstellung gemeldet wurden und wenn man genau weiß, was man tut. Insbesondere wenn neben OpenLogos noch eine andere Datenbank installiert ist, sollte man besser die PostgreSQL-Dokumentation zu Hand nehmen.
# Cluster-Eigenschaften anzeigen lassen > pg_lsclusters Version Cluster Port Status Owner ... 8.0 main 5432 online postgres... # Vorsicht: Alle Datenbanken des Clusters werden gelöscht. > sudo pg_dropcluster 8.0 main # Cluster mit Standard-locales anlegen > LC_COLLATE=C LC_CTYPE=C sudo pg_createcluster 8.0 main
Schauen wir uns die Datenbank doch mal mit psql
an. Eine Befehlsübersicht bekommt man mit \?
. Die Ergebnisansicht verlässt man mit q
.
> sudo -u postgres psql ESENSE ESENSE=# \l List of databases Name | Owner | Encoding -----------+----------+---------- ESENSE | postgres | LATIN1 template0 | postgres | UNICODE template1 | postgres | UNICODE ESENSE=# \du List of users User name | User ID | Attributes | Groups -----------+---------+----------------------------+-------- postgres | 1 | superuser, create database | ESENSE=# \d List of relations Schema | Name | Type | Owner --------+--------------------------------+----------+---------- public | abc_flag | table | postgres public | abc_flag_description | table | postgres public | adj_combining_form | table | postgres [...] ESENSE=# \d abc_flag Table "public.abc_flag" Column | Type | Modifiers -----------------+--------------+----------- language_code | character(2) | not null abc_code | character(1) | not null word_class_code | character(2) | not null target_switch | character(1) | not null Indexes: "abc_flag_pkey" PRIMARY KEY, btree (language_code, word_class_code, abc_code) ESENSE=# select * from abc_flag language_code | abc_code | word_class_code | target_switch ---------------+----------+-----------------+--------------- 03 | Z | 20 | N 04 | D | 01 | N [...] ESENSE=# \q