Spaces:
Running
Running
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 |