Você precisa examinar as regras gramaticais para artigos indefinidos (existem apenas dois artigos indefinidos na gramática inglesa - "a" e "an). Você pode não concordar que isso soe correto, mas as regras da gramática inglesa são muito claras :
"As palavras ae an são artigos indefinidos. Usamos o artigo indefinido an antes de palavras que começam com o som de uma vogal (a, e, i, o, u) e o artigo indefinido a antes de palavras que começam com um som consonantal (todas outras letras). "
Observe que isso significa um som de vogal , e não uma letra de vogal . Por exemplo, palavras que começam com um "h" silencioso, como "honra" ou "herdeiro" são tratadas como vogais e, portanto, são iniciadas com "uma" - por exemplo, "É uma honra conhecê-lo". Palavras que começam com um som consonantal são prefixadas com um - é por isso que você diz "um carro usado" em vez de "um carro usado" - porque "usado" tem um som de "yoose" em vez de um som "uhh".
Portanto, como programador, essas são as regras a seguir. Você só precisa descobrir uma maneira de determinar com que som começa uma palavra, em vez de com qual letra. Já vi exemplos disso, como este em 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';
}
Provavelmente, é mais fácil criar a regra e, em seguida, criar uma lista de exceções e usá-la. Eu não imagino que haverá tantos.