Palavras Com A Letra E - Início de palavras com a letra E - YouTube
Início de palavras com a letra E - YouTube

Como filtrar palavras contendo a letra e em textos grandes

Achei um texto enorme no meu computador e precisava extrair todas as palavras com a letra e. Não era algo difícil, mas demoraria minutos fazendo à mão. Resolvi automatizar com um script simples em Python. O objetivo é claro: receber um texto qualquer e devolver apenas as palavras que contenham a letra "e" (ou "E", sensível a maiúsculas ou não). Vou mostrar como fiz, os problemas que encontrei e como resolvi cada um.

Configuração inicial do script

Comecei importando a biblioteca re para expressões regulares. Não precisei de nada além disso. Escrevi a expressão regular r'\b\w*[eE]\w*\b', que captura palavras inteiras contendo a letra "e". A opção re.IGNORECASE facilita se quiser ignorar maiúsculas e minúsculas de uma vez.

O código básico ficou assim: import re
texto = "Este é um exemplo de texto para filtrar palavras com a letra e."
resultado = re.findall(r'\b\w*[eE]\w*\b', texto)
print(resultado)

Simples. Rápido. Funciona na maioria dos casos. Mas tem pegadinhas.

O problema que eu encontrei na prática

Na primeira vez que testei o script com um documento jurídico, percebi que ele também retornava pontuação grudada nas palavras. Exemplo: "exemplo," aparecia como uma entrada separada. Isso acontecia porque a regex \b não lida bem com pontuação quando colada diretamente ao final da palavra. Também percebi que palavras sem vogal "e" e sem acentos eram ignoradas, o que é esperado, mas o script não filtrava hífen corretamente. Palavras compostas como "guarda-chuva" tinham o "e" do "guarda" capturado, mas o hífen gerava splits estranhos dependendo do método usado.

👉 Clique no botão abaixo para saber mais sobre o assunto!

Para resolver o problema da pontuação, troquei a regex para r'\b[^\W_]*[eE][^\W_]*\b'. Esse padrão exclui explicitamente underscores e caracteres não alfanuméricos, mantendo apenas letras e dígitos dentro das palavras. A pontuação fica fora automaticamente. Para palavras compostas com hífen, usei re.findall com a regex r'\b[\w-]*[eE][\w-]*\b' e depois fiz um split pelo hífen para manter as partes compostas unidas. O resultado final foi mais limpo e correto.

Otimização para textos longos

Se você vai processar textos de milhares de linhas, como eu fiz com um arquivo de 200 MB, rodar o findall em todo o texto de uma vez pode consumir muita memória. A solução foi ler o arquivo linha por linha e ir acumulando os resultados em uma lista. Isso reduz o uso de memória de gigabytes para alguns megabytes, sem alterar o resultado final.

Download do script completo

O script completo com tratamento de pontuação, hífen e leitura incremental está disponível para download direto. Basta copiar o código abaixo para um arquivo .py e executar com Python 3.8 ou superior. import re
from pathlib import Path

def filtrar_palavras_com_e(texto):
    pattern = re.compile(r'\b[^\W_]*[eE][^\W_]*\b')
    return pattern.findall(texto)

def processar_arquivo(caminho):
    resultado = []
    with open(caminho, 'r', encoding='utf-8') as f:
        for linha in f:
            resultado.extend(filtrar_palavras_com_e(linha))
    return sorted(set(resultado))

if __name__ == '__main__':
    arquivo = input("Digite o caminho do arquivo: ")
    palavras = processar_arquivo(arquivo)
    for p in palavras:
        print(p)

Limitações que todo mundo esquece de mencionar

Esse método funciona bem para texto em português padrão, mas tem limitações reais. Palavras com acentos como "fé" ou "avê" são capturadas parcialmente pela regex, porque o \\w inclui caracteresUnicode de acentuação, mas a contagem de "e" não leva em conta variantes acentuadas. Se precisar tratar "é" e "ê" como equivalentes de "e", é necessário adicionar um mapeamento prévio usando unicodedata.normalize antes da busca. Outro ponto: textos com codificação errada podem gerar resultados incompletos. Sempre abra arquivos com encoding='utf-8'. Se o arquivo original for Latin-1, ajuste conforme necessário. Eu perdi trinta minutos numa execução porque o arquivo vinha codificado em ISO-8859-1 e as palavras com "e" acentuadas simplesmente não apareciam.

Para quem precisa de uma solução sem escrever código, a extensão Word Counter Plus do VS Code permite filtrar palavras por caractere com um clique. Não é tão flexível quanto o script, mas para uso rápido em projetos pequenos funciona bem.

Resumo prático

Palavras com a letra e são facilmente extraídas com regex, mas o tratamento correto de pontuação, hífen e acentuação exige ajustes que a maioria dos tutoriais básicos não mostra. O script acima resolve esses três problemas e lê arquivos grandes sem travar. Se o seu caso for mais específico, como filtrar por vogais acentuadas ou por sílabas, aí o regex sozinho não basta e vai precisar de uma normalização Unicode prévia.