Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import joblib | |
| # Load models and vectorizer from the models folder | |
| 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") | |
| # Model selection mapping | |
| models = { | |
| "Logistic Regression": logistic_model, | |
| "SVM": svm_model, | |
| "Random Forest": random_forest_model, | |
| "KNN": knn_model, | |
| } | |
| # Prediction function | |
| 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 | |
| # Preprocess the text | |
| text_vector = vectorizer.transform([review]) | |
| # Predict using the selected model | |
| model = models[model_name] | |
| prediction = model.predict(text_vector)[0] | |
| probabilities = model.predict_proba(text_vector)[0] if hasattr(model, "predict_proba") else None | |
| # Format the output | |
| sentiment = "Positive Feedback" if prediction == 1 else "Negative Feedback" | |
| probabilities_output = ( | |
| { | |
| "Positive": probabilities[1], # Raw probability (0.0 - 1.0) | |
| "Negative": probabilities[0], # Raw probability (0.0 - 1.0) | |
| } | |
| if probabilities is not None | |
| else "Probabilities not available" | |
| ) | |
| return sentiment, probabilities_output | |
| except Exception as e: | |
| # Log the error to the console for debugging | |
| print(f"Error in prediction: {e}") | |
| return f"Error: {str(e)}", None | |
| # Create Gradio Interface | |
| 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"), | |
| ] | |
| # Launch Gradio App | |
| gr.Interface( | |
| fn=predict_sentiment, | |
| inputs=inputs, | |
| outputs=outputs, | |
| title="Sentiment Analysis", | |
| description="Enter a review and select a model to predict sentiment.", | |
| ).launch() | |