Spaces:
Sleeping
Sleeping
| # ============================================================ | |
| # 🌍 Multi-Lingual Sentiment Analysis (English + Persian) | |
| # Simple & Clean Deployment (No SHAP Visualization) | |
| # ============================================================ | |
| import gradio as gr | |
| import joblib | |
| import numpy as np | |
| # ------------------------------------------------------------ | |
| # 1️⃣ Load Pretrained Models and Vectorizers | |
| # ------------------------------------------------------------ | |
| try: | |
| english_model = joblib.load("best_model_english.pkl") | |
| english_vectorizer = joblib.load("tfidf_vectorizer_english.pkl") | |
| persian_model = joblib.load("best_model_persian.pkl") | |
| persian_vectorizer = joblib.load("tfidf_vectorizer_persian.pkl") | |
| print("✅ Models and vectorizers loaded successfully!") | |
| except Exception as e: | |
| raise RuntimeError(f"❌ Error loading models: {e}") | |
| # Define class labels | |
| english_labels = ["Negative", "Neutral", "Positive"] | |
| persian_labels = ["منفی", "خنثی", "مثبت"] | |
| # ------------------------------------------------------------ | |
| # 2️⃣ Prediction Function (No SHAP) | |
| # ------------------------------------------------------------ | |
| def predict_sentiment(text, language): | |
| if not text.strip(): | |
| return "⚠️ Please enter a comment to analyze." | |
| try: | |
| if language == "English": | |
| model, vectorizer, labels = english_model, english_vectorizer, english_labels | |
| else: | |
| model, vectorizer, labels = persian_model, persian_vectorizer, persian_labels | |
| X_input = vectorizer.transform([text]) | |
| probs = model.predict_proba(X_input)[0] | |
| pred_idx = np.argmax(probs) | |
| pred_class = labels[pred_idx] | |
| conf = probs[pred_idx] | |
| # Output explanation | |
| explanation = f""" | |
| ### 🧠 Predicted Sentiment: **{pred_class}** | |
| **Confidence:** {conf:.2f} | |
| """ | |
| return explanation | |
| except Exception as e: | |
| return f"❌ Error during prediction: {str(e)}" | |
| # ------------------------------------------------------------ | |
| # 3️⃣ Gradio Interface | |
| # ------------------------------------------------------------ | |
| title = "🌐 Multi-Lingual Sentiment Analysis (English + Persian)" | |
| description = """ | |
| Select a language, type a comment, and get the predicted sentiment instantly. | |
| """ | |
| examples = [ | |
| ["I love this product! Highly recommend.", "English"], | |
| ["Bad experience ever, totally disappointed.", "English"], | |
| ["The service was okay, nothing special.", "English"], | |
| ["این محصول فوقالعاده است", "Persian"], | |
| ["تجربهی بدی بود، ناراضیام", "Persian"], | |
| ["کیفیتش متوسط بود", "Persian"] | |
| ] | |
| demo = gr.Interface( | |
| fn=predict_sentiment, | |
| inputs=[ | |
| gr.Textbox(lines=3, label="Enter your comment"), | |
| gr.Radio(["English", "Persian"], label="Choose Dataset/Language", value="English") | |
| ], | |
| outputs=gr.Markdown(label="Prediction"), | |
| title=title, | |
| description=description, | |
| examples=examples, | |
| theme="gradio/soft" | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() | |