是否有任何函数(VB.NET或C#)可以将英文单词转换为单数形式或复数形式?
我正在考虑拥有一个包含英语单词以及复数形式的数据库,但我也认为它很愚蠢,因为那将是巨大的,而且英语中有关于如何将单词翻译成其语言的规则复数形式,那么为什么不创建一个进行转换的函数呢?
答案 0 :(得分:33)
在System.Data.Entity.Design
dll中有一个名为PluralizationServices
的命名空间。
System.Data.Entity.Design.PluralizationServices.PluralizationService.CreateService(CultureInfo.GetCultureInfo("en-us"))
会为您提供一个公开自解释Pluralize
,Singularize
,IsPlural
和IsSingular
方法的对象。
EF使用它来复数化和单一化表名。
答案 1 :(得分:8)
您可以使用Humanizer微型库。它能够做到这一点以及更多。
免责声明:我是图书馆的创建者。
答案 2 :(得分:1)
我只想写一个复数函数,你可以填写创建复数单词的通用和特定规则。 在here.
之前已经提到过这个问题答案 3 :(得分:1)
我回答a very similar question,但不够接近成为一个骗子,所以我会在这里解释。
我自己的偏好是拥有一个转换引擎以及一组转换(令人惊讶的足够)来完成实际工作。
您将完成转换(从特定转换为常规转换),并且在找到匹配项时,将转换应用于单词。
正则表达式因其表现力而成为理想的方法。用于将复数转换为单数的示例规则集可以是:
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中发现“类型”转换为“典型”的问题时,我们在4处创建了一个更高优先级的转换为了迎合这一点。
你基本上需要保持这个转换表的更新,因为你发现了英语产生的所有那些奇妙的例外(并且有很多例外)。
类似的方案可以放在另一个方向,单数到复数。
这个问题的主要问题是你必须抓住所有那些以英语闻名的边缘案例,但不能说服整个星球说世界语,这可能是你最好的镜头: - )