6 Stimmen

Lateinische Beugung:

Ich habe eine Datenbank mit Wörtern (einschließlich Substantiven und Verben). Nun möchte ich alle verschiedenen (flektierten) Formen dieser Substantive und Verben generieren. Was wäre die beste Strategie, um dies zu tun?

Da Latein eine stark flektierte Sprache ist, gibt es das:

a) die Deklination der Substantive

b) die Konjugation der Verben

Auf dieser übersetzten Seite finden Sie ein Beispiel für die Konjugation eines Verbs ("mandare"): Konjugation

Ich möchte nicht all diese Formulare für all die Wörter manuell eingeben.

Wie kann ich sie automatisch erstellen? Was ist der beste Ansatz?

  • eine Liste komplexer Regeln für die Beugung aller Wörter
  • Bayes'sche Methoden
  • ...

Es gibt ein Programm namens "William Whitaker's Words". Es erzeugt auch Beugungen für lateinische Wörter, also genau das, was ich machen will.

Wikipedia sagt, dass das Programm folgendermaßen funktioniert:

Words verwendet eine Reihe von Regeln, die auf natürlicher Prä-, Inund Suffigierung, Deklination und Konjugation basieren, um die Möglichkeit eines Eintrags zu bestimmen. Aufgrund dieses Ansatzes der Analyse der Wortstruktur gibt es keine Garantie, dass diese Wörter jemals in der lateinischen Literatur oder Sprache verwendet wurden, selbst wenn das Programm eine mögliche Bedeutung für ein bestimmtes Wort findet.

Der Quelltext des Programms ist ebenfalls verfügbar aquí . Aber ich verstehe nicht wirklich, wie das funktionieren soll. Können Sie mir helfen? Vielleicht wäre das die Lösung für meine Frage ...

5voto

Charles Brunet Punkte 19957

Sie könnten etwas Ähnliches wie das Hunspell-Wörterbuchformat machen (siehe http://www.manpagez.com/man/4/hunspell/ )

Sie definieren 2 Tabellen. Die eine enthält die Wortwurzeln (der Teil, der sich nie ändert), die andere die Änderungen für eine bestimmte Klasse. Für eine bestimmte Klasse wird für jede Deklination (oder Konjugation) angegeben, welche Zeichen am Ende (oder am Anfang) des Wortstamms hinzugefügt werden sollen. Es kann sogar angegeben werden, dass eine bestimmte Anzahl von Zeichen ersetzt werden soll. Um nun ein Wort in einer bestimmten Deklination zu erhalten, nimmt man die Wurzel, wendet die Transformation aus der Klasse an, zu der sie gehört, und voilà!

Für mandare wäre die Wurzel zum Beispiel mand , und die Klasse würde Suffixe enthalten wie o , als , , amous , atis ... für den aktiven Indikativ Präsens.

2voto

Aleadam Punkte 39803

Ich werde als Beispiel die Substantive verwenden, aber es gilt auch für Verben.

Zunächst würde ich zwei Klassen erstellen: Regular y Irregular . Für die Regular Substantive würde ich drei Klassen für die drei Deklinationen erstellen und sie alle eine Declensable (oder wie auch immer das Wort im Englischen lautet:) Schnittstelle implementieren lassen ( FirstDeclension extends Regular implements Declensable ). Die Schnittstelle würde zwei static enum s ( NOMINATIVE , VOCATIVE usw., und SINGULAR , PLURAL ). Alle würden eine Zeichenkette für den Root und eine statische Hashmap von Suffixen haben. Die Methode FirstDeclension#get (case, number) würde dann das richtige Suffix auf der Grundlage des Hashmaps anhängen.

En Irregular Klasse sollte für jedes Wort eine lokale Hashmap definieren und dann die gleiche Declensable-Schnittstelle implementieren müssen.

Ergibt das einen Sinn?

Nachtrag : Zur Klarstellung: Der Konstruktor von class Regular wäre

public Regular (String stem) {
    this.stem = stem
}

0voto

Vielleicht könnten Sie sich bei Ihrer Implementierung an AOT orientieren. (Es steht unter der LGPL.)

Es gibt keine lateinische Morphologie in AOT, sondern nur Russisch, Deutsch, Englisch, wobei Russisch natürlich ein Beispiel für eine ebenso komplexe Flexionsmorphologie wie Latein ist, so dass AOT als Rahmen für die Implementierung bereit sein sollte.

Dennoch glaube ich, dass man ein ausgeklügeltes, präzises formales System für die Morphologie bereits klar definiert haben muss, bevor man zur Programmierung übergeht. Was das Russische betrifft, so basieren die meisten funktionierenden morphologischen Computersysteme auf der seriösen Analyse der russischen Morphologie von Andrey Zalizniak und dem Grammatical Dictionary of Russian und verwandten Werken.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X