#1. Importing Lib import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score import gradio as gr #2. Data Preprocessing df=pd.read_csv("mail_data.csv") df.loc[df["Category"]=="spam","Category",]=0 df.loc[df["Category"]=="ham","Category",]=1 # Spliting Data into xand y x=df["Message"] y=df["Category"] #3. Modeling Part x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=0) # Features extractions using TfidfVectorizer feature_extraction=TfidfVectorizer(min_df=1,stop_words="english",lowercase=True) x_train_features = feature_extraction.fit_transform(x_train) x_test_features = feature_extraction.transform(x_test) y_train = y_train.astype("int") y_test = y_test.astype("int") model=LogisticRegression() # Trains the model only at Train data features model.fit(x_train_features,y_train) x_predict=model.predict(x_train_features) x_accuracy=accuracy_score(x_predict,y_train) y_predict=model.predict(x_test_features) y_accuracy=accuracy_score(y_predict,y_test) #4. UI For Model # Function to predict whether the email is spam or ham def classify_email(email_text): # Transform the input email text using the same vectorizer used during training input_data_features = feature_extraction.transform([email_text]) # Predict using the trained model prediction = model.predict(input_data_features) # Return the result based on the prediction if prediction[0] == 0: return "Your email is Spam" else: return "Your email is Ham" # Create a Gradio interface for user input interface = gr.Interface( fn=classify_email, # Function to be called when user interacts inputs=gr.Textbox(label="Enter your email text here", placeholder="Type your email...", lines=5), outputs=gr.Textbox(label="Prediction"), live=True # Live prediction update ) # Launch the interface interface.launch()