图书馆确定名词的不定冠词?

是否有任何.NET库用于确定名词的Indefinite Article ?

我的粗略尝试是在下面,这可能适用于我的99%的使用(这是可以接受的)只是想知道是否有任何已建立的替代品?

public static string GetIndefinateArticle(string noun) { if(string.IsNullOrEmpty(noun)) return noun; var first = noun[0]; if(first == 'a' || first == 'e' || first == 'i' || first == 'o') return "an " + noun; return "a " + noun; } 

更新 :Eamon在评论中指出了一个重复的问题: 如何正确地在单词前加上“a”和“an”? 我会把这个Q留在这里然后打开,因为我仍然没有真正得到答案。

如果这是您需要认真对待的事情,您可以考虑将Ruby语言学(英语)库移植到.Net。 它是开源的,并且在计算正确的文章方面做得非常好。

http://deveiate.org/projects/Linguistics/

我已经从Python中移植了一个函数,正确地确定了C#中的元音,并将其作为问题的答案发布。以编程方式确定是否用a或者?来描述对象? 。 您可以在此处查看代码段。 它确实比只看元音更复杂。

我实现了一个库来执行此操作: https : //github.com/eamonnerbonne/a-vs-an ; 它是AvsAn on nuget。 它基于维基百科中的实际使用模式,因此甚至可以处理棘手的事情,例如…

  • “一个0800号码”
  • “牛蒡的一个∞”
  • “美国宇航局的一次飞行”
  • “NSA分析师”

换句话说,它通常甚至会合理地处理许多不正常的词。

由于你所做的只是检查字符串中的模式,你可以使用正则表达式。 这也应该允许未来扩展字母组合,如lutge098所说:

 public static string GetIndefinateArticle(string noun) { if (Regex.IsMatch(noun, "^([aeio]|un|ul)", RegexOptions.IgnoreCase)) return "an " + noun; else return "a " + noun; } 

我会做的是:

 var first = noun[0]; var second = noun[1]; if(first == 'a' || first == 'e' || first == 'i' || first == 'o') return "an " + self; if(first == 'u') if (second == 'n' || second == 'l') return "an " + self; if(first == 'h') if (second == 'i') return "an " + self; return "a " + self; 

因此,您可以定义一些情况,其中一些字母相互组合形成一定的声音。 希望这可以帮助。

不,当下一个字符是元音时,它并不像只是敲打额外的n那么简单。 它周围有一大堆细微之处,你还必须考虑如何处理h – 有些人使用之前的,有些则没有。

这也是英语特定的,并且框架是相对语言无关的。

这意味着你必须自己做饭:)

在辅音之前的“a”和在元音之前的“an”的基本规则可以让你在那里大部分时间,这将非常容易实现。 问题是“听起来像一个元音=一个”的情况 – 这会更难。