#!/usr/bin/env python3 """ process_transcripts.py Author: Descomplicar® Crescimento Digital Link: https://descomplicar.pt Copyright: 2025 Descomplicar® """ import shutil from pathlib import Path from processors.text_corrector import TextCorrector import concurrent.futures from tqdm import tqdm def copy_structure(src_dir, dest_dir): """Copia a estrutura de pastas mantendo a hierarquia""" src_path = Path(src_dir) dest_path = Path(dest_dir) # Copia cada pasta e ficheiro for src_file in src_path.rglob('*.txt'): # Calcula o caminho relativo rel_path = src_file.relative_to(src_path) # Cria o caminho de destino dest_file = dest_path / rel_path # Garante que a pasta de destino existe dest_file.parent.mkdir(parents=True, exist_ok=True) # Copia o ficheiro shutil.copy2(src_file, dest_file) print(f"Copiado: {rel_path}") def process_file(corrector, src_file, input_dir, output_dir): """Processa um único ficheiro""" try: # Calcula caminhos relativos rel_path = src_file.relative_to(input_dir) output_file = output_dir / rel_path.parent / f"corrigido_{rel_path.name}" # Garante que a pasta de destino existe output_file.parent.mkdir(parents=True, exist_ok=True) # Lê e corrige o texto texto = src_file.read_text(encoding="utf-8") texto_corrigido = corrector.correct_text(texto) # Salva o resultado output_file.write_text(texto_corrigido, encoding="utf-8") return True, str(rel_path) except Exception as e: return False, f"Erro ao processar {rel_path}: {str(e)}" def main(): # Definir diretórios src_dir = Path("/home/ealmeida/Scripts/youtube-transcript/transcricoes") input_dir = Path("/home/ealmeida/Scripts/SuperBot-KB/input") output_dir = Path("/home/ealmeida/Scripts/SuperBot-KB/corrected") # Copiar estrutura para input print("\nCopiando ficheiros para input...") copy_structure(src_dir, input_dir) # Listar todos os ficheiros .txt no input input_files = list(input_dir.rglob("*.txt")) if not input_files: print("Nenhum ficheiro .txt encontrado para processar") return print(f"\nProcessando {len(input_files)} ficheiros...") # Criar instância do corretor corrector = TextCorrector() # Processar ficheiros em paralelo with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor: # Criar lista de futures futures = [ executor.submit(process_file, corrector, f, input_dir, output_dir) for f in input_files ] # Processar resultados com barra de progresso for future in tqdm(concurrent.futures.as_completed(futures), total=len(input_files)): success, result = future.result() if success: print(f"✓ {result}") else: print(f"✗ {result}") print("\nProcessamento concluído!") if __name__ == "__main__": main()