gpt4 book ai didi

algorithm - 怎么把复数变成单数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:18:07 27 4
gpt4 key购买 nike

我正在为 ORM 准备一些表名,我想将多个表名转换为单个实体名。我唯一的问题是找到一种可靠的算法。这是我现在正在做的事情:

  1. 如果单词以 -ies 结尾,我将结尾替换为 -y
  2. 如果单词以 -es 结尾,我会删除这个结尾。然而,这并不总是有效 - 例如,它将 Types 替换为 Typ
  3. 否则,我只删除尾随的 -s

有人知道更好的算法吗?

最佳答案

这些都是一般规则(和好的规则),但英语不是胆小者的语言 :-)。

我自己的偏好是拥有一个转换引擎以及一组转换(足够令人惊讶)来完成实际工作。您将完成转换(从特定到一般),找到匹配项后,将转换应用于单词并停止。

由于其表现力,正则表达式将是解决此问题的理想方法。示例规则集:

 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".

用于非常具体的转换,或者如果可以使其更通用,则可能在以后的某个地方。

换句话说,当您发现英语几个世纪以来产生的所有那些奇妙的异常(exception)时,您基本上需要更新此转换表。


另一种可能性是根本不要在一般规则上浪费时间。

由于该需求的用例目前只是将表名单数化,而该组表名会相对较小(至少与复数英文单词组相比),只需创建另一个 表(或某种数据结构)称为 singulars,它将所有当前的复数表名称(employeescustomers)映射到单数对象姓名(员工客户)。

然后,每次将表添加到您的模式时,请确保将条目添加到单数“表”中,以便将其单数化。

关于algorithm - 怎么把复数变成单数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/796412/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com