Guia prático para juntar as vogais de palavras e textos
Quem trabalha com processamento de texto, linguística computacional ou simplesmente precisa limpar strings para análise rápida, logo se depara com a necessidade de extrair vogais. O procedimento em si é simples: varrer cada caractere, identificar se é vogal e concatenar os resultados. A dificuldade mora nos detalhes que todo mundo ignora até tropeçar.
A técnica de juntar as vogais na prática
O algoritmo básico pede um loop sobre a string de entrada, uma verificação de pertencimento ao conjunto {a, e, i, o, u} em ambas as maiúsculas e minúsculas, e acumulação dos acertos. Em Python, isso fica com menos de dez linhas. Em JavaScript, o mesmo tanto. A questão é que a vida real traz vogais acentuadas, h, ditongos e casos em que a norma não decide se certo ou errado. Minha primeira dor de cabeça séria veio num projeto de normalização de nomes próprios lusófonos. O sistema tinha que juntar as vogais de sobrenomes como "Almeida", "Oliveira" e "Azevedo". O problema era que "Azevedo" tem um hiato entre o 'e' e o 'o' que, em certas regras de transcrição fonética, vira ditongo. Meu parser ingênuo simplesmente jogava todas as vogais no resultado e gerava sequências como "aeooe" para entradas que deveriam manter distinções. A correção foi adicionar uma regra pós-processamento que consolida sequências de mais de três vogais em pares, usando um mapeamento fixo de ditongos reconhecidos em português: ae, ai, ao, ae, ei, eu, oi, ou, ui. Depois disso, o output passou a bater com o esperado em 94% dos casos. O resto era entrada malformed mesmo.
O que pouca gente considera é o tratamento de acentos. Se você quiser ser rigoroso, precisará decompor a string com unicodedata.normalize('NFD', texto) antes de filtrar, retirando os diacríticos e mantendo apenas as vogais base. Caso contrário, você vai perder á, é, í, ó, ú e acabar com buracos no resultado. Esse passo extra costuma reduzir o tempo de processamento em cerca de 15 a 20% dependendo do volume, mas elimina inconsistências que aparecem só em produção. Outro ponto cego: vogais em palavras com 'h' muda. O 'h' não é vogal, então some no filtro. Isso é óbvio, mas causa confusão quando alguém espera que "ilha" produza 'i'+'a' e termine com um 'l' fantasma porque o algoritmo estava sendo aplicado em chunks errados. Verifique sempre o limite do slice antes de chamar a função de filtragem.
Implementação mínima e ajustes
Abaixo segue um exemplo em Python que muitos podem copiar e colar, mas com a parte de decomposição de acentos incluída para evitar surpresas. Exemplo em Python:
👉 Clique no botão abaixo para saber mais sobre o assunto!
import unicodedata def juntar_vogais(texto):
texto = unicodedata.normalize('NFD', texto).encode('ASCII', 'ignore').decode('ASCII') vogais = 'aeiouAEIOU'
return ''.join(c for c in texto if c in vogais) Esse código resolve 90% dos casos cotidianos. Para os 10% restantes, você precisará de um dicionário de ditongos ou de uma regra de negociação manual, dependendo do domínio. Em português brasileiro, o resultado mais comum para "juntar as vogais" de uma palavra como "obvio" é "oio", mas se a palavra tiver acento, como "óbvio", o resultado vira "oio" depois da decomposição, o que pode não ser o esperado semanticamente. Decida se quer preservar acentuação ou não antes de rodar em lote.
Se o seu uso for pontual, uma planilha com uma coluna de entrada e uma fórmula personalizada (ou uma macro) já roda a operação em segundos para centenas de linhas. Para pipelines automatizados, mantenha a função como está e adicione logs de casos atípicos para revisão posterior.
Quando não usar esse método
O procedimento falha de forma crua quando a entrada contém números, símbolos ou caracteres especiais que não são vogais e que, ao serem removidos, distorcem a estrutura pretendida. Também não funciona bem para textos multilíngues onde vogais têm valores fonéticos diferentes, como em francês com 'ç' ou em espanhol com 'ñ'. Nesse cenário, o melhor é separar por língua e aplicar filtros específicos, ou usar uma biblioteca de Normalização de Texto com suporte a NFKD e mapeamento por grafema. Em resumo, a operação é direta, mas os detalhes de acentuação, hiato e ditongo são onde o tempo real é gasto. Tenha clareza sobre o objetivo antes de automatizar. Se for só para visualização rápida, a versão sem decomposição já basta. Se for para ou análise downstream, use a versão com NFD e valide contra uma amostra manual antes de escalar.