版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/potato012345/article/details/78091939
英语单词还原,即是指将一个给定的英文单词还原为其原型。如名词复数形式变为原型,动词过去式、现在进行时变为原型,形容词变为其名词或动词本体等。
要完成这一目标,显然需要对英语单词的变形规则进行总结并编程实现。一般地,需要恢复单词原型的情况包括:名词复数、动词过去式、动词完成时、动词第三人称、动词现在进行时、形容词和副词等。这里我们只对较为简单的名词和动词的变形进行还原,不涉及形容词和副词的还原。
我们知道,英语名词在单数变复数、动词在一般现在时变过去式和完成时中存在规则变化和不规则变化两种情况。针对规则变化,只需总结其变形规律,逆向查找即可;针对不规则变化,则需要建立专用字典,以备查询。
下面是总结出的(部分)词汇变形规则:变化后词形 –> 原形。
名词单数到复数的一般变形规则:
规则1. *ves --> *f/*fe
规则2. *ies --> *y
规则3. *es --> *
规则4. *s --> *
动词的一般变形规则:
//第三人称单数
规则5. *ies --> *y
规则6. *es --> *
规则7. *s --> *
//现在进行时
规则8. *??ing --> *? //原规则是:以辅音,元音,辅音字母结尾的词双写最后一个字母加ing
规则9. *ying --> *ie
规则10. *ing --> */*e
//过去时、过去分词
规则11. *??ed --> *?
规则12. *ied --> *y
规则13. *ed --> */*e
不规则动词与不规则名词:
针对不规则变化,可以直接建立一个由变化后格式到原形的索引。根据网络上已有的总结材料建立这些索引。
不规则动词表
不规则名词表
编程实现
算法的主要思路如下:
1. 输入一个单词
2. 如果词典里有该词,输出该词及其属性,转4,否则,转3
3. 如果有该词的还原规则,并且,词典里有还原后的词,则输出还原后的词及其属性,转4。否则,报错
4. 如果输入中还有单词,转(1),否则,结束。
所以为了完成词形还原,还需要一个英语单词的词典(在代码部分提供)。
编程的主要任务是从外部读入词典及不规则变化索引、实现上边的变化规则、查询规则并输出。
为避免重复查询,浪费时间,编程时按照“先特殊后一般”的思路:首先依次查询全集词典、两个不规则变化词典,然后按照上边总结的规则进行还原和查询。在遍历规则时,按照编号依次遍历,就能够确保不会出现类似于 leaves 被错误还原为 leave的情况。
详细的编程代码可以参考笔者Github项目。