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
def process_uploaded_file(file):
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": "..."}

def process_raw_text(text):
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": "..."}