init: scripts diversos (crawlers, conversores, scrapers)
This commit is contained in:
105
kb-processor/src/correct_texts.py
Executable file
105
kb-processor/src/correct_texts.py
Executable file
@@ -0,0 +1,105 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user