一天在研究Restful API设计,命名的时候我总是很纠结,我相信大多数人也有这种觉得,不是说想不出来某个单词怎么写的问题,像我这种没事背单词背到13000词量的人也要纠结个几分钟,然后还会改来改去,虽然可以用命名字典,但是究竟不是长久之计,当然你假如乐意利用拼音就不要往下看了。
举个例子,你想写一个获取一页model的api,不管是真自己写出来的还是框架自动天生,大部分也就都是这个样子/controller/actions/argName1/argValue1/argName2/argValue2,然后actions改一改,改成information。那么问题来了,如果后面加参数指定获取的信息数目,前面不动,貌似不屈安啊,被人改一下参数,爬虫一个要求就全获取了啊!
(实在可以在后台做限定)本宝宝已经爬了几十个页面,不要疑惑我,真的有人这么干,而且数量还不少。那怎么办?写俩API,一个单数一个复数,informations or information。复数的那个获取20个如果足够的话,单数的那个获取1个,貌似办理了的样子。然而大家都很
恰巧,在YII2.X框架下还真找到了这么个东西,只要写一个单数的API然后开去复数化配置,就可以自动天生相应的复数API。感谢@Antonio Ramirez大神和@Alexander Makarov大神,虽然我不知道你俩是谁,我也不知道能不能at上,但是你们把名字写到代码里了。好言归正传,\vendor\yiisoft\yii2\helpers\BaseInflector.php类下的pluralize方法和singularize方法分别可以做到单词的复数化和单数化。代码长这样
哇~~好厉害!
!
全都是正则啊!
我以为抱到了大腿,不过看起来规则不是很多啊,本宝宝不信!
我要测一下你的精确率!
wikipedia的单复数规则转换页面上随便找了点。网络了100个旁边,然后便是用函数把单数转成复数然后比拟是不是精确,抱歉这部分我忘却截图了,大噶70%旁边精确,果不其然还是有缺陷啊,看看别人的。找到一个MIT license的在这里

虽然规则长得不一样,但是事理都差不多,先去分外规则的Map中探求对应的复数单词,如果没有再从上往下遍历正则,没有的话就+1s吧。同样我又测了一下,也没有提高多少准确率,到了75%的样子。
如果有一天我碰着了他们,问到他们是怎么算出正则的而他们回答靠履历,我一定会把代码吃了,觉得这些明显是打算出来的,之前在quora上看过Anders Kaseorg的代码,打算能被7整除的字符串的正则表达式!
切实其实逆天,长的不要不要的,既然是校友,估计也是算出来的。咳咳,请忽略MIT后面的缩写。
话说回来,他们怎么找到的规则?先试试看,没有找到牛津官方的词典,找到一份21 世纪英汉双语词典。解析后得到17万个变形和不变形的单词及其阐明。
最开始找到所有阐明中带有pl标记的单词,做单复数映射,由于有些不常见的词汇的阐明并不完全,不会加标记进行解释,只得到1000个映射对。既然不愿定原型是否有变形,那变形是一定有原型的。这里解释一下,原型和变形只按字典中的字符串打算,并不代表词根,例如,employees对应的原型是employee,employers对应的原型是employer。去掉短语和单复数同形的单词得到变形数量分布如下
由于大部分词汇的词性并不单一,因此你会创造很多词既有复数又有过去式又有过去分词,个中拥有10个变形的单词是trammel
['trameled', 'trameling', 'tramelled', 'tramelling', 'tramels', 'trammeled', 'trammeling', 'trammelled', 'trammelling', 'trammels']
-_-#你们太会玩了啊,加个l多一倍。
再对这种变革规则统计,得到
个中~表示在原形的根本上添加,-表示在原形末端探求共同的字符串然后更换,例如,-ff=>ves 2:flagstaff ,就表示flagstaff要变成flagstaves。然后你就创造,不仅单复数规则被统计了出来,连形容词比较级最高级都出来了,哈哈哈意外收成。
有一个比较故意思的地方便是,我从来都不知道原来复数还可以比原型短,比如这些医学和化学专业的词-um=>a 276
其他故意思的地方,哦不,其他比较坑爹的地方已经让我完备颠覆了以前对英语的三不雅观,有些词毫无规律可言!
前方高能~
多复数形式
组合名词的第二个词转复数形式
组合名词的第一个词转复数形式
组合名词的哪转复数都行形式
组合名词的两边都得转复数形式
再找个例子,问:foot的复数是啥?feet~~好大略的样子。见过这个嘛?
这种按意思换复数的形式真的是防不胜防。
还有按国别换复数的
Kronor和kronur都是krona的复数,然而,瑞典用前面的,冰岛用后面的,我也不知道为啥、
末了,记得少读书多看报,多背单词多睡觉。
末了的末了,私信知乎ID最爱麦丽素可以得到部分已整理好的数据进一步研究。