注意!!这将有助于很多知道波兰或任何其他具有强烈的弯曲自然语言,最好与案例系统(如德国人),以回答这个问题。特别是,波兰的变格系统非常相似,像其他斯拉夫语的系统:俄语,捷克语,塞尔维亚语等一种波兰/斯拉夫语名词变体的算法
看一看这个波兰,未完成的,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它几乎完成单词形式的单词。 –