注意!!這將有助於很多知道波蘭或任何其他具有強烈的彎曲自然語言,最好與案例系統(如德國人),以回答這個問題。特別是,波蘭的變格系統非常相似,像其他斯拉夫語的系統:俄語,捷克語,塞爾維亞語等一種波蘭/斯拉夫語名詞變體的算法
看一看這個波蘭,未完成的,declinator: declinators.com 我打算將其擴展到其他語言,即俄語和拉丁語,但現在我正在與波蘭人苦苦掙扎。
除了擁有數百個名詞的大量數據庫,我支持不存在的衰落名詞。 直到現在我想出的最好的解決方案是簡單地檢查名詞的結尾,以便它們可以相應地被拒絕。
在我的代碼中,它涉及到這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
條款此方法的。
示範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";
}
}
因此,這裏的問題,還有沒有其他的,更優雅的算法來減少波蘭的話嗎?它是否必須有很多if else子句?我必須爲每種類型的名詞寫出如此多的declinators嗎?
這個問題告訴我波蘭變格規則是多麼的簡單和令人難以置信。它讓我的算法變得無聊而單調。希望你們中的一位能幫助我使它變得有趣和簡潔!
乾杯
表驅動的軟件適用於這種事情。 – user3386109
我會盡快爲俄文發佈一個=)https://github.com/georgy7/russian_nouns/blob/gh-pages/js/RussianNouns.coffee它幾乎完成單詞形式的單詞。 –