Classificador_email / processador_email.py
Olegario02's picture
Upload 5 files
2176c28 verified
import os
import re
from typing import List
# Para PDF
try:
import PyPDF2
except ImportError:
PyPDF2 = None
# Para NLP com spaCy
try:
import spacy
nlp = spacy.load('pt_core_news_sm')
except ImportError:
nlp = None
except OSError:
import spacy
spacy.cli.download('pt_core_news_sm')
nlp = spacy.load('pt_core_news_sm')
def ler_arquivo_email(caminho: str) -> str:
"""Lê o conteúdo de um arquivo .txt ou .pdf e retorna o texto extraído."""
ext = os.path.splitext(caminho)[1].lower()
if ext == '.txt':
with open(caminho, 'r', encoding='utf-8') as f:
return f.read()
elif ext == '.pdf' and PyPDF2:
texto = ''
with open(caminho, 'rb') as f:
reader = PyPDF2.PdfReader(f)
for page in reader.pages:
texto += page.extract_text() or ''
return texto
else:
raise ValueError('Formato de arquivo não suportado ou biblioteca PyPDF2 não instalada.')
def preprocessar_texto(texto: str) -> List[str]:
"""Remove stopwords e aplica lematização usando spaCy para português."""
if not nlp:
raise ImportError('spaCy ou modelo pt_core_news_sm não instalado.')
doc = nlp(texto)
tokens_proc = [token.lemma_ for token in doc if not token.is_stop and not token.is_punct and not token.is_space]
return tokens_proc
if __name__ == '__main__':
caminho = input('Digite o caminho do arquivo (.txt ou .pdf): ')
texto = ler_arquivo_email(caminho)
print('Texto extraído:')
print(texto[:500], '...')
tokens = preprocessar_texto(texto)
print('\nTokens após pré-processamento:')
print(tokens[:50], '...')