这些都是通用规则(也是好的规则),但是英语不是一种使人胆怯的语言:-)。
我自己的偏好是拥有一个转换引擎以及一组转换(令人惊讶的是)来完成实际工作。您将经历转换(从特定到通用)的转换,并且当找到匹配项时,将转换应用于单词并停止。
正则表达式由于具有表达力,因此是解决此问题的理想方法。规则集示例:
1. If the word is fish, return fish.
2. If the word is sheep, return sheep.
3. If the word is "radii", return "radius".
4. If the word ends in "ii", replace that "ii" with "us" (octopii,virii).
5. If a word ends with -ies, replace the ending with -y
6. If a word ends with -es, remove it.
7. Otherwise, just remove any trailing -s.
请注意保持此转换保持最新状态的要求。例如,假设有人添加了表名称types
。当前将由规则#6
捕获,并且您将获得奇异值typ
,这显然是错误的。
解决方案是在 #6
之前的某处插入新规则,例如:
3.5: If the word is "types", return "type".
进行非常具体的转换,或者可以将其转换为更通用的格式。
换句话说,当您发现英语在多个世纪以来产生的所有奇妙异常时,您基本上需要保持此转换表的更新。
另一种可能性是根本不浪费时间使用一般规则。
由于表的名称相对有限,因此只需创建另一个表(或某种数据结构),称为singulars
,即可将所有相关的复数表名( employees
, customers
)映射为单数对象名( employee
, customer
)。
然后,每次将表添加到架构时,请确保将条目添加到单数“表”,以便可以将其单数化。
0
我正在为ORM准备一些表名,并且我想将复数表名变成单个实体名。我唯一的问题是找到可以可靠执行的算法。这是我现在正在做的事情:
有谁知道更好的算法?