app.pipeline
Módulo pipeline
Responsável por orquestrar o fluxo completo do processamento dos emails, incluindo extração de texto, pré-processamento, hashing para cache, classificação via IA e salvamento dos resultados em cache.
1""" 2Módulo pipeline 3 4Responsável por orquestrar o fluxo completo do processamento dos emails, 5incluindo extração de texto, pré-processamento, hashing para cache, 6classificação via IA e salvamento dos resultados em cache. 7""" 8 9from app.services.file_service import save_file, extract_file_content 10from app.services.nlp_service import preprocess_text, get_text_hash 11from app.services.ai_service import classify_and_suggest 12from app.services.cache import cache 13from app.utils import delete_file 14import logging 15 16logging.basicConfig(level=logging.INFO) 17 18def process_uploaded_file(file): 19 """ 20 Processa um arquivo de email (TXT ou PDF) carregado pelo usuário. 21 22 - Salva o arquivo no sistema de arquivos. 23 - Extrai o texto do arquivo. 24 - Pré-processa o texto (remove stopwords, normaliza). 25 - Gera um hash do texto para verificar cache. 26 - Caso já exista, reutiliza classificação anterior. 27 - Caso não exista, envia para IA classificar e armazena o resultado no cache. 28 - Exclui o arquivo salvo após o processamento. 29 30 Args: 31 file: Um objeto de arquivo recebido via upload (Flask `FileStorage`). 32 33 Returns: 34 dict: Um dicionário com a classificação e resposta sugerida. 35 Exemplo: {"categoria": "Produtivo", "resposta_sugerida": "..."} 36 """ 37 filename, filepath = save_file(file) 38 try: 39 text_content = extract_file_content(filename, filepath) 40 cleaned_text = preprocess_text(text_content) 41 text_hash = get_text_hash(cleaned_text) 42 43 cached_result = cache.get(text_hash) 44 if cached_result: 45 logging.info("Cache hit - reutilizando classificação anterior.") 46 return cached_result 47 48 classification = classify_and_suggest(cleaned_text) 49 cache.set(text_hash, classification) 50 finally: 51 delete_file(filepath) 52 53 return classification 54 55def process_raw_text(text): 56 """ 57 Processa um texto bruto inserido diretamente pelo usuário. 58 59 - Pré-processa o texto (remove stopwords, normaliza). 60 - Gera um hash do texto para verificar cache. 61 - Caso já exista, reutiliza classificação anterior. 62 - Caso não exista, envia para IA classificar e armazena o resultado no cache. 63 64 Args: 65 text (str): Texto do email fornecido pelo usuário. 66 67 Returns: 68 dict: Um dicionário com a classificação e resposta sugerida. 69 Exemplo: {"categoria": "Produtivo", "resposta_sugerida": "..."} 70 """ 71 cleaned_text = preprocess_text(text) 72 text_hash = get_text_hash(cleaned_text) 73 74 cached_result = cache.get(text_hash) 75 if cached_result: 76 logging.info("Cache hit (text) - reutilizando classificação anterior.") 77 return cached_result 78 79 classification = classify_and_suggest(cleaned_text) 80 cache.set(text_hash, classification) 81 return classification
19def process_uploaded_file(file): 20 """ 21 Processa um arquivo de email (TXT ou PDF) carregado pelo usuário. 22 23 - Salva o arquivo no sistema de arquivos. 24 - Extrai o texto do arquivo. 25 - Pré-processa o texto (remove stopwords, normaliza). 26 - Gera um hash do texto para verificar cache. 27 - Caso já exista, reutiliza classificação anterior. 28 - Caso não exista, envia para IA classificar e armazena o resultado no cache. 29 - Exclui o arquivo salvo após o processamento. 30 31 Args: 32 file: Um objeto de arquivo recebido via upload (Flask `FileStorage`). 33 34 Returns: 35 dict: Um dicionário com a classificação e resposta sugerida. 36 Exemplo: {"categoria": "Produtivo", "resposta_sugerida": "..."} 37 """ 38 filename, filepath = save_file(file) 39 try: 40 text_content = extract_file_content(filename, filepath) 41 cleaned_text = preprocess_text(text_content) 42 text_hash = get_text_hash(cleaned_text) 43 44 cached_result = cache.get(text_hash) 45 if cached_result: 46 logging.info("Cache hit - reutilizando classificação anterior.") 47 return cached_result 48 49 classification = classify_and_suggest(cleaned_text) 50 cache.set(text_hash, classification) 51 finally: 52 delete_file(filepath) 53 54 return classification
Processa um arquivo de email (TXT ou PDF) carregado pelo usuário.
- Salva o arquivo no sistema de arquivos.
- Extrai o texto do arquivo.
- Pré-processa o texto (remove stopwords, normaliza).
- Gera um hash do texto para verificar cache.
- Caso já exista, reutiliza classificação anterior.
- Caso não exista, envia para IA classificar e armazena o resultado no cache.
- Exclui o arquivo salvo após o processamento.
Args:
file: Um objeto de arquivo recebido via upload (Flask FileStorage
).
Returns: dict: Um dicionário com a classificação e resposta sugerida. Exemplo: {"categoria": "Produtivo", "resposta_sugerida": "..."}
56def process_raw_text(text): 57 """ 58 Processa um texto bruto inserido diretamente pelo usuário. 59 60 - Pré-processa o texto (remove stopwords, normaliza). 61 - Gera um hash do texto para verificar cache. 62 - Caso já exista, reutiliza classificação anterior. 63 - Caso não exista, envia para IA classificar e armazena o resultado no cache. 64 65 Args: 66 text (str): Texto do email fornecido pelo usuário. 67 68 Returns: 69 dict: Um dicionário com a classificação e resposta sugerida. 70 Exemplo: {"categoria": "Produtivo", "resposta_sugerida": "..."} 71 """ 72 cleaned_text = preprocess_text(text) 73 text_hash = get_text_hash(cleaned_text) 74 75 cached_result = cache.get(text_hash) 76 if cached_result: 77 logging.info("Cache hit (text) - reutilizando classificação anterior.") 78 return cached_result 79 80 classification = classify_and_suggest(cleaned_text) 81 cache.set(text_hash, classification) 82 return classification
Processa um texto bruto inserido diretamente pelo usuário.
- Pré-processa o texto (remove stopwords, normaliza).
- Gera um hash do texto para verificar cache.
- Caso já exista, reutiliza classificação anterior.
- Caso não exista, envia para IA classificar e armazena o resultado no cache.
Args: text (str): Texto do email fornecido pelo usuário.
Returns: dict: Um dicionário com a classificação e resposta sugerida. Exemplo: {"categoria": "Produtivo", "resposta_sugerida": "..."}