Spaces:
Sleeping
Sleeping
import gradio as gr | |
import pytube | |
from transformers import pipeline | |
from textblob import TextBlob | |
# Initialize sentiment analysis pipeline | |
sentiment_analyzer = pipeline("sentiment-analysis") | |
def analyze_youtube_content(youtube_url, transcript_text=""): | |
"""Main function to analyze YouTube content""" | |
results = {} | |
# If URL is provided, get video info | |
if youtube_url: | |
try: | |
# Create a YouTube object | |
yt = pytube.YouTube(youtube_url) | |
results["video_info"] = { | |
"title": yt.title, | |
"status": "success" | |
} | |
except Exception as e: | |
results["video_info"] = { | |
"status": "error", | |
"message": str(e) | |
} | |
# If transcript is provided, analyze it | |
if transcript_text: | |
# Analyze sentiment with TextBlob | |
blob = TextBlob(transcript_text) | |
textblob_sentiment = blob.sentiment | |
# Analyze sentiment with Hugging Face | |
hf_result = sentiment_analyzer(transcript_text[:512])[0] | |
results["sentiment"] = { | |
"textblob": { | |
"polarity": round(textblob_sentiment.polarity, 2), | |
"assessment": "positive" if textblob_sentiment.polarity > 0 else "negative" if textblob_sentiment.polarity < 0 else "neutral" | |
}, | |
"huggingface": { | |
"label": hf_result["label"], | |
"score": round(hf_result["score"], 4) | |
} | |
} | |
# Identify key moments based on sentiment | |
sentences = [str(sentence) for sentence in blob.sentences] | |
key_moments = [] | |
for i, sentence in enumerate(sentences): | |
sentiment = TextBlob(sentence).sentiment.polarity | |
if abs(sentiment) > 0.5: | |
key_moments.append({ | |
"text": sentence, | |
"sentiment": sentiment | |
}) | |
results["key_moments"] = key_moments[:5] # Top 5 moments | |
return results | |
# Create Gradio interface | |
demo = gr.Interface( | |
fn=analyze_youtube_content, | |
inputs=[ | |
gr.Textbox(label="YouTube URL"), | |
gr.Textbox(label="Transcript Text", lines=10) | |
], | |
outputs=gr.JSON(label="Analysis Results"), | |
title="YouTube Viral Moment Analyzer", | |
description="Analyze viral moments from YouTube videos using ML models" | |
) | |
# Launch the app with MCP server enabled | |
if __name__ == "__main__": | |
demo.launch(server_name="0.0.0.0", share=True, mcp_server=True) |