2009-03-25 17 views
8

Ich bin auf der Suche nach einer Bibliothek, die eine morphologische Analyse deutscher Wörter durchführen kann, d. H. Sie konvertiert jedes Wort in seine Wurzelform und liefert Metainformationen über das analysierte Wort.Gibt es eine kostenlose Bibliothek zur morphologischen Analyse der deutschen Sprache?

Zum Beispiel:

gegessen -> essen 
wurde [...] gefasst -> fassen 
Häuser -> Haus 
Hunde -> Hund 

Meine Wunschliste:

  • Es hat mit beiden Substantiven und Verben zu arbeiten.
  • Ich bin mir bewusst, dass dies eine sehr schwierige Aufgabe ist angesichts der Komplexität der deutschen Sprache, daher suche ich auch nach Bibliotheken, die nur Näherungen liefern oder nur zu 80% genau sind.
  • Ich würde Bibliotheken bevorzugen, die nicht mit Wörterbüchern arbeiten, aber wieder bin ich offen für Kompromisse angesichts der Umstände.
  • Ich würde auch C/C++/Delphi Windows-Bibliotheken bevorzugen, weil das würde sie einfacher zu integrieren, aber .NET, Java, ... wird auch tun.
  • Es muss eine freie Bibliothek sein. (L) GPL, MPL, ...

EDIT: Ich bin mir bewusst, dass es keine Möglichkeit gibt, eine morphologische Analyse ohne Wörterbuch überhaupt durchzuführen, wegen der unregelmäßigen Worte. Wenn ich sage, ziehe ich eine Bibliothek ohne Wörterbuch ich die Blas- Wörterbücher bedeuten, die jedes einzelne Wort Karte:

arbeite -> arbeiten 
arbeitest -> arbeiten 
arbeitet -> arbeiten 
arbeitete -> arbeiten 
arbeitetest -> arbeiten 
arbeiteten -> arbeiten 
arbeitetet -> arbeiten 
gearbeitet -> arbeiten 
arbeite -> arbeiten 
... 

Diese Wörterbücher mehrere Nachteile, einschließlich der enormen Größe und die Unfähigkeit, unbekannte Wörter zu verarbeiten.

Natürlich sind alle Ausnahmen können nur mit einem Wörterbuch behandelt werden:

esse -> essen 
isst -> essen 
eßt -> essen 
aß -> essen 
aßt -> essen 
aßen -> essen 
... 

(Mein Verstand jetzt :) dreht)

Antwort

7

Ich denke, Sie suchen nach einem "Stemming-Algorithmus".

Martin Porter Ansatz ist unter Linguisten gut bekannt. Der Porter-Stemmer ist im Grunde ein Affix-Stripping-Algorithmus, kombiniert mit ein paar Substitutionsregeln für diese speziellen Fälle.

Die meisten Stemmer liefern Stämme, die sprachlich "inkorrekt" sind. Zum Beispiel: sowohl "schön" als auch "schön" können den Stamm "beauti" ergeben, was natürlich kein wirkliches Wort ist.Dies ist jedoch nicht von Bedeutung, wenn Sie diese Stiele verwenden, um Suchergebnisse in Informationssuchsystemen zu verbessern. Lucene kommt mit Unterstützung für den Porter Stemmer, zum Beispiel.

Porter entwickelte auch eine einfache Programmiersprache für die Entwicklung von Stemmern, genannt Snowball.

Es gibt auch Stemmer für Deutsch in Snowball. Eine C-Version, die von der Snowball-Quelle erzeugt wird, ist ebenfalls auf der Website verfügbar, zusammen mit einer Klartext-Erklärung des Algorithmus.

Hier ist der deutsche stemmer in Snowball: http://snowball.tartarus.org/algorithms/german/stemmer.html

Wenn Sie sich für den entsprechenden Stamm eines Wortes suchen, wie Sie es in einem Wörterbuch finden würde, zusammen mit Informationen über den Teil der Rede, sollten Sie Google für "Lemmatisierung".

2

Ich glaube nicht, dass dies ohne Wörterbuch getan werden kann, .

regelbasierte Ansätze stolpern immer über Dinge wie

gegessen -> Essen
gegangen -> angen

(beachten Sie, um Menschen, die nicht Deutsch sprechen: die richtige Lösung im zweiten Fall ist "gehen").

+0

Sie sind teilweise richtig, ich meine Frage aktualisiert. –

1

