|
import gradio as gr
|
|
import joblib
|
|
|
|
|
|
logistic_model = joblib.load("models/best_logistic_model.pkl")
|
|
svm_model = joblib.load("models/best_svc_model.pkl")
|
|
random_forest_model = joblib.load("models/best_rf_model.pkl")
|
|
knn_model = joblib.load("models/best_knn_model.pkl")
|
|
vectorizer = joblib.load("models/vectorizer.pkl")
|
|
|
|
|
|
models = {
|
|
"Logistic Regression": logistic_model,
|
|
"SVM": svm_model,
|
|
"Random Forest": random_forest_model,
|
|
"KNN": knn_model,
|
|
}
|
|
|
|
|
|
def predict_sentiment(review, model_name):
|
|
try:
|
|
if not review.strip():
|
|
return "Error: Review cannot be empty", None
|
|
|
|
if model_name not in models:
|
|
return "Error: Invalid model selected", None
|
|
|
|
|
|
text_vector = vectorizer.transform([review])
|
|
|
|
|
|
model = models[model_name]
|
|
prediction = model.predict(text_vector)[0]
|
|
probabilities = model.predict_proba(text_vector)[0] if hasattr(model, "predict_proba") else None
|
|
|
|
|
|
sentiment = "Positive Feedback" if prediction == 1 else "Negative Feedback"
|
|
probabilities_output = (
|
|
{
|
|
"Positive": probabilities[1],
|
|
"Negative": probabilities[0],
|
|
}
|
|
if probabilities is not None
|
|
else "Probabilities not available"
|
|
)
|
|
|
|
return sentiment, probabilities_output
|
|
except Exception as e:
|
|
|
|
print(f"Error in prediction: {e}")
|
|
return f"Error: {str(e)}", None
|
|
|
|
|
|
inputs = [
|
|
gr.Textbox(label="Review Comment", placeholder="Enter your review here..."),
|
|
gr.Dropdown(choices=["Logistic Regression", "SVM", "Random Forest", "KNN"], label="Model"),
|
|
]
|
|
|
|
outputs = [
|
|
gr.Textbox(label="Predicted Sentiment Class"),
|
|
gr.Label(label="Predicted Probability"),
|
|
]
|
|
|
|
|
|
gr.Interface(
|
|
fn=predict_sentiment,
|
|
inputs=inputs,
|
|
outputs=outputs,
|
|
title="Sentiment Analysis",
|
|
description="Enter a review and select a model to predict sentiment.",
|
|
).launch()
|
|
|