是否有.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在评论中指出了一个重复的问题:How can I correctly prefix a word with "a" and "an"?我会在这里留下这个Q并打开,因为我仍然没有真正的答案。< / p>
答案 0 :(得分:6)
如果这是您需要认真对待的事情,您可以考虑将Ruby Linguistics(英语)库移植到.Net。它是开源的&amp;在计算正确的文章方面做得很好。
答案 1 :(得分:2)
由于你所做的只是检查字符串中的模式,你可以使用正则表达式。这也应该允许将来扩展字母组合,如 lutge098 所述:
public static string GetIndefinateArticle(string noun)
{
if (Regex.IsMatch(noun, "^([aeio]|un|ul)", RegexOptions.IgnoreCase))
return "an " + noun;
else
return "a " + noun;
}
答案 2 :(得分:2)
我从Python移植了一个函数,该函数正确地确定了C#中的元音,并将其作为问题Programmatically determine whether to describe an object with a or an?的答案发布。您可以看到代码段here。这确实比仅仅看元音更复杂。
答案 3 :(得分:2)
我实施了一个库来执行此操作:https://github.com/eamonnerbonne/a-vs-an;它是AvsAn on nuget。它基于维基百科中的实际使用模式,因此甚至可以处理棘手的事情,如...
换句话说,它通常会合理地处理很多不正常的词。
答案 4 :(得分:0)
我要做的是:
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;
因此,您可以定义某些字母相互组合形成某种声音的情况。希望这会有所帮助。
答案 5 :(得分:0)
在辅音之前的“a”和在元音之前的“an”的基本规则可以让你在那里大部分时间,这将非常容易实现。问题是“听起来像一个元音=一个”的情况 - 这会更难。
答案 6 :(得分:0)
不,当下一个字符是元音时,并不像只是额外的n
那样简单。它周围有很多细微之处,你还必须考虑如何处理h
- 有些人在它之前使用an
,有些则不然。
这也是英语特有的,并且该框架与语言无关。
这意味着你必须自己做饭:)