Werfen Sie einen Blick auf Leo. Sie bieten die Daten, nach denen Sie suchen, vielleicht gibt es Ihnen einige Ideen.

3

Sie haben dies vor einer Weile gefragt, aber Sie könnten es immer noch versuchen mit morphisto.

Hier ist ein Beispiel dafür, wie es in Ubuntu zu tun:

  1. die Werkzeuge Finite-State-Wandler Stuttgart installieren

    $ sudo apt-get install sfst

  2. die Morphisto Morphologie herunterladen , z.B morphisto-02022011.a

  3. Komprimieren Sie es, z.B.

    $ fst-compact Morphisto-02022011.a morphisto-02022011.ac

  4. es verwenden! Hier einige Beispiele:

    $ echo Hochzeit | FST-proc morphisto-02022011.ac ^ Hochzeit/hohZeit < + NN>/hohZeit < + NN>/hohZeit < + NN>/hohZeit < + NN>/HOCHZEIT < + NN>/HOCHZEIT < + NN>/HOCHZEIT < + NN>/HOCHZEIT < + NN>/Hochzeit < + NN>/Hochzeit < + NN>/Hochzeit < + NN>/Hochzeit < + NN> $

    $ echo gearbeitet | fst-proc morphisto-02022011.ac ^ gearbeitet/arbeiten < + ADJ>/arbeiten < + ADJ>/arbeiten < + V> $

5

(Disclaimer: Ich bin Verknüpfung meiner eigenen Open-Source-Projekte hier)

Diese Daten werden in Form einer Wortliste ist bei http://www.danielnaber.de/morphologie/ zur Verfügung. Es könnte mit einer Word-Splitter-Bibliothek (wie jwordsplitter) kombiniert werden, um zusammengesetzte Substantive abzudecken, die nicht in der Liste enthalten sind.

Oder verwenden Sie einfach LanguageTool from Java, die die Wortliste in Form eines kompakten endlichen Automaten eingebettet hat (plus es enthält auch Compound Splitting).

+2

Vielen Dank für Ihre Antwort! Bitte lesen Sie die [FAQ zu Eigenwerbung] (http://stackoverflow.com/faq#promotion) sorgfältig durch. Beachten Sie außerdem, dass es erforderlich ist *, dass Sie jedes Mal einen Haftungsausschluss veröffentlichen, wenn Sie auf Ihre eigene Website/Ihr Produkt verlinken. –

3

Werfen Sie einen Blick auf LemmaGen (http://lemmatise.ijs.si/), ein Projekt, das darauf abzielt, eine standardisierte Open Source mehrsprachige Plattform für die Lemmatisierung bereitzustellen. Es macht genau das, was du willst.

1

Es gibt einige Tools, die Sie verwenden könnten wie die Morph. Komponente in den Matetools, Morphisto usw. Aber der Schmerz ist, sie in Ihre Werkzeugkette zu integrieren. Ein sehr guter Überblick über viele dieser linguistischen Werkzeuge ist DKpro (https://dkpro.github.io/dkpro-core/), ein Framework, das UIMA verwendet. Es ermöglicht Ihnen, Ihre eigene Preprocessing-Pipeline mit verschiedenen linguistischen Tools aus verschiedenen Ressourcen zu schreiben, die alle automatisch auf Ihren Computer heruntergeladen werden und miteinander kommunizieren. Sie können Java oder Groovy oder sogar Jython verwenden. DKPro bietet Ihnen einfachen Zugriff auf zwei morphologische Analysatoren, MateMorphTagger und SfstAnnotator.

Sie möchten nicht einen Stemmer wie Porter verwenden, es reduziert die Wortform in einer Weise, die keinen sprachlichen Sinn ergibt und nicht das von Ihnen beschriebene Verhalten hat. Wenn du nur die Grundform finden willst, für ein Verb den Infinitiv und für ein Substantiv den Nominativ Singular, dann solltest du einen Lemmatizer verwenden. Sie können eine Liste der deutschen Lemmatizer here finden. Treetagger ist weit verbreitet. Sie können auch eine komplexere Analyse verwenden, die von einem morphologischen Analysator wie SMORS bereitgestellt wird. Es wird Ihnen so etwas wie dies (zB aus der SMORS Website):

Und hier ist die Analyse von "unübersetzbarstes" zeigt Präfigierung, suffixation und> Abstufung: un < PREF> translate < V> bar < SUFF > < + ADJ> < Sup> < Neut> < Nom> < Sg> < St>