krishnamishra8848's picture
Update app.py
7384913 verified
raw
history blame
3.51 kB
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)