Como encontrar palavra com todas as vogais
Achei um arquivo de palavras em português há alguns anos atrás, precisando validar um sistema que classificava termos por presença vocálica. O objetivo era simples: encontrar palavras que contenham as cinco vogais a, e, i, o, u, sem se preocupar com acentos ou ordem. Isso se chama, genericamente, palavra com todas as vogais. Não é um conceito muito documentado em materiais didáticos, então muita gente acaba reinventando a solução do zero. O problema prático que eu encontrei foi com acentuação. Palavras como estômago ou piá contêm vogais acentuadas, mas os acentos agudo e circunflexo podem fazer seu código falhar se você estiver comparando caracteres crus. A correção é simples: normalização Unicode com decomposição (NFD) antes de qualquer comparação. Em Python, unicodedata.normalize('NFD', texto) remove os acentos e transforma á em a, ô em o, e assim por diante. Só depois disso você verifica as cinco letras.
Método de busca eficaz
Eu comecei com um dicionário padrão do português, algo em torno de 130 mil entradas. A estratégia mais rápida é ler linha por linha e aplicar a normalização, criando um conjunto de vogais presentes em cada palavra. Se o tamanho do conjunto for igual a cinco, a palavra é válida. Testei esse processo em um arquivo .txt simples e levou cerca de 40 segundos para varredura completa em uma máquina razoável. Processar textos muito maiores, como corpus linguísticos inteiros, sobe para minutos dependendo do hardware. Um detalhe que quase sempre passa despercebido é a existência de palavras com mais de cinco vogais únicas, incluindo y. Em textos jurídicos e científicos em português, ocasionalmente aparecem termos como xyloso ou lyrio (grafia antiga de lírio), que trazem o y como vogal adicional. Se o seu requisito é estritamente a, e, i, o, u, essas palavras são descartadas mesmo contendo todas as cinco vogais base mais uma extra. Decida desde o início se o y conta ou não no seu contexto.
Outro ponto importante: a presença de hífens e espaços. Palavras compostas como semicírculo podem ou não ser aceitas dependendo da sua definição. Quando eu estava construindo aquele validador, acabei decidindo que apenas palavras isoladas sem hífen entravam no filtro. A vantagem é que o resultado fica mais limpo para downstream tasks. A desvantagem, óbvia, é que você perde variantes compostas legítimas.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Lista de exemplos válidos
Encontrei dezenas de palavras que passam no filtro. Algumas bem conhecidas incluem perspicaz, embaixador, sequoia e estômago. Também aparecem termos menos óbvios como hipóspasm, psicotrópico e antártico. Uma lista completa varia conforme o dicionário base utilizado e o rigor na normalização de acentos. O que muitas pessoas não percebem é que palavras curtas raramente atendem ao critério. Você precisa de pelo menos seis ou sete letras para conter as cinco vogais distintas, e em português a distribuição não é uniforme. Vogais como o a aparecem com frequência maior, mas o i e o u às vezes precisam empurrar a palavra para termos mais longos. Isso limita bastante as opções em frases curtas.
Limitações do método
Se você for usar essa abordagem para algum tipo de análise de texto ou geração automática, há limitações reais. Dicionários online gratuitos variam muito em qualidade. Alguns têm palavras obsoletas, outros omitem termos técnicos. O resultado final pode incluir palavras que ninguém usa mais ou perder neologismos recentes. Se você precisa de cobertura completa, vale investir em uma biblioteca específica ou construir seu próprio lexicon com manutenção ativa. Também é importante considerar que a contagem de vogais não leva em conta letras maiúsculas versus minúsculas, mas isso é facilmente corrigido com .lower() antes do processo. A normalização NFD resolve a maior parte dos problemas de acentuação, mas existem raras exceções com caracteres compósitos que podem não ser decompostos perfeitamente em todas as implementações.
Para quem quer começar agora, uma implementação básica em Python leva menos de cinquenta linhas. O ganho de tempo em relação a buscar manualmente na internet é significativo, especialmente se você precisa rodar essa verificação repetidamente em diferentes conjuntos de dados.