Vous devez examiner les règles grammaticales pour les articles indéfinis (il n'y a que deux articles indéfinis dans la grammaire anglaise - "a" et "an). Vous pouvez ne pas convenir que ces règles semblent correctes, mais les règles de la grammaire anglaise sont très claires :
"Les mots a et an sont des articles indéfinis. Nous utilisons l'article indéfini an avant les mots commençant par une voyelle (a, e, i, o, u) et l'article indéfini a avant les mots commençant par une consonne (tous autres lettres). "
Notez que cela signifie un son de voyelle , et non une lettre de voyelle . Par exemple, les mots commençant par un «h» silencieux, tels que «honneur» ou «héritier» sont traités comme des voyelles et sont donc traités par «un» - par exemple, «c'est un honneur de vous rencontrer». Les mots commençant par une consonne sont préfixés par un - c'est pourquoi vous dites "une voiture d'occasion" plutôt que "une voiture d'occasion" - car "utilisé" a un son "yoose" plutôt qu'un son "euh".
Donc, en tant que programmeur, ce sont les règles à suivre. Il vous suffit de trouver un moyen de déterminer par quel son un mot commence, plutôt que par quelle lettre. J'en ai vu des exemples, comme celui-ci en PHP par Jaimie Sirovich:
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]);
//$the_word = Format::trimString(Utils::pregGet('#(.*?)(-| |$)#', $next_word, 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';
}
Il est probablement plus simple de créer la règle, puis de créer une liste d'exceptions et de l'utiliser. Je n'imagine pas qu'il y en aura autant.