1
resposta

[Projeto] Faça como eu fiz: preparando e limpando dados para Transformers

import re
import json
import os
from collections import Counter
from sklearn.model_selection import train_test_split

==========================================

1. Funções de Limpeza (Receitas)

==========================================

def clean_text_light(text):
"""
Limpeza Leve: Mantém a riqueza do idioma (acentos e pontuação).
Ideal para modelos que precisam entender nuances gramaticais.
"""
# Remove espaços duplos e quebras de linha excessivas
text = re.sub(r'\s+', ' ', text)
# Garante espaço após pontuação se não houver
text = re.sub(r'([.,!?])(?=[^\s])', r'\1 ', text)
return text.strip()

def clean_text_heavy(text):
"""
Limpeza Agressiva: Remove tudo que não é letra ou espaço.
Útil para vocabulários muito restritos ou datasets ruidosos.
"""
text = text.lower()
# Remove números e pontuação (mantendo apenas letras e espaços)
text = re.sub(r'[^a-záàâãéèêíïóôõöúç\s]', '', text)
return re.sub(r'\s+', ' ', text).strip()

==========================================

2. Processamento do Dataset

==========================================

def prepare_transformer_data(input_file, sep_token=""):
with open(input_file, 'r', encoding='utf-8') as f:
lines = f.readlines()

# Remover duplicatas mantendo a ordem
unique_lines = list(dict.fromkeys(lines))

cleaned_data = []
vocab_counter = Counter()

for line in unique_lines:
    cleaned = clean_text_light(line)
    if len(cleaned) > 5: # Filtra linhas muito curtas/irrelevantes
        # Adiciona o delimitador de documento para o Transformer saber onde termina um texto
        final_text = f"{cleaned} {sep_token}"
        cleaned_data.append(final_text)
        # Contagem básica para estatísticas
        vocab_counter.update(final_text.split())

# Divisão Treino/Validação (Padrão MLOps)
train_data, val_data = train_test_split(cleaned_data, test_size=0.1, random_state=42)

# ==========================================
# 3. Geração de Artefatos (stats.json)
# ==========================================
stats = {
    "total_documents": len(cleaned_data),
    "unique_tokens_approx": len(vocab_counter),
    "most_common_tokens": vocab_counter.most_common(10),
    "train_size": len(train_data),
    "val_size": len(val_data),
    "sep_token": sep_token
}

with open('stats.json', 'w', encoding='utf-8') as f:
    json.dump(stats, f, indent=4, ensure_ascii=False)

return train_data, val_data

Execução

train, val = prepare_transformer_data("meu_dataset.txt")

1 resposta

Oi, Moacir!

Gostei da forma como você estruturou o processo em etapas, isso deixa bem claro o que está acontecendo na limpeza e preparação dos dados.

Bons estudos!

Sucesso

Imagem da comunidade