125 lines
4.0 KiB
Python
125 lines
4.0 KiB
Python
from app.email_identity_extraction_service import extract_email_identity
|
|
|
|
|
|
DIETIMPORT_EMAIL = """
|
|
Boa tarde,
|
|
|
|
Conseguiria enviar-me a fatura em formato digital, referente à nossa última encomenda?
|
|
|
|
Obrigado.
|
|
|
|
Com os melhores cumprimentos,
|
|
|
|
Filipe Delgado
|
|
|
|
Engenheiro Civil
|
|
|
|
Responsável
|
|
Departamento de Manutenção
|
|
|
|
Rua Dr. Costa Sacadura N.º4 1800-176 Lisboa
|
|
Telem: +351 96 873 88 56 (Chamada para Rede Móvel Nacional)
|
|
Tel: +351 21 159 01 95 (Chamada para Rede Fixa Nacional)
|
|
|
|
AVISO
|
|
Esta mensagem (incluindo quaisquer anexos) pode conter informação confidencial para uso exclusivo do destinatário. Se não for o destinatário pretendido não deverá usar, distribuir ou copiar este e-mail. Se recebeu esta mensagem por engano por favor informe o emissor e elimine-a imediatamente. As opiniões emitidas nesta mensagem não são necessariamente as da Dietimport S.A..
|
|
|
|
Obrigado.
|
|
"""
|
|
|
|
|
|
def test_regex_identity_ignores_valediction_as_person_name():
|
|
data = extract_email_identity(
|
|
DIETIMPORT_EMAIL,
|
|
email="filipedelgado@dietimport.pt",
|
|
use_llm=False,
|
|
)
|
|
assert data["person_name"] == "Filipe Delgado"
|
|
assert data["person_name"] != "Com os melhores cumprimentos,"
|
|
|
|
|
|
def test_regex_identity_keeps_company_name_not_full_disclaimer():
|
|
data = extract_email_identity(
|
|
DIETIMPORT_EMAIL,
|
|
email="filipedelgado@dietimport.pt",
|
|
use_llm=False,
|
|
)
|
|
assert data["company_mentions"] == ["Dietimport S.A"]
|
|
assert all("informação confidencial" not in company for company in data["company_mentions"])
|
|
assert all(len(company) < 80 for company in data["company_mentions"])
|
|
|
|
|
|
def test_regex_identity_address_stops_before_phone_labels():
|
|
data = extract_email_identity(
|
|
DIETIMPORT_EMAIL,
|
|
email="filipedelgado@dietimport.pt",
|
|
use_llm=False,
|
|
)
|
|
assert data["address"] == "Rua Dr. Costa Sacadura N.º4 1800-176 Lisboa"
|
|
assert "Telem" not in data["address"]
|
|
assert "+351 96 873 88 56" in data["phones"]
|
|
assert data["domain"] == "dietimport.pt"
|
|
|
|
|
|
def test_identity_cleanup_removes_legal_paragraph_mentions(monkeypatch):
|
|
from app.email_identity_extraction_service import merge_identity
|
|
|
|
regex_data = {
|
|
"person_name": "",
|
|
"company_mentions": [
|
|
"dos nesta comunicação estão incorporados num ficheiro cujo responsável é a SOPAC, S.A",
|
|
"obter a confirmação sobre se a SOPAC, S.A",
|
|
],
|
|
"address": "",
|
|
"phones": [],
|
|
"websites": [],
|
|
"email": "info@adp-fertilizantes.pt",
|
|
"domain": "adp-fertilizantes.pt",
|
|
"confidence": 0.9,
|
|
"evidence": [],
|
|
"method": "regex",
|
|
}
|
|
data = merge_identity(regex_data, None)
|
|
assert data["company_mentions"] == ["SOPAC, S.A"]
|
|
assert all("ficheiro" not in company for company in data["company_mentions"])
|
|
|
|
|
|
def test_identity_cleanup_removes_cjk_noise_from_person_name():
|
|
from app.email_identity_extraction_service import merge_identity
|
|
|
|
regex_data = {
|
|
"person_name": "Luis Roch游戏副本a",
|
|
"company_mentions": [],
|
|
"address": "",
|
|
"phones": [],
|
|
"websites": [],
|
|
"email": "luis.rocha@coimpack.pt",
|
|
"domain": "coimpack.pt",
|
|
"confidence": 0.85,
|
|
"evidence": [],
|
|
"method": "regex",
|
|
}
|
|
data = merge_identity(regex_data, None)
|
|
assert data["person_name"] == "Luis Rocha"
|
|
assert data["confidence"] <= 0.45
|
|
|
|
|
|
def test_identity_cleanup_rejects_mobile_footer_as_person_name():
|
|
from app.email_identity_extraction_service import merge_identity
|
|
|
|
regex_data = {
|
|
"person_name": "Enviado do meu Galaxy",
|
|
"company_mentions": [],
|
|
"address": "",
|
|
"phones": [],
|
|
"websites": [],
|
|
"email": "paulo.campelo@sapo.pt",
|
|
"domain": "sapo.pt",
|
|
"confidence": 0.7,
|
|
"evidence": [],
|
|
"method": "regex",
|
|
}
|
|
data = merge_identity(regex_data, None)
|
|
assert data["person_name"] == ""
|
|
assert data["confidence"] <= 0.45
|