96 lines
3.1 KiB
Python
Executable File
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()
|