2016-05-26 3 views
5

注意!!ポーランド語または強く屈曲した他の自然言語、好ましくはケースシステム(たとえばドイツ語など)を使用してこの質問に答えることが大いに役立ちます。私は他にそれを拡張する予定です declinators.comポーランド語/スラブ語の名詞の格付けアルゴリズム

はこのポーランド、未完成、declinatorを見てくださいロシア語、チェコ語、セルビア語など:特に、ポーランドの語形変化システムのような他のスラヴ語派のシステムに非常によく似ていますつまりロシア語とラテン語ですが、今はポーランド人と闘っています。

何百もの名詞の大規模なデータベースを持つことに加えて、私は存在しない名詞を減らすことをサポートします。 私が今までに思いついた最善の解決策は、単に名詞の終わりをチェックして、それに応じて辞退することができるようにすることです。

私のコードでは、このcalculateDeclinationメソッドになります。名詞がデータベースにない場合、私はそれを呼び出します。この方法の内臓は、次のようになります。など

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); 

これらは、この方法がありelse if句の数十の最初の3だけです。

模範的なdeclinatorのコードは次のようになります。だからここ

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"; 
    } 
} 

、疑問であるポーランドの言葉を減少するための他の任意の、よりエレガントなアルゴリズムがありますか?それは他にもたくさんの節がなければなりませんか?私は名詞のそれぞれのタイプのために非常に多くの落書き者を書く必要がありますか?

この問題は、どれだけシンプルで信じられないほど多くのポーランド人の差別撤廃ルールがあるかを示しています。それは私のアルゴリズムを退屈で単調にしました。うまくいけば、あなたの一人が私がそれを面白くて簡潔にするのを助けることができます!

乾杯自分がネイティブスピーカーポーランドにもかかわらず

+1

テーブル駆動型ソフトウェアは、この種のものでうまく機能します。 – user3386109

+1

すぐにロシア語版をリリースします。=)https://github.com/georgy7/russian_nouns/blob/gh-pages/js/RussianNouns.coffee単語の単数形はほぼ完成です。 –

答えて

1

、私の答えはあなたのプログラムの中でパターンをコーディングする関係になります。他の人が指摘しているように、テーブルは行く方法です。ただし、コマンドパターンを使用して、長いブロックif/elseブロックのリファクタリングを試すことがあります。図はthis pageを参照してください。

関連する問題