英语语言的复数/单数变换函数
本文关键字:单数 变换 函数 语言 英语 | 更新日期: 2023-09-27 18:11:44
是否有任何函数(VB。NET或c#),可以将英语单词转换为单数或复数形式?
我想建立一个包含所有英语单词及其复数形式的数据库,但我也认为这是愚蠢的,因为这将是巨大的,而且英语中有关于如何将一个单词翻译成复数形式的规则,所以为什么不创建一个函数来进行转换呢?
在System.Data.Entity.Design
dll中有一个名为PluralizationServices
的命名空间。
System.Data.Entity.Design.PluralizationServices.PluralizationService.CreateService(CultureInfo.GetCultureInfo("en-us"))
将给您一个对象,它暴露了自解释的Pluralize
, Singularize
, IsPlural
和IsSingular
方法。
EF用它来表示表名的复数和单数。
可以使用Humanizer微库。它有这个能力,还有更多。
声明:我是这个库的创建者。
我会写一个复数函数,您可以用创建复数单词的通用和特定规则填充该函数。
我回答了一个非常相似的问题,但没有接近到可以被欺骗的程度,所以我在这里复述一下。
我自己的偏好是有一个转换引擎和一组转换(足够令人惊讶)来完成实际工作。
您将遍历转换(从特定到一般),当找到匹配时,将转换应用于单词。
由于正则表达式的表达性,正则表达式将是一种理想的方法。将复数转换为单数的规则集示例如下:
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 is "types", return "type".
5. If the word ends in "ii", replace that "ii" with "us" (octopii,virii).
: : : : :
97. If a word ends with -ies, I replace the ending with -y
98. If a word ends with -es, I remove this ending.
99. Otherwise, I just remove the trailing -s.
请记住,这个是一个例子,所以如果它们不是完全完美的英语,请不要为难我。在任何情况下,这只意味着你应该添加更多的规则,这就是答案的全部本质。
注意,规则的早期版本可能没有条目号4。然而,当我们发现在规则98中将"types"转换为"type"的问题时,我们随后在规则4中创建了一个更高优先级的转换来解决这个问题。
你基本上需要保持这个转换表的更新,因为你发现所有这些奇妙的例外(有很多),英语已经产生。
在另一个方向上也可以组合一个类似的方案,从单数到复数。
这样做的主要问题是,你必须抓住所有那些英语闻名的边缘情况,但是,如果不能说服全世界都说世界语,那可能是你最好的机会:-)