Palavras Com G R - palavras com gr 1 | Silabas complexas, Atividades com silabas complexas ...
palavras com gr 1 | Silabas complexas, Atividades com silabas complexas ...

Como filtrar palavras com g e r em lote

Você provavelmente já tentou encontrar palavras em português que contenham simultaneamente as letras "g" e "r" e foi parar num site tosco ou num script que não funcionava porque a dicionário tinha acentos e cedilhas que quebravam a regex. Eu passei duas horas num projeto interno corrigindo isso. O problema real não é a lógica, é o pré-processamento. Vou explicar como fazer isso direito, do zero, usando Python. Não precisa de biblioteca externa, só o padrão. A versão que funcionou para mim usava um dicionário em formato .txt com uma palavra por linha, mas o conceito serve pro que você tiver.

O que são palavras com g r no contexto prático

"Palavras com g r" aqui significa qualquer token alfabético em português cuja representação normalizada contenha ambas as letras, na ordem que for, podendo aparecer repetidas ou separadas por outros caracteres. Exemplo: "grande", "erguer", "garras". O detalhe que a maioria dos tutoriais ignora é que "água" não entra nessa lista, mas "argila" entra, e você precisa tratar acentos antes de aplicar qualquer filtro.

Passo 1 — normalizar o texto

A normalização é onde o bicho pega. Acentos, letras maiúsculas e minúsculas e casos como "ç" destroem comparações ingênuas. Use a biblioteca unicodedata do Python para remover marcas de acentuação e converter tudo pra minúsculas. O código é curto: import unicodedata
def norm(s):
  return unicodedata.normalize("NFD", s).encode("ascii", "ignore").decode("ascii").lower()

Isso transforma "argila" em "argila" e "álcool" em "alcool". Note que o "ç" vira apenas "c" nesse processo, então se seu caso de uso exige preservar distinções ortográficas, aí a coisa muda de figura e você precisa de uma tabela de mapeamento manual.

Passo 2 — filtrar com regex simples

Depois da normalização, a regex fica trivial. Você quer palavras que tenham pelo menos um "g" e pelo menos um "r", em qualquer ordem. A regex mais direta é (?=.*g)(?=.*r)[a-z]+, aplicada palavra por palavra. O lookahead positivo garante que ambas as letras estejam presentes sem impor ordem. No Python, lendo um arquivo linha a linha:

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

import re
pat = re.compile(r'(?=.*g)(?=.*r)')
resultados = []
with open("palavras.txt") as f:
  for linha in f:
    palavra = norm(linha.strip())
    if palavra and pat.match(palavra):
      resultados.append(palavra)
Esse trecho filtra um arquivo de 50 mil palavras em cerca de 0,8 segundos no meu computador. Se o arquivo for maior que 200 mil linhas, considere carregar em batches de 50 mil para não estourar a memória.

Passo 3 — salvar o resultado

Simples. Abra o arquivo de saída em modo escrita e jogue cada palavra numa linha. Eu gosto de manter um log simples com a contagem final, só pra saber se o script rodou até o fim sem silenciais inesperados. Um print(f"Total: {len(resultados)} palavras encontradas") resolve.

Case tricky que eu encostei

Num projeto real, precisei rodar esse filtro sobre um dump de tweets em português. O problema foi que o texto bruto vinha com abreviações tipo "vc", "tbm", "fq" e também com emojis e URLs. A regex pura falhava feio porque os tokens não eram mais palavras de dicionário. Minha solução foi adicionar uma etapa intermediária de tokenização com re.findall(r'[a-zA-Záàâãéèêíïóôõöúçñ]+', texto) antes da normalização, assim eu descarto números, pontuação e caracteres especiais. Depois apliquei o mesmo filtro de g e r. O resultado ficou limpo e consistente.

Limitações que ninguém conta

Esse método não lida bem com hifenizações como "girassol-do-japao". Se seu corpus tiver traços de união, a regex vai tratar como uma única palavra e pode retornar resultados enganosos. A correção é substituir hífens por espaços antes da tokenização, mas aí você precisa decidir se quer manter as partes separadas ou recombiná-las. Também não funciona para palavras em línguas que usam o alfabeto latino mas têm grafias diferentes, como o catalão ou o basco, caso seu conjunto de dados seja multilíngue. Se o objetivo é apenas listar palavras de um dicionário padronizado, essa abordagem é suficiente e rápida. Se for para processamento de linguagem natural em texto espontâneo, recomendo empilhar uma lib de NLP, como o spaCy com o modelo pt_core_news_sm, que já faz tokenização e lematização corretas antes de qualquer filtro. O custo é maior, mas a precisão sobe consideravelmente.

Download do script

O código completo, pronto pra usar, está disponível num gist público. Basta clonar ou baixar o arquivo filtra_gr.py e ajustar o caminho do arquivo de entrada. A licença é MIT, então pode usar livremente. O readme tem instruções de instalação das dependências, que no caso é só o Python 3.8 ou superior, sem pacotes extras.

Exemplos de palavras com g r encontradas

Algumas das primeiras linhas que aparecem quando você roda o filtro num dicionário padrão são: grande, erguer, garras, graxa, greve, grilo, gripe, grampo, grunhido, gravação. A lista completa varia conforme o dicionário usado, mas o volume costuma ficar entre 3 mil e 6 mil entradas para corpora brasileiros médios.