Skip to main content
3 of 3
added 2438 characters in body
Hubert Schölnast
  • 126.5k
  • 19
  • 216
  • 419

Ich beantworte meine eigene Frage, weil ich ja selbst auch nach einer Antwort suche, und einen aktuellen Stand meiner Nachforschungen bekanntgeben will, damit andere, die versuchen die Frage zu beantworten, sich auch daran orientieren können.

Zweiter Grund: Sobald das Problem gelöst ist, möchte ich hier meine Lösung präsentieren, damit andere, die vielleicht etwas ähnliches machen wollen, sich hier Anregungen holen können.


Ich halte derzeit zwei Ansätze für vielversprechend:

  1. The Durm German Lemmatizer

Das ist ein fix und fertiger Lemmatisierer, den ich aber nicht so wie er ist verwenden würde, sondern ich würde ganz einfach sein frei verwendbares Lexikon (mit 84320 Einträgen, 8,6 MB groß) in eine Datenbanktabelle stopfen und mit einem selbstgeschriebenen Programm abfragen.

Dieses Lexikon enthält zwar z.B. »Singlefrauen« aber weder »aufgeräumtere« noch »aufgeräumter«, nicht einmal »aufräumen« sondern nur das Nomen »Aufräumen«.

  1. ParZu - The Zurich Dependency Parser for German

Das ist zwar weder ein Stemmer noch ein Lemmatisierer, sondern ein Parser, und damit eigentlich übers Ziel hinaus geschossen, aber wie man auf der Demo-Seite gut nachvollziehen kann, spuckt dieses Programm auch Grundformen aus.

Sehr vorteilhaft erscheint mir hier die Eigenschaft, dass das Programm z.B. in dem Satz

Er sagt, sein Bruder würde bald hier sein.

erkennt, dass die beiden Instanzen von »sein« verschiedene Wörter mit verschiedenen Grundformen sind.

Das Programm liefert auch Grundformen für Singlefrauen und aufgeräumtere.

Außerdem eröffnet die Ausgabe der grammatischen Funktionen Möglichkeiten, die mir vielleicht helfen können, die zugrundeliegende Aufgabe (Erkennen von Aussagen mit gleicher Bedeutung) besser zu bewältigen.

Dieser Parser kann unter der GNU General Public License frei verwendet werden und läuft unter Linux. Zur Zeit ist dieser Parser die von mir favorisierte Lösung.


Nachtrag:

Wie oben schon angedeutet, habe ich mich für den Zurich Dependency Parser entschieden (Link: siehe oben)

Da es sich hier um einen Parser handelt, werden ganze Sätze analysiert. Das hat den Vorteil, dass grammatische Beziehungen zwischen den Wörtern erkannt werden, was eben unter anderem dazu führt, dass zu jedem Wort die tatsächliche Grundform gefunden wird.

Vorteil Nr. 2: Der Parser liefert auch alle notwendigen Daten, um abgetrennte Präfixe trennbarer Verben sehr einfach den Kernen der Verben zuzuordnen. Damit können die korrekten Grundformen von trennbaren Verben gefunden werden.

Vorteil Nr. 3: Der Parser erkennt auch Mehrwortlexeme (»San Francisco«, »Vincent Van Gogh«) und liefert Daten, mit deren Hilfe die Bestandteile dieser Mehrwortlexeme zuverlässig zu einem Begriff zusammengefügt werden können.

Insgesamt liefert dieser Parser also eine Lemmatisierung von äußerst hoher Qualität.

Der Parser hat aber auch einen Nachteil:

Jedesmal wenn er aufgerufen wird, um einen Text zu analysieren, braucht er mehrere Sekunden, um irgendwelche internen Vorarbeiten durchzuführen. Erst dann wird der Text tatsächlich analysiert.

Wenn man also knapp 6000 relativ kurze Texte analysiert haben will, würde das mehrere Tage dauern, wenn man jeden Text einzeln an den Parser übergibt. Daher muss man die Texte zuerst zu einem langen Text zusammenfügen und als eine große Textdatei dem Parser zuführen. In meinem Fall war das Parsen dann in weniger als 10 Minuten erledigt.


Nachtrag 2

Weitere Ressourcen, die bei der Bewältigung der in der Frage beschriebenen Aufgabe helfen, kann man hier herunterladen: https://www.openthesaurus.de/about/download

Dort gibt es z.B. ein sehr hochwertiges Synonymlexikon (einen Thesaurus), das sogar als MySQL-Dump verfügbar ist. Man muss es nur herunterladen und kann daraus sofort eine MySQL-Datenbank erzeugen. Allerdings ist die Beschreibung der Tabellen und Spalten dürftig bis mangelhaft. Wenn man sich die Tabellen genauer ansieht, kann man aber gut erkennen, wie sie zusammenhängen und wie man sie verwenden kann.

Den Thesaurus gibt es auch als reine Textdatei, ich habe mir diese Datei aber nicht angesehen und kann dazu nichts sagen.

Auf der verlinkten Seite gibt es auch einen Link zu einer Programmierschnittstelle (API). Man kann sie nutzen, um zu einzelnen Wörtern Synonyme zu finden. Wer aber, so wie ich, Massenabfragen an den Server stellen würde, ist besser beraten, sich gleich den ganzen Bestand herunterzuladen.

Alle beschriebenen Versionen des Thesaurus sind unter der GNU Lesser General Public License frei verfügbar.

Morphologie-Lexikon

Auf derselben Seite gibt es auch einen Link, wo man sich ein Vollformen-Wörterbuch herunterladen kann. (Also etwas, was genau meine Frage beantworten würde). Dieses Wörterbuch enthält angeblich zu jedem deutschen Wort alle nur denkbaren grammatischen Formen.

Dieses Morphologie-Lexikon hat aber einen Haken: Es liegt als binär codierte Datei vor. Um es nutzen zu können, muss man ein Programm namens LanguageTool herunterladen und installieren. Dieses Programm kann angeblich die binäre Datei in eine strukturierte Textdatei umwandeln. Aber dieses Programm ist in Java geschrieben. Damit man es zum Laufen bekommt, müsste man also zusätzlich auch noch eine Java-Runtime herunterladen und installieren.

Weil jede Software eine potentielle Sicherheitslücke ist, habe ich weder Java noch LanguageTool auf meinem Server installiert (ich brauche beide Programme eigentlich überhaupt nicht), und kann daher nicht sagen, ob man wirklich wie versprochen am Ende ein verwendbares Morphologie-Lexikon rausbekommt.

Dieses Lexikon ist ebenfalls frei verfügbar, allerdings unter einer anderen Lizenz (CC BY-SA 4.0).

Hubert Schölnast
  • 126.5k
  • 19
  • 216
  • 419