当前位置:首页|资讯

#2 动词类

作者:楠风研究部发布时间:2024-10-03

动词类Verb的实现相对较为复杂。

首先,我们定义了nameverbType这两个成员变量,分别用于保存动词名称和动词类型。

随后,我们定义了一个构造方法。它接收动词名称verbName作为入参,将其保存至成员变量name中,并使用字典工具类DictionaryUtils中的getVerbType方法获取动词类型。其中字典工具类的具体实现将在后面介绍。

现在,准备工作已经就绪,我们就可以开始编写具体的变形方法了。

我们注意到,日语动词的各类变形虽然各不相同,但基本都遵循以下规则:

  • 一类动词:把最后一个假名变成其他的段再添加后缀

  • 二类动词:把る去掉再加后缀

  • 三类动词-する:把する去掉后加后缀

  • 三类动词-来る:把来る去掉再加后缀

这个逻辑可以抽出来写成一个通用变形函数verbUtil,这样就不用在每种变形中都写一遍了。那么,如果某种变形有特殊情况,或者和通用变形逻辑不兼容,应该怎么办呢?这其实很容易解决,只需要先执行此变形的特殊逻辑,未命中时再执行通用逻辑即可。

这个函数接收6个参数:

  • specificDan:一类动词最后的假名需要变为哪一段

  • godanSuffix:一类动词的后缀

  • ichidanSuffix:二类动词的后缀

  • suruSuffix:三类动词する的后缀

  • kuruSuffix:三类动词来る的后缀

  • kuruNewKana:来る写作假名くる时,く对应的新假名

于是,便可以根据不同的动词类型和入参,对不同类型的动词执行通用变形逻辑。

此外,这段代码中使用了五十音图工具类GojuuonzuUtils中的toSpecificDan方法来实现一类动词中假名变为其他段的功能,以及VerbTypeConstants常量类中的动词类型,其具体实现将在后面介绍。此外,这里还兼容了某些古语残留的类型,这不是本文介绍的重点,因此从略。 

下面,我们便可以利用这个通用逻辑来实现て形方法teForm了。

  • 首先,我们需要考虑行く問う这两种特殊情况。

    行く:去掉最后的く并变为って

    問う:直接加て

  • 其次,一类动词的て形变形逻辑与之前提到的通用变形逻辑冲突,因此需要实现特殊逻辑。如果动词为一类动词,那么就会直接执行特殊逻辑并返回,不会再执行通用逻辑。

    以「る、つ、う」结尾:去掉最后一个假名并添加って

    以「ふ、ぬ、む」结尾:去掉最后一个假名并添加んで

    以「す」结尾:去掉最后一个假名并添加して

    以「く」结尾:去掉最后一个假名并添加いて

    以「ぐ」结尾:去掉最后一个假名并添加いで

  • 最后,如果动词未命中前两种情况,则会执行通用逻辑verbUtil。

    二类动词:去掉最后一个假名并添加て

    三类动词-する:去掉する并添加して

    三类动词-来る:去掉来る并添加来て(若写作くる,则去掉くる并添加き和て)

对于ない形方法naiForm,其实现也比较类似。

  • 首先,我们需要考虑ある这种特殊情况。

    ある:去掉ある并添加ない

  • 其次,执行通用逻辑verbUtil。

    一类动词:将最后一个假名变为あ段,并添加ない

    二类动词:去掉最后一个假名并添加ない

    三类动词-する:去掉する并添加しない

    三类动词-来る:去掉来る并添加来ない(若写作くる,则去掉くる并添加こ和ない)


其余的变形也是类似的逻辑,这里不再赘述。在实现时需要特别注意的是,日语书上往往会遗漏某些特殊的情况,例如:

  • (て形)行く→行って

  • (て形)問う→問うて

  • (ない形)ある→ない

  • (ます形)くださる→くださいます

  • (命令形)くださる→ください

  • (命令形)くれる→くれ

完整的实现代码如下所示。



Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1