Files
scripts/kb-processor/src/process_transcripts.py
T

96 lines
3.1 KiB
Python
Executable File

#!/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()