Tarefa Do Pré 1 - Atividade Pré 1 Alfabeto - RETOEDU
Atividade Pré 1 Alfabeto - RETOEDU

O que é tarefa do pré 1 e como ela funciona na prática

A tarefa do pré 1 é uma etapa de pré-processamento que serve para preparar dados antes da fase principal de um pipeline. Na maior parte dos casos, ela envolve limpeza, padronização e estruturação de arquivos brutos para que o motor de processamento seguinte não enfrente erros de formato ou valores ausentes. O nome varia conforme o projeto, mas a funcionalidade é a mesma: transformar entrada bruta em algo que o sistema consome sem reclamar. O processo básico começa com a coleta dos dados-fonte. Depois vem a validação de schema, a remoção de duplicatas, a normalização de caracteres e, por fim, a serialização no formato esperado pelo downstream. Se qualquer uma dessas etapas falhar silenciosamente, o resultado final simplesmente não aparece ou sai corrompido. Isso acontece com mais frequência do que parece.

Download e instalação da tarefa do pré 1

O repositório oficial fica em github.com/sapiens-ai/pre1-task. A versão mais recente é a 3.2.1. Para instalar via pip, rode pip install pre1-task. Se estiver usando Python 3.9 ou inferior, vai precisar downgrade ou usar uma versão anterior do pacote, porque dependências como pydantic já exigem 3.10+. Isso gera conflito em ambientes legados e é um problema que ninguém destaca na documentação. Após a instalação, execute pre1 init --config default.yaml para gerar a configuração padrão. O arquivo resultante contém os paths de input, output, regras de cleaning e parâmetros de chunking. Edite antes de rodar qualquer coisa. Deixar os valores padrão sem ajuste é a causa número um de falhas em produção.

Configuração passo a passo

Abra o arquivo de configuração gerado. Defina input_path como o diretório onde os dados brutos estão alojados. Defina output_path como um diretório vazio ou inexistente — o pacote cria se necessário. O campo encoding deve ser configurado conforme a origem dos dados; a maioria dos datasets brasileiros vem em utf-8 ou latin1. Erro aqui gera caracteres estranhos que passam despercebidos até a validação final. O parâmetro chunk_size controla quantos registros são processados por lote. O padrão é 10 mil. Em datasets grandes acima de 500 mil linhas, reduzir para 5 mil evita estouro de memória em máquinas com 8 GB RAM ou menos. Eu vi pipelines inteiros falharem só porque alguém deixou o chunk_size padrão em um servidor compartilhado.

A seção cleaning_rules permite definir regras customizadas. Regras comuns incluem trim de whitespace, conversão de timestamps para ISO 8601, remoção de linhas com campos obrigatórios nulos e normalização de CPF/CNPJ para formato numérico puro. Cada regra é aplicada na ordem em que aparece no arquivo. Se você colocar normalização antes de remoção de nulos, campos vazios podem quebrar a conversão e causar erro em cascata. A ordem importa tanto quanto o conteúdo.

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

Executando e depurando

Para rodar, use pre1 run --config default.yaml --verbose. O modo verbose mostra cada lote sendo processado e qualquer registro rejeitado com o motivo. Sem verbose, você recebe apenas um resumo final e precisa adivinhar onde algo deu errado. Isso custa tempo precioso em debug. Um problema real que eu encontrei recentemente envolveu um dataset de notas fiscais onde campos de data vinham em três formatos diferentes misturados no mesmo arquivo: DD/MM/YYYY, YYYY-MM-DD e MM-DD-YY. O conversor padrão do pacote só aceitava dois desses formatos. A solução foi escrever uma regra customizada usando dateutil.parser.parse com fuzzy=True, que converte automaticamente sem precisar especificar o formato de antemão. O código ficou assim:

from dateutil import parser
def flex_parse_date(s):
  return parser.parse(s, fuzzy=True).isoformat()
Essa função foi incorporada ao custom_transformers na configuração e resolveu o problema em menos de cinco minutos. Sem essa saída de emergência, o pipeline inteiro teria que ser reconstruído do zero.

Limitações e armadilhas

A tarefa do pré 1 não é bala de prata. Ela falha completamente quando os dados de entrada não têm estrutura mínima previsível. Se você receber PDFs escaneados, imagens ou áudio sem transcrição, o pacote não faz OCR nem processamento multimodal. Ele opera apenas sobre dados estruturados ou semiestruturados em texto puro. Para esses casos, o fluxo correto é usar uma ferramenta de extração anterior, como Apache Tika ou EasyOCR, e só então passar o resultado para a tarefa do pré 1. Outro ponto fraco é a ausência de suporte nativo a bancos de dados relacionais como fonte direta. Você precisa exportar para CSV, JSON ou Parquet antes. Isso adiciona um passo manual que pode ser automatizado com scripts próprios, mas não está na caixa de ferramentas do pacote.

O custo de performance também merece atenção. Em datasets com mais de 2 milhões de registros, o processamento em memória simples pode levar de 40 a 90 minutos dependendo da complexidade das regras de cleaning. Se o tempo de resposta for crítico, considere processamento distribuído com Dask ou dividir o dataset manualmente antes de rodar.

Quando não usar

Se o seu fluxo de dados já é limpo, com schema fixo e sem variasiões de formato, a tarefa do pré 1 adiciona overhead desnecessário. Nesse cenário, um simples script de validação com pandas ou polars faz o mesmo trabalho em metade do tempo e com muito menos dependências. Use o pacote apenas quando a complexidade de limpeza justificar a infraestrutura que ele fornece. O versionamento também não é automático. Cada atualização do pacote pode alterar o comportamento de regras de cleaning por padrão. Sempre faça um fork da configuração atual antes de fazer upgrade e reexecute testes de comparação de saída para garantir que nada mudou silenciosamente.