#!/usr/bin/env python3 """ correct_texts.py Author: Descomplicar® Crescimento Digital Link: https://descomplicar.pt Copyright: 2025 Descomplicar® """ import os import shutil from pathlib import Path from processors.text_corrector import TextCorrector import concurrent.futures from tqdm import tqdm def format_title(filename: str) -> str: """Formata o nome do arquivo para um título legível.""" # Remove extensão e data no formato _YYYYMMDD_HHMMSS title = filename.replace('.txt', '').split('_2025')[0] # Substitui underscores por espaços title = title.replace('_', ' ') # Capitaliza palavras title = ' '.join(word.capitalize() for word in title.split()) return title def process_file(corrector, file_path, output_dir, processed_dir): """Processa um único arquivo.""" try: # Ler o texto texto = file_path.read_text(encoding="utf-8") # Criar título a partir do nome do arquivo titulo = format_title(file_path.name) # Adicionar título ao texto texto_com_titulo = f"# {titulo}\n\n{texto}" # Corrigir o texto texto_corrigido = corrector.correct_text(texto_com_titulo) # Salvar resultado output_file = output_dir / f"corrigido_{file_path.name}" output_file.write_text(texto_corrigido, encoding="utf-8") # Mover original para processados target_path = processed_dir / file_path.name shutil.move(str(file_path), str(target_path)) return True, file_path.name except Exception as e: return False, f"Erro ao processar {file_path.name}: {str(e)}" def main(): # Definir diretórios base_dir = Path(__file__).parent.parent input_dir = base_dir / "input" output_dir = base_dir / "corrected" processed_dir = input_dir / "originais_processados" # Criar diretórios necessários output_dir.mkdir(exist_ok=True) processed_dir.mkdir(exist_ok=True) # Verificar arquivos já processados processed_files = {f.stem.replace('corrigido_', '') for f in output_dir.glob('corrigido_*.txt')} # Mover arquivos já processados for input_file in input_dir.glob("*.txt"): if input_file.stem in processed_files: target_path = processed_dir / input_file.name shutil.move(str(input_file), str(target_path)) print(f"→ Movido para processados: {input_file.name}") continue # Criar instância do corretor corrector = TextCorrector() # Listar arquivos para processar files = list(input_dir.glob("*.txt")) if not files: print("Nenhum arquivo .txt encontrado na pasta input") return print(f"Processando {len(files)} arquivos em paralelo...") # Processar arquivos em paralelo with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor: # Criar lista de futures futures = [ executor.submit(process_file, corrector, f, output_dir, processed_dir) for f in files ] # Processar resultados com barra de progresso for future in tqdm(concurrent.futures.as_completed(futures), total=len(files)): success, result = future.result() if success: print(f"✓ {result}") else: print(f"✗ {result}") if __name__ == "__main__": main()