import gradio as gr from transformers import pipeline import requests import time # For simulating intermediate steps # Load the sentiment analysis model classifier = pipeline('sentiment-analysis', model='krishnamishra8848/movie_sentiment_analysis') # Language detection function def detect_language(text): detect_url = "https://google-translator9.p.rapidapi.com/v2/detect" detect_payload = {"q": text} headers = { "x-rapidapi-key": "ef532cb7b6msh96f36c918327aacp171ce5jsn42c4de22fe5d", "x-rapidapi-host": "google-translator9.p.rapidapi.com", "Content-Type": "application/json" } response = requests.post(detect_url, json=detect_payload, headers=headers) if response.status_code == 200: detections = response.json().get('data', {}).get('detections', [[]])[0] if detections: return detections[0].get('language') return None # Translation function def translate_text(text, source_language, target_language="en"): translate_url = "https://google-translator9.p.rapidapi.com/v2" translate_payload = { "q": text, "source": source_language, "target": target_language, "format": "text" } headers = { "x-rapidapi-key": "ef532cb7b6msh96f36c918327aacp171ce5jsn42c4de22fe5d", "x-rapidapi-host": "google-translator9.p.rapidapi.com", "Content-Type": "application/json" } response = requests.post(translate_url, json=translate_payload, headers=headers) if response.status_code == 200: translations = response.json().get('data', {}).get('translations', [{}]) if translations: return translations[0].get('translatedText') return None # Main function for Gradio def analyze_sentiment_with_steps(text): # Step 1: Detecting Language status = "Detecting Language..." yield status detected_language = detect_language(text) if not detected_language: yield "Error: Could not detect the language." return status = f"Language Detected: {detected_language.upper()}" yield status # Step 2: Translating if necessary if detected_language != "en": status += "\nTranslating text to English..." yield status text = translate_text(text, detected_language) if not text: yield "Error: Could not translate the input text." return # Step 3: Sending to model status += "\nSending to Model..." yield status time.sleep(1) # Simulate processing time for better user experience # Step 4: Sentiment analysis result = classifier(text) label_mapping = {"LABEL_0": "negative", "LABEL_1": "positive"} sentiment = label_mapping[result[0]['label']] confidence = result[0]['score'] status += f"\nPrediction: {sentiment.capitalize()} (Confidence: {confidence:.2f})" yield status # Gradio interface interface = gr.Interface( fn=analyze_sentiment_with_steps, inputs=gr.Textbox( label="Enter Movie Review", placeholder="Type your review in any language...", lines=3 ), outputs=gr.Textbox(label="Prediction Steps"), live=True, title="Multilingual Movie Sentiment Analysis", description=( "This app analyzes movie reviews written in any language. " "It detects the language, translates it to English (if required), " "and predicts the sentiment (positive/negative)." ) ) # Launch Gradio app interface.launch(share=True)