Download app.py from Badrdeen/YT-agent-analyzer: direct link, hf CLI and curl.
- Browser
- Download file 2.83 kB
-
https://huggingface.co/Badrdeen/YT-agent-analyzer/resolve/main/app.py
- Command line
-
hf download hf://Badrdeen/YT-agent-analyzer/app.py
-
curl -L -o app.py https://huggingface.co/Badrdeen/YT-agent-analyzer/resolve/main/app.py
2.83 kB
| import gradio as gr | |
| import pytube | |
| from transformers import pipeline | |
| import os | |
| 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 | |
| with gr.Blocks(title="YouTube Viral Moment Analyzer") as demo: | |
| gr.Markdown("# YouTube Viral Moment Analyzer") | |
| with gr.Row(): | |
| youtube_url = gr.Textbox(label="YouTube URL") | |
| with gr.Row(): | |
| transcript_text = gr.Textbox(label="Transcript Text", lines=10) | |
| analyze_button = gr.Button("Analyze Content") | |
| output = gr.JSON(label="Analysis Results") | |
| analyze_button.click( | |
| fn=analyze_youtube_content, | |
| inputs=[youtube_url, transcript_text], | |
| outputs=output, | |
| api_name="analyze_content" | |
| ) | |
| # Launch the app with server name and port for proper deployment | |
| if __name__ == "__main__": | |
| demo.launch(server_name="0.0.0.0", server_port=7860) |