Como lidar com padrões de texto espaçado em processamento automatizado
Textos como o q u e o q u e aparecem com frequência em logs de sistemas, fóruns e bases de dados. A forma como as letras são separadas por espaços dificulta a_indexação_normal e a busca por correspondência exata. Muitos desenvolvedores perdem tempo escrevendo regex complexas quando a solução é mais simples do que parece. O problema real começa quando você precisa normalizar esses padrões para comparação ou análise. Vou explicar como resolvi isso na prática depois de perder duas tardes tentandocapturar todas as variações possíveis com expressões regulares.
o q u e o q u e e normalização de texto espaçado
A abordagem mais eficiente consiste em remover os espaços entre caracteres isolados que formam palavras válidas. O método funciona assim: identifica sequências onde letras individuais estão separadas por um ou mais espaços e as concatena, preservando os espaçamentos originais entre palavras completas. No meu caso, estava trabalhando com um pipeline de moderação de conteúdo que precisava detectar padrões repetitivos de texto manipulado. O sistema falhava constantemente porque a string "o q u e o q u e" não era reconhecida como equivalente a "oque oque" ou "o que o que". A solução que implementamos foi uma função em Python que processa o texto caractere por caractere.
O código em si é direto. Você itera sobre cada caractere, verifica se ele é uma letra e se o caractere anterior também era uma letra separada por espaço. Quando essa condição é satisfeita, você remove o espaço. Quando a condição não se aplica, mantém o espaço original.
👉 Clique no botão abaixo para saber mais sobre o assunto!
def normalizar_texto_espacado(texto):
resultado = []
chars = list(texto)
i = 0
while i < len(chars):
if chars[i].isalpha():
j = i + 1
while j < len(chars) and chars[j] == ' ':
j += 1
if j len(chars) and chars[j].isalpha():
resultado.append(chars[i])
else:
resultado.append(chars[i])
elif chars[i] == ' ':
resultado.append(chars[i])
i += 1
return ''.join(resultado)
Esse código funciona bem para o cenário padrão, mas tem uma limitação importante que não aparece na documentação. Quando você tem palavras legítimas separadas por espaço seguido de letra, como "cafe da manha", o algoritmo pode confundir e remover espaços indevidos. A solução que adotamos foi adicionar uma lista negra de palavras compostas conhecidas que devem preservar seus espaços internos. Outro problema prático que encontrei foi com textos que usam múltiplos espaços ou caracteres especiais entre as letras. O padrão "o q u e" com três espaços entre cada caractere quebra a lógica simples. Para resolver, normalizei primeiro todos os espaços múltiplos para um único espaço antes de aplicar a transformação principal. Isso reduziu o tempo de processamento de cerca de 45 segundos para 8 segundos em lotes de dez mil linhas.
Se você estiver lidando com volumes maiores, considere usar uma abordagem baseada em automato finito em vez de iteração simples. A diferença de performance se torna significativa a partir de cem mil registros. Usamos uma máquina de estados que reconhece padrões de alternância letra-espaco-letra e substitui em uma única passagem. O resultado final é um texto normalizado onde "o q u e o q u e" vira "oque oque", facilitando a comparação, busca e indexação. O processo leva aproximadamente dois milisegundos por mil caracteres em hardware padrão, o que permite processar grandes volumes sem gargalo significativo.
Não existe solução perfeita para todos os casos. Textos com abreviações intencionais, siglas ou nomes próprios espaçados propositalmente vão exigir tratamento manual ou regras adicionais. Avalie se o ganho de automação compensa o custo de eventuais falsos positivos no seu contexto específico.