Debes mirar las reglas gramaticales para artículos indefinidos (solo hay dos artículos indefinidos en gramática inglesa: "a" y "an). Puede que no estés de acuerdo con que estos suenen correctos, pero las reglas de la gramática inglesa son muy claras :
"Las palabras a y an son artículos indefinidos. Usamos el artículo indefinido an antes de palabras que comienzan con un sonido de vocal (a, e, i, o, u) y el artículo indefinido a antes de palabras que comienzan con un sonido de consonante (todas otras letras) ".
Tenga en cuenta que esto significa un sonido de vocal y no una letra de vocal . Por ejemplo, las palabras que comienzan con una "h" silenciosa, como "honor" o "heredero", se tratan como vocales y, por lo tanto, se proceden con "an", por ejemplo, "Es un honor conocerte". Las palabras que comienzan con un sonido consonante tienen el prefijo a - por eso dice "un auto usado" en lugar de "un auto usado" - porque "usado" tiene un sonido "yoose" en lugar de un sonido "uhh".
Entonces, como programador, estas son las reglas a seguir. Solo necesita encontrar una forma de determinar con qué sonido comienza una palabra, en lugar de con qué letra. He visto ejemplos de esto, como este en PHP de 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';
}
Probablemente sea más fácil crear la regla y luego crear una lista de excepciones y usarla. No me imagino que habrá tantos.