`

从英文变形规则计算到Restful Api设计

阅读更多

原文出自【听云技术博客】:http://blog.tingyun.com/web/article/detail/936

一天在研究Restful API设计,命名的时候我总是很纠结,我相信大多数人也有这种感觉,不是说想不出来某个单词怎么写的问题,像我这种没事背单词背到13000词量的人也要纠结个几分钟,然后还会改来改去,虽然可以用命名字典,但是终究不是长久之计,当然你要是愿意使用拼音就不要往下看了。

举个例子,你想写一个获取一页model的api,不管是真自己写出来的还是框架自动生成,大部分也就都是这个样子/controller/actions/argName1/argValue1/argName2/argValue2,然后actions改一改,改成information。那么问题来了,如果后面加参数指定获取的信息数目,前面不动,貌似不安全啊,被人改一下参数,爬虫一个请求就全获取了啊!(其实可以在后台做限制)本宝宝已经爬了几十个页面,不要怀疑我,真的有人这么干,而且数量还不少。那怎么办?写俩API,一个单数一个复数,informations or information。复数的那个获取20个如果足够的话,单数的那个获取1个,貌似解决了的样子。然而大家都很懒,开玩笑?我们是程序员啊!写俩API?能用代码解决的事情就不要费人力了啊!

碰巧,在YII2.X框架下还真找到了这么个东西,只要写一个单数的API然后开去复数化配置,就可以自动生成相应的复数API。感谢@Antonio Ramirez大神和@Alexander Makarov大神,虽然我不知道你俩是谁,我也不知道能不能at上,但是你们把名字写到代码里了。好言归正传,\vendor\yiisoft\yii2\helpers\BaseInflector.php类下的pluralize方法和singularize方法分别可以做到单词的复数化和单数化。代码长这样

1.png

2.png

哇~~好厉害!!全都是正则啊!我觉得抱到了大腿,不过看起来规则不是很多啊,本宝宝不信!我要测一下你的正确率!wikipedia的单复数规则转换页面上随便找了点。收集了100个左右,然后就是用函数把单数转成复数然后对比是不是正确,抱歉这部分我忘记截图了,大噶70%左右正确,果不其然还是有缺陷啊,看看别人的。找到一个MIT license的在这里

3.png

4.png

虽然规则长得不一样,但是原理都差不多,先去特殊规则的Map中寻找对应的复数单词,如果没有再从上往下遍历正则,没有的话就+1s吧。同样我又测了一下,也没有提高多少准确率,到了75%的样子。

如果有一天我遇到了他们,问到他们是怎么算出正则的而他们回答靠经验,我一定会把代码吃了,感觉这些明显是计算出来的,之前在quora上看过Anders Kaseorg的代码,计算能被7整除的字符串的正则表达式!简直逆天,长的不要不要的,既然是校友,估计也是算出来的。咳咳,请忽略MIT后面的缩写。

5.png

话说回来,他们怎么找到的规则?先试试看,没有找到牛津官方的词典,找到一份21 世纪英汉双语词典。解析后得到17万个变形和不变形的单词及其解释。

6.png

最开始找到所有解释中带有pl标记的单词,做单复数映射,由于有些不常见的词汇的解释并不完整,不会加标记进行说明,只得到1000个映射对。既然不确定原型是否有变形,那变形是一定有原型的。这里说明一下,原型和变形只按字典中的字符串计算,并不代表词根,例如,employees对应的原型是employee,employers对应的原型是employer。去掉短语和单复数同形的单词得到变形数量分布如下

7.png

因为大部分词汇的词性并不单一,因此你会发现很多词既有复数又有过去式又有过去分词,其中拥有10个变形的单词是trammel

['trameled', 'trameling', 'tramelled', 'tramelling', 'tramels', 'trammeled', 'trammeling', 'trammelled', 'trammelling', 'trammels']

-_-#你们太会玩了啊,加个l多一倍。

再对这种变化规则统计,得到

8.png

其中~表示在原形的基础上添加,-表示在原形末尾寻找共同的字符串然后替换,例如,-ff=>ves 2:flagstaff ,就表示flagstaff要变成flagstaves。然后你就发现,不仅单复数规则被统计了出来,连形容词比较级最高级都出来了,哈哈哈意外收获。

有一个比较有意思的地方就是,我从来都不知道原来复数还可以比原型短,比如这些医学和化学专业的词-um=>a 276

QQ图片20160705120617.jpg

其他有意思的地方,哦不,其他比较坑爹的地方已经让我完全颠覆了以前对英语的三观,有些词毫无规律可言!前方高能~

  • 多复数形式

1.png

  • 组合名词的第二个词转复数形式

2.png

  • 组合名词的第一个词转复数形式

3.png

  • 组合名词的哪转复数都行形式

4.png

  • 组合名词的两边都得转复数形式

5.png

再找个例子,问:foot的复数是啥?feet~~好简单的样子。见过这个嘛?

6.png

这种按意思换复数的形式真的是防不胜防。

还有按国别换复数的

Kronor和kronur都是krona的复数,然而,瑞典用前面的,冰岛用后面的,我也不知道为啥、

最后,记得少读书多看报,多背单词多睡觉。

最后的最后,私信知乎ID最爱麦丽素可以得到部分已整理好的数据进一步研究。

分享到:
评论

相关推荐

    边缘计算中的API架构.pptx

    5. **安全性强化:** 安全问题将持续受到重视,未来的API架构将更加注重安全防护机制的设计和实施。 综上所述,边缘计算中的API架构不仅在技术层面发挥着重要作用,也在实际应用场景中展现出广阔的发展前景。随着...

    核心数据服务包括设备/传感器收集的数据数据库和 API,用于将数据库公开给其他服务以及北向集成

    核心数据服务是现代信息技术体系中的关键组成部分,尤其...在设计和实施这些服务时,我们需要关注数据存储、API设计、北向集成、安全隐私、扩展性和弹性等多个方面,确保系统能够在不断变化的环境中稳定、高效地运行。

    ASP.NET+SQLBS模式的计算机等级考试管理系统的设计与实现(论文+源代码+开题报告).zip

    7. JAVA:虽然主要技术栈是ASP.NET和SQL Server,但JAVA可能被提及是因为它是另一种广泛用于Web开发的语言,可能会在某些组件或服务中作为补充技术出现,例如使用JAVA开发的RESTful API服务。 总的来说,这个系统...

    考勤系统设计文档(终稿)1

    《考勤系统设计文档》终稿详述了一个完整的考勤管理系统的设计方案,旨在规范员工的出勤、请假、外出等工作行为,并便于薪酬计算与管理。本文档覆盖了用户需求、业务流程、系统架构等多个关键部分。 一、用户需求 1...

    基于Springboot+Vue企业员工薪酬关系系统的设计源码案例设计带文档说明.zip

    3.3 薪酬计算:根据设定的薪酬结构,如基本工资、绩效奖金、加班费等,自动生成员工的月度薪酬单,同时考虑税务规则,自动计算应扣税额。 3.4 报表展示:系统提供各类统计报表,如部门薪资总额、员工薪酬对比等,...

    出租车计费系统毕业设计论文

    2. 计费模块:根据行驶里程、等待时间、起步价等规则计算费用,考虑到不同时间段的费率调整。 3. 调度模块:通过算法优化,实现车辆与乘客的高效匹配,减少空驶率。 4. 数据存储:保存订单信息、用户信息、交易记录...

    设计思考07231

    协议内容可能涉及传输控制协议(TCP)、简单对象访问协议(SOAP)或者现代的RESTful API设计,确保数据在不同组件之间安全、高效地流动。 在实际开发过程中,设计团队需要参考土建设计图纸来获取建筑物的实际布局信息。...

    二手交易网站设计源代码.rar

    二手交易网站设计源代码是...以上就是二手交易网站设计源代码中涉及的主要知识点,从编程语言的选择到整体架构设计,再到数据库管理和用户交互,每个环节都至关重要,共同构建了一个功能完善、安全可靠的二手交易平台。

    基于SpringBoot+Vue的水位预测系统 毕设设计

    同时,API的设计需要考虑到安全性,例如采用JWT(JSON Web Token)进行身份验证,保护系统资源不被非法访问。 五、系统集成与部署 在系统集成阶段,前端Vue.js打包生成静态资源,部署在服务器上,而后端SpringBoot...

    金融风控系统(springboot+drools)、flink流计算、mongodb.zip

    在金融风控系统中,Springboot作为基础架构,用于构建微服务,提供RESTful API接口,使得系统能够灵活地与其他服务进行交互。它内置的自动配置功能,使得开发者可以快速集成各种功能模块,如数据访问、安全控制等。 ...

    Roulette-ApiRest:轮盘Api Rest .NET Core

    【标题解析】 "Roulette-ApiRest:轮盘Api Rest .NET Core" 这个标题...整体来看,这个项目是一个综合运用了多种现代开发技术和最佳实践的示例,对于学习和理解 RESTful API 设计和 .NET Core 开发具有很高的参考价值。

    端午节小游戏web.zip

    2. RESTful API:为了使前后端分离,通常会设计一套RESTful API接口,前端通过HTTP请求与后端进行数据交换,实现用户登录、排行榜数据获取等功能。 3. 框架与库:后端开发可能使用Express.js、Django或Laravel等框架...

    sls-rest-api-template

    "sls-rest-api-template" 是一个基于 TypeScript 的项目模板,专为构建 Serverless RESTful API 设计。Serverless 架构允许开发者仅关注业务逻辑,而将底层基础设施的管理和运维工作交给云服务提供商,如阿里云的 ...

    毕设项目,基于文本分析的评分者打分系统的设计与开发.zip

    5. **API接口设计**:为了与其他系统或前端交互,后端通常会提供RESTful API接口,如POST接口用于提交评分,GET接口用于获取评分结果。接口设计需遵循REST原则,如CRUD操作,确保接口的简洁和一致性。 6. **安全性...

    计算机软件-编程源码-社区信息管理系统.zip

    4. **API接口**:RESTful API设计规范使得系统与其他服务或应用的集成变得简单,实现数据共享和交换。 三、功能模块详解 1. **用户管理**:包括用户注册、登录、权限分配等功能。通过身份验证和授权机制,确保用户...

    计算机软件-编程源码-小区水电管理系统.zip

    【小区水电管理系统】是一款专为住宅小区设计的信息化管理软件,用于高效地管理和监控小区内的水电使用...它的开发涉及多种技术和工具,从设计到实施,再到后期的维护和升级,都需要全面考虑系统的稳定性和用户需求。

    嵌入式工程学 超市管理系统

    同时,如果需要远程同步或联网功能,可以采用RESTful API设计,实现与服务器的数据交互,保证数据的安全传输。 5. 开发与测试 在开发过程中,遵循敏捷开发原则,采用迭代的方式逐步完善功能。每完成一个功能模块后...

    统一扣费系统毕业设计说明书.rar

    通过《统一扣费系统毕业设计说明书》,学生可以学习到实际项目开发中的问题解决策略,掌握从需求分析到系统上线的全过程。同时,对于从事IT行业的人来说,这也是一份宝贵的参考资料,可以帮助他们理解和实施类似的扣...

    计费中心_计费系统架构设计说明.doc

    例如,使用RESTful API实现服务间的通信,通过负载均衡器实现服务的水平扩展,利用分布式数据库处理海量数据,结合缓存技术提高系统响应速度,同时采用加密技术和权限控制保障数据安全。 6. 性能优化与监控 实施...

Global site tag (gtag.js) - Google Analytics