Soundaryasos commited on
Commit
7129e9c
·
verified ·
1 Parent(s): bf95b1b

Update App.py

Browse files
Files changed (1) hide show
  1. App.py +57 -56
App.py CHANGED
@@ -1,78 +1,79 @@
 
1
  import streamlit as st
2
  import praw
3
  import googleapiclient.discovery
4
- import pandas as pd
5
  import joblib
 
 
 
6
  from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
7
  from transformers import pipeline
8
 
9
- # Load pre-trained regression model (if available)
10
- try:
11
- model = joblib.load("sentiment_regression.pkl")
12
- except:
13
- model = None
14
 
15
- # Reddit Authentication
16
  def authenticate_reddit():
17
  return praw.Reddit(
18
- client_id=st.secrets["REDDIT_CLIENT_ID"],
19
- client_secret=st.secrets["REDDIT_CLIENT_SECRET"],
20
- user_agent=st.secrets["REDDIT_USER_AGENT"]
21
  )
22
 
23
- # YouTube Authentication
24
  def authenticate_youtube():
25
- return googleapiclient.discovery.build("youtube", "v3", developerKey=st.secrets["YOUTUBE_API_KEY"])
26
 
27
- # Sentiment Analysis Functions
28
- def vader_sentiment(text):
29
- analyzer = SentimentIntensityAnalyzer()
30
- return analyzer.polarity_scores(text)["compound"]
31
 
32
- def bert_sentiment(text):
33
- sentiment_pipeline = pipeline("sentiment-analysis")
34
- return sentiment_pipeline(text)[0]['label']
35
 
36
- def regression_sentiment(text):
37
- if model:
38
- return model.predict([text])[0]
39
- return "Model not trained yet"
40
 
41
- # Fetch Reddit Data
42
- def get_reddit_data(keyword):
43
- reddit = authenticate_reddit()
44
- posts = []
45
- for submission in reddit.subreddit("all").search(keyword, limit=10):
46
- posts.append(submission.title)
47
- return posts
48
 
49
- # Fetch YouTube Data
50
- def get_youtube_data(keyword):
51
- youtube = authenticate_youtube()
52
- request = youtube.search().list(q=keyword, part="snippet", maxResults=10)
53
- response = request.execute()
54
- return [item["snippet"]["title"] for item in response.get("items", [])]
55
 
56
- # Streamlit UI
57
- st.title("Sentiment Analysis App")
58
- keyword = st.text_input("Enter a keyword to analyze:")
 
 
 
 
 
 
 
 
 
59
 
60
- if keyword:
61
- reddit_data = get_reddit_data(keyword)
62
- youtube_data = get_youtube_data(keyword)
63
 
64
- st.subheader("Reddit Sentiment")
65
- for post in reddit_data:
66
- st.write(f"🔹 {post}")
67
- st.write(f"VADER Sentiment: {vader_sentiment(post)}")
68
- st.write(f"BERT Sentiment: {bert_sentiment(post)}")
69
- st.write(f"Regression Sentiment: {regression_sentiment(post)}")
70
- st.write("---")
71
 
72
- st.subheader("YouTube Sentiment")
73
- for title in youtube_data:
74
- st.write(f"📺 {title}")
75
- st.write(f"VADER Sentiment: {vader_sentiment(title)}")
76
- st.write(f"BERT Sentiment: {bert_sentiment(title)}")
77
- st.write(f"Regression Sentiment: {regression_sentiment(title)}")
78
- st.write("---")
 
 
 
 
 
1
+ import os
2
  import streamlit as st
3
  import praw
4
  import googleapiclient.discovery
 
5
  import joblib
6
+ import numpy as np
7
+ from sklearn.feature_extraction.text import TfidfVectorizer
8
+ from sklearn.linear_model import LinearRegression
9
  from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
10
  from transformers import pipeline
11
 
12
+ # Load environment variables
13
+ REDDIT_CLIENT_ID = os.getenv("REDDIT_CLIENT_ID")
14
+ REDDIT_CLIENT_SECRET = os.getenv("REDDIT_CLIENT_SECRET")
15
+ REDDIT_USER_AGENT = os.getenv("REDDIT_USER_AGENT")
16
+ YOUTUBE_API_KEY = os.getenv("YOUTUBE_API_KEY")
17
 
18
+ # Authenticate Reddit
19
  def authenticate_reddit():
20
  return praw.Reddit(
21
+ client_id=REDDIT_CLIENT_ID,
22
+ client_secret=REDDIT_CLIENT_SECRET,
23
+ user_agent=REDDIT_USER_AGENT
24
  )
25
 
26
+ # Authenticate YouTube
27
  def authenticate_youtube():
28
+ return googleapiclient.discovery.build("youtube", "v3", developerKey=YOUTUBE_API_KEY)
29
 
30
+ # VADER Sentiment Analysis
31
+ vader = SentimentIntensityAnalyzer()
 
 
32
 
33
+ def get_vader_sentiment(text):
34
+ scores = vader.polarity_scores(text)
35
+ return scores['compound'] # Ranges from -1 (negative) to +1 (positive)
36
 
37
+ # BERT Sentiment Analysis
38
+ bert_sentiment = pipeline("sentiment-analysis")
 
 
39
 
40
+ def get_bert_sentiment(text):
41
+ result = bert_sentiment(text)[0]
42
+ return result['label'], result['score']
 
 
 
 
43
 
44
+ # Regression Sentiment Analysis
45
+ vectorizer = TfidfVectorizer()
46
+ regressor = LinearRegression()
 
 
 
47
 
48
+ def train_regression_model():
49
+ sample_data = [
50
+ ("I love this!", 1.0),
51
+ ("This is amazing", 0.9),
52
+ ("It's okay", 0.5),
53
+ ("Not great", 0.3),
54
+ ("I hate this", 0.1)
55
+ ]
56
+ texts, scores = zip(*sample_data)
57
+ X = vectorizer.fit_transform(texts)
58
+ regressor.fit(X, scores)
59
+ joblib.dump((vectorizer, regressor), "sentiment_model.pkl")
60
 
61
+ train_regression_model()
 
 
62
 
63
+ # Predict with Regression Model
64
+ def get_regression_sentiment(text):
65
+ vectorizer, regressor = joblib.load("sentiment_model.pkl")
66
+ X = vectorizer.transform([text])
67
+ return regressor.predict(X)[0]
 
 
68
 
69
+ # Streamlit UI
70
+ st.title("Sentiment Analysis App")
71
+ user_input = st.text_area("Enter text for sentiment analysis")
72
+ if st.button("Analyze"):
73
+ vader_score = get_vader_sentiment(user_input)
74
+ bert_label, bert_score = get_bert_sentiment(user_input)
75
+ regression_score = get_regression_sentiment(user_input)
76
+
77
+ st.write(f"**VADER Sentiment Score:** {vader_score}")
78
+ st.write(f"**BERT Sentiment:** {bert_label} ({bert_score:.2f})")
79
+ st.write(f"**Regression Sentiment Score:** {regression_score:.2f}")