Belirsiz makaleler için gramer kurallarına bakmanız gerekir (İngilizce dilbilgisinde yalnızca iki belirsiz makale vardır - "a" ve "an). Bu seslerin doğru olduğunu kabul etmeyebilirsiniz, ancak İngilizce gramer kuralları çok açıktır :
"A ve an sözcükleri belirsiz makalelerdir. Bir sesli harfle (a, e, i, o, u) başlayan sözcüklerden önce belirsiz makale ve ünsüz bir sesle başlayan sözcüklerden önce (tümü diğer harfler). "
Bu demektir ki bir sesli harf Not sesi değil, bir sesli harf harf . Örneğin, "namus" veya "varis" gibi sessiz bir "h" ile başlayan sözcükler ünlü olarak kabul edilir ve bu nedenle "bir" ile devam ettirilir - örneğin, "Sizinle tanışmak bir onurdur". Bir ünsüz sesle başlayan kelimelerin önüne bir ön ek gelir - bu yüzden "kullanılmış araba" yerine "kullanılmış araba" diyorsunuz - çünkü "kullanılmış" kelimesi "uhh" sesinden çok "yoose" sesine sahiptir.
Yani, bir programcı olarak uyulması gereken kurallar bunlardır. Bir kelimenin hangi harfle değil, hangi sesle başladığını belirlemenin bir yolunu bulmanız yeterlidir. Bunun örneklerini PHP'de Jaimie Sirovich'in yazdığı gibi gördüm :
function aOrAn($next_word)
{
$_an = array('hour', 'honest', 'heir', 'heirloom');
$_a = array('use', 'useless', 'user');
$_vowels = array('a','e','i','o','u');
$_endings = array('ly', 'ness', 'less', 'lessly', 'ing', 'ally', 'ially');
$_endings_regex = implode('|', $_endings);
$tmp = preg_match('#(.*?)(-| |$)#', $next_word, $captures);
$the_word = trim($captures[1]);
$_an_regex = implode('|', $_an);
if (preg_match("#($_an_regex)($_endings_regex)#i", $the_word)) {
return 'an';
}
$_a_regex = implode('|', $_a);
if (preg_match("#($_a_regex)($_endings_regex)#i", $the_word)) {
return 'a';
}
if (in_array(strtolower($the_word{0}), $_vowels)) {
return 'an';
}
return 'a';
}
Muhtemelen en kolayı kuralı oluşturmak ve ardından bir istisnalar listesi oluşturmak ve bunu kullanmak. O kadar çok olacağını sanmıyorum.