我有一个名词数据库(ex"house","感叹号","苹果"),我需要在我的应用程序中输出和描述.很难用一个自然的句子来描述一个项目而不使用"a"或"an" - "房子很大","感叹号很小"等等.
我可以在PHP中使用任何函数,库或hack来确定用A或AN描述任何给定名词是否更合适?
是否存在用于确定名词的不定冠词("a"vs"an")的javascript库?
我可以从一个简单的正则表达式开始,如下所示:
var pattern = /^([aeiou])/i;
pattern.test("umbrella");
Run Code Online (Sandbox Code Playgroud)
但这并不处理这样的情形:"用户",这应该返回false(你不会说" 一个用户点击按钮").
我有兴趣验证或自动纠正英文文本块中不定冠词"a"和"an"的使用textarea
.
语法规则是文章的选择取决于开始下一个单词的声音.细节在这里和这里.这看起来非常广泛,但是在之前的答案中有一个建议(如何正确地用"a"和"an"前缀一个单词?)来引用一个庞大的英文文本数据库来创建启发式来推断出正确的不确定性在特定情况下使用的文章.Eamon Nerbonne评论说他已经这样做了,那么我该如何将这个解决方案应用到这个实际的实现中呢?
到目前为止,我所使用的函数实现了语法规则中最简单的部分; 它使用的时候下面的词以元音开头,和一个其他.它还尊重该文章的现有资本化.但在实际使用中,这是不实际的,因为该规则的例外情况非常普遍.例如,"一匹马"是正确的,而"荣誉"和"一个HTTP地址"则不是.
如何扩展我的功能以正确处理文章后面的单词的实际发音,包括无声字母,首字母缩略词和"有时-y"?我不需要100%的准确度 - 比80%更好的东西足以改进我正在纠正的文本.
这是我的fixArticles()
功能; 请参阅代码片段以获取正在运行的示例
function fixArticles( txt ) {
var valTxt = txt.replace(/\b(a|an) (\w*)\b/gim, function( match, article, following ) {
var newArticle = article.charAt(0);
switch (following.charAt(0).toLowerCase()) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
newArticle += 'n'; // an
break;
default:
// a
break;
}
if (newArticle !== article) {
newArticle = "<span class='changed'>" + newArticle + …
Run Code Online (Sandbox Code Playgroud) 是否有任何.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;
}
Run Code Online (Sandbox Code Playgroud)
更新:Eamon在评论中指出了一个重复的问题:如何正确地在单词前加上"a"和"an"?我会把这个Q留在这里然后打开,因为我还没有真正得到答案.