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) |