导入
深入探究
学习英语名词复数规则并设计 Python 复数转换库
作为一个图书管理员和英语专业出身的父亲的儿子长大,我一直对语言充满好奇。这里说的不是编程语言——虽然编程语言也包括在内,但更主要的是自然语言。以英语为例:英语是一种分裂的、从德语、法语、西班牙语和拉丁语等语言中“掠夺”词汇的语言(仅举几例)。实际上,“掠夺”这个词比“借用”更贴切;或者用“同化”来形容,就像博格人一样。没错,我喜欢这个比喻。
我们就是博格人。你们的语言和词源特征将被纳入我们的体系。抵抗是徒劳的。
在本章中,你将学习复数名词的处理方法。此外,还将涉及返回函数的函数、高级正则表达式以及生成器。但在开始之前,先来谈谈如何将名词变为复数形式。(如果你还没读过关于正则表达式的章节,现在正是时候。本章假设你已掌握正则表达式的基础知识,并会迅速深入到更复杂的用法。)
如果你在英语国家长大,或是在正规学校里学习过英语,那么你很可能熟悉以下基本规则:
- 如果一个单词以 S、X 或 Z 结尾,就在后面加 ES。例如:bass → basses,fax → faxes,waltz → waltzes。
- 如果一个单词以“响亮的 H”结尾,就加 ES;如果以“无声的 H”结尾,就只加 S。“响亮的 H”指的是与其它字母组合后能发出可听声音的 H。比如 coach → coaches,rash → rashes,因为你能听到 CH 和 SH 的发音。但 cheetah → cheetahs,因为这里的 H 是不发音的。
- 如果一个单词以 Y 结尾且发音像 I,就把 Y 改为 IES;如果 Y 与元音结合发出其他音,则直接加 S。例如:vacancy → vacancies,day → days。
- 如果以上都不适用,就直接加 S,碰运气吧。
(我知道,例外太多了。man 变成 men,woman 变成 women,但 human 变成 humans。mouse 变成 mice,louse 变成 lice,但 house 变成 houses。knife 变成 knives,wife 变成 wives,但 lowlife 变成 lowlifes。至于那些本身既是单数又是复数的词,比如 sheep、deer 和 haiku,那就更别提了。)
当然,其他语言完全不同。
接下来,我们将设计一个 Python 库,能够自动将英语名词转为复数形式。我们先从这四条规则开始,但请记住,未来你不可避免地需要添加更多规则。