File size: 3,394 Bytes
f9903ea
9739fd6
 
 
f9903ea
 
9739fd6
c70917b
9739fd6
3d6a74b
9739fd6
 
f9903ea
c70917b
bfc5779
f9903ea
bfc5779
 
 
f9903ea
bfc5779
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c70917b
 
 
 
 
 
 
3d6a74b
 
c70917b
 
9739fd6
 
 
 
bfc5779
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import streamlit as st
from transformers import pipeline, AutoModelForSequenceClassification, AutoTokenizer
import torch
import numpy as np

def main():
    # Load the spam detection pipeline
    spam_pipeline = pipeline("text-classification", model="cybersectony/phishing-email-detection-distilbert_v2.4.1")

    # Load the sentiment model and tokenizer
    sentiment_model = AutoModelForSequenceClassification.from_pretrained("ISOM5240GP4/email_sentiment", num_labels=2)
    tokenizer = AutoTokenizer.from_pretrained("distilbert-base-uncased")

    st.title("Email Analysis Tool")
    st.write("Enter an email body below or select a sample to analyze its spam status and sentiment.")

    # Initialize session state for the text area
    if "email_body" not in st.session_state:
        st.session_state.email_body = ""

    # Text area for email input
    email_body = st.text_area("Email Body", value=st.session_state.email_body, height=200, key="email_input")

    # Sample emails
    sample_spam = """
Subject: Urgent: Verify Your Account Now!
Dear Customer,
We have detected unusual activity on your account. To prevent suspension, please verify your login details immediately by clicking the link below:
[Click Here to Verify](http://totally-legit-site.com/verify)
Failure to verify within 24 hours will result in your account being locked. This is for your security.
Best regards,
The Security Team
    """

    sample_not_spam_positive = """
Subject: Great News About Your Project!
Hi Team,
I just wanted to let you know that the project is progressing wonderfully! Everyone’s efforts are paying off, and we’re ahead of schedule. Keep up the fantastic work!
Best,
Alex
    """

    sample_not_spam_negative = """
Subject: Issue with Recent Delivery
Dear Support,
I received my package today, but it was damaged, and two items were missing. This is really frustrating—please let me know how we can resolve this as soon as possible.
Thanks,
Sarah
    """

    # Buttons for sample emails (in columns for better layout)
    col1, col2, col3 = st.columns(3)
    with col1:
        if st.button("Spam Email"):
            st.session_state.email_body = sample_spam
            st.rerun()  # Rerun to update the text area
    with col2:
        if st.button("Not Spam, Positive"):
            st.session_state.email_body = sample_not_spam_positive
            st.rerun()
    with col3:
        if st.button("Not Spam, Negative"):
            st.session_state.email_body = sample_not_spam_negative
            st.rerun()

    # Button to trigger analysis
    if st.button("Analyze Email"):
        if email_body:
            # Step 1: Check if the email is spam
            spam_result = spam_pipeline(email_body)
            spam_label = spam_result[0]["label"]
            spam_confidence = spam_result[0]["score"]

            # Check if label is 'LABEL_1' for spam
            if spam_label == "LABEL_1":
                st.write(f"This is a spam email (Confidence: {spam_confidence:.2f}). No follow-up needed.")
            else:
                # Step 2: Analyze sentiment for non-spam emails
                inputs = tokenizer(email_body, padding=True, truncation=True, return_tensors='pt')
                outputs = sentiment_model(**inputs)
                predictions = torch.nn.functional.softmax(outputs.logits, dim=-1)
                predictions = predictions.cpu().detach