106 lines
3.4 KiB
Python
Executable File
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()
|