Files
scripts/kb-processor/src/correct_texts.py

106 lines
3.4 KiB
Python
Executable File

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