在c#中有任何算法可以单数化 - 复数一个单词吗?

Ron*_*nie 104 c# algorithm

在c#中是否有任何算法可以单数化 - 复数一个单词(英文)或者确实存在.net库来执行此操作(也可能使用不同的语言)?

Dan*_*iel 179

您还有System.Data.Entity.Design.PluralizationServices.PluralizationService.

更新:旧答案值得更新.现在还有Humanizer:https://github.com/MehdiK/Humanizer

  • 使用ILSpy打开代码会显示一个名为EnglishPluralizationService的类,该类定义了许多特殊情况并进行有趣的阅读.我特别喜欢'pneumonoultramicroscopicsilicovolcanoconiosis',我发现自己一直在我的实体模型中使用... 8o) (57认同)
  • 我猜怎么加入了.一位测试人员对开发人员提出了一个错误,称它不适合这个词.Dev修复了它.两人都笑了. (6认同)
  • 嗯,你允许重新分配,或只是使用设计DLL?我问这是因为我知道DevExpress的许可证禁止重新分发任何.design DLL. (2认同)
  • @MrKWatkins听起来更像'supercalifragilisticexpialidocious' (2认同)

Gre*_*ill 18

我可以为世界语做这件事,没有特殊情况!

string plural(string noun) { return noun + "j"; }
Run Code Online (Sandbox Code Playgroud)

对于英语,熟悉名词的常数复数规则以及名词的不规则复数将是有用的.关于英语复数的整篇维基百科文章也可能有一些有用的信息.

  • 如果传入动词或副词,你应该把它扔掉! (5认同)

Ste*_*ins 14

大多数ORM都会对它进行刺激,尽管它们通常并不完美.我知道Castle有它的Inflector Class你可能会四处寻找."完美"这样做并不是一件容易的事(英语"规则"不是真正的规则:)),所以这取决于你是否对"合理的猜测"方法感到满意.

  • 实际上它基本上不一样,它的相同. (4认同)

Law*_*Dol 12

我在Java中作弊 - 我希望能够为"有一些东西"生成一个正确的字符串,所以我写了这篇文章.小重载实用方法:

static public String pluralize(int val, String sng) {
    return pluralize(val,sng,(sng+"s"));
    }

static public String pluralize(int val, String sng, String plu) {
    return (val+" "+(val==1 ? sng : plu)); 
    }
Run Code Online (Sandbox Code Playgroud)

像这样调用

System.out.println("There were "+pluralize(count,"something"));
System.out.println("You have broken "+pluralize(count,"knife","knives"));
Run Code Online (Sandbox Code Playgroud)

  • @Jeremy:为什么不呢?:println("你已通过"+ singularPlural(计数,"测验","小测验")+"到目前为止") (4认同)
  • @Jeremy:因此"我被骗了......"的引导 - 似乎并不能保证一个下注. (3认同)

Mat*_*nde 9

我根据Rails复数器一起鞭打了一个.你可以在这里看到我的博客文章,或者在这里看到github

output = Formatting.Pluralization(100, "sausage"); 
Run Code Online (Sandbox Code Playgroud)

  • 感谢分享.很高兴我不需要引用另一个组件. (3认同)

Jay*_*ido 9

我在.net(C#)中创建了一个小型库,称为Pluralizer(不出所料).

这意味着使用完整的句子,像String.Format那样.

它基本上是这样的:

var target = new Pluralizer();
var str = "There {is} {_} {person}.";

var single = target.Pluralize(str, 1);
Assert.AreEqual("There is 1 person.", single);

// Or use the singleton if you're feeling dirty:
var several = Pluralizer.Instance.Pluralize(str, 47);
Assert.AreEqual("There are 47 people.", several);
Run Code Online (Sandbox Code Playgroud)

它也可以做更多的事情.在我的博客上阅读更多相关信息.它也可以在NuGet中使用.

  • 是的,那个库只做单个单词,只有名词(虽然Pluralizer在内部使用该类).该库使整个句子更容易编写.有关更多示例,请查看我的博客.Pluralizer.Instance.Pluralize("{She} {is}前往{她|他们各自的} {home}.",5) (4认同)

Zai*_*sud 5

由于问题是针对C#的,因此这是Software Monkey解决方案的一个不错的变体(再次有点“作弊”,但对我而言,确实是最实用且可重用的方式):

    public static string Pluralize(this string singularForm, int howMany)
    {
        return singularForm.Pluralize(howMany, singularForm + "s");
    }

    public static string Pluralize(this string singularForm, int howMany, string pluralForm)
    {
        return howMany == 1 ? singularForm : pluralForm;
    }
Run Code Online (Sandbox Code Playgroud)

用法如下:

"Item".Pluralize(1) = "Item"
"Item".Pluralize(2) = "Items"

"Person".Pluralize(1, "People") = "Person"
"Person".Pluralize(2, "People") = "People"
Run Code Online (Sandbox Code Playgroud)