2016-05-26 16 views
5

Achtung !! Es hilft viel zu wissen Polnisch oder jede andere natürliche Sprache mit starker Flexion, vorzugsweise mit einem Fall-System (wie zum Beispiel Deutsch), um diese Frage zu beantworten. Insbesondere ist Polnisch Deklination System sehr ähnlich in den Systemen der anderen slawischen Sprachen wie Russisch, Tschechisch, Serbisch usw.Ein Algorithmus zur Deklination von Substantiven polnischer/slawischer Sprachen

Werfen Sie einen Blick auf diese polnischen, unfertig, declinator: declinators.com Ich plane, sie an andere zu verlängern Sprachen, nämlich Russisch und Latein, aber jetzt habe ich mit Polnisch zu kämpfen.

Neben einer großen Datenbank von Deklinationen für Hunderte von Substantiven unterstütze ich rückläufige Substantive, die nicht existieren. Die beste Lösung, die ich bis jetzt gefunden habe, ist einfach die Endungen der Substantive zu überprüfen, so dass sie entsprechend abgelehnt werden können. In meinem Code kommt es auf diese calculateDeclination Methode an. Ich rufe es an, wenn das Substantiv nicht in der Datenbank ist. Die Innereien des Verfahrens wie folgt aussehen:

if (areLast2Letters(word, "il")) 
     declinator = new KamilDeclinator(word); 
else if (areLast2Letters(word, "sk")) 
     declinator = new DyskDeclinator(word); 
else if (isLastLetter(word, 'm')) 
     declinator = new RealizmDeclinator(word); 

usw. Dies sind nur drei ersten Zehn else if Klauseln dieses Verfahren.

A-Code eines exemplarischen declinator wie folgt aussieht:

import static declining.utils.StringUtils.*; 

public class RealizmDeclinator extends realizm_XuXowiX_XemXieXieDeclinator{ 

    public RealizmDeclinator(String noun) { 
     super(noun); 
    } 

    @Override 
    protected String calculateStem() { 
     return word; 
    } 

    @Override 
    public String calculateLocative() { 
     return swap2ndFromEnd(stem, "ź") + "ie"; 
    } 

    @Override 
    public String calculateVocative() { 
     return swap2ndFromEnd(stem, "ź") + "ie"; 
    } 
} 

Also hier ist die Frage, gibt es eine andere, elegantere Algorithmus polnische Wörter für sinkende? Muss es so viele if else-Klauseln haben? Muss ich für jeden Substantivtyp so viele Deklinatoren schreiben?

Dieses Problem zeigte mir, wie einfach und unglaublich zahlreich polnische Deklinationsregeln sind. Es hat meinen Algorithmus langweilig und eintönig gemacht. Hoffentlich kann einer von euch mir helfen, es interessant und prägnant zu machen!

Prost

+1

Tabellengesteuerte Software funktioniert gut für diese Art von Sache. – user3386109

+1

Ich werde bald eine für Russisch veröffentlichen =) https://github.com/georgy7/russian_nouns/blob/gh-pages/js/RussianNouns.coffee Es ist fast fertig für die Singularform eines Wortes. –

Antwort

1

Trotz selbst gebürtiger polnische Sprecher zu sein, wird meine Antwort betrifft Muster in Ihrem Programm zu codieren. Wie andere bereits erwähnt haben, sind Tabellen der richtige Weg. Sie können jedoch versuchen, lange if/else Blöcke mit dem Befehlsmuster zu refactoring. Ein Diagramm finden Sie unter this page.

Verwandte Themen