【发布时间】:2016-05-26 21:27:09
【问题描述】:
注意!! 了解 波兰语 或任何其他具有强烈屈曲性的自然语言,最好是带有大小写系统(例如德语),这将有很大帮助回答这个问题。特别是,波兰语的变格系统与其他斯拉夫语言的系统非常相似,例如:俄语、捷克语、塞尔维亚语等。
看看这个波兰语,未完成的偏角器: declinator.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 子句中的前三个。
示例性偏角器的代码如下所示:
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 子句吗?我必须为每种类型的名词写这么多偏角吗?
这个问题向我展示了波兰语的变格规则是多么简单且数量惊人。这让我的算法变得乏味和单调。希望你们中的一个可以帮助我使它变得有趣和简洁!
干杯
【问题讨论】:
-
表格驱动软件非常适合这种事情。
标签: java algorithm linguistics