|
|
|
|
|
import re, string |
|
|
import joblib |
|
|
import numpy as np |
|
|
import gradio as gr |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
model = joblib.load("svm_model.pkl") |
|
|
tfidf = joblib.load("tfidf_vectorizer.pkl") |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def preprocess(text): |
|
|
text = str(text).lower() |
|
|
text = re.sub(f"[{string.punctuation}]", "", text) |
|
|
text = re.sub(r"\d+", "", text) |
|
|
text = text.strip() |
|
|
return text |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def predict_sentiment(review): |
|
|
if not review: |
|
|
return "Error: No review provided", 0.0 |
|
|
cleaned = preprocess(review) |
|
|
vectorized = tfidf.transform([cleaned]) |
|
|
|
|
|
pred = model.predict(vectorized)[0] |
|
|
sentiment = "positive" if pred == 1 else "negative" |
|
|
|
|
|
confidence = model.decision_function(vectorized)[0] |
|
|
confidence = 1 / (1 + np.exp(-confidence)) |
|
|
|
|
|
return sentiment, round(float(confidence)*100, 2) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
iface = gr.Interface( |
|
|
fn=predict_sentiment, |
|
|
inputs=gr.Textbox(label="Write a review here...", lines=5, placeholder="Type your review..."), |
|
|
outputs=[ |
|
|
gr.Label(label="Predicted Sentiment"), |
|
|
gr.Number(label="Confidence (%)") |
|
|
], |
|
|
title="Amazon Review Sentiment Analysis", |
|
|
description="Enter an Amazon product review and get the predicted sentiment along with confidence score.", |
|
|
theme="default" |
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
iface.launch() |