aaryan24 commited on
Commit
fa21d68
Β·
verified Β·
1 Parent(s): 14806dc

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +117 -0
app.py ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ import numpy as np
4
+ import torch
5
+ import ast
6
+ from sentence_transformers import SentenceTransformer
7
+ from sklearn.metrics.pairwise import cosine_similarity
8
+ import random
9
+ import asyncio
10
+ import os
11
+ os.environ["STREAMLIT_WATCHDOG"] = "0"
12
+
13
+ try:
14
+ asyncio.get_running_loop()
15
+ except RuntimeError:
16
+ asyncio.set_event_loop(asyncio.new_event_loop())
17
+
18
+
19
+ # Load pre-trained model
20
+ model = SentenceTransformer('all-MiniLM-L6-v2')
21
+
22
+ def get_embedding(text):
23
+ return model.encode(text, convert_to_numpy=True)
24
+
25
+ # Load datasets
26
+ tweets_df = pd.read_csv("dataset_with_embeddings.csv") # Contains 'tweet_id' and 'sentence_embedding'
27
+ original_tweets_df = pd.read_csv("dataset_with_actual_text.csv") # Contains 'tweet_id' and 'original_text'
28
+
29
+ # Convert embeddings from string to list
30
+
31
+ def parse_embedding(embedding_str):
32
+ try:
33
+ return ast.literal_eval(embedding_str)
34
+ except (ValueError, SyntaxError):
35
+ return None # Handle errors gracefully
36
+
37
+
38
+ tweets_df['sentence_embedding'] = tweets_df['sentence_embedding'].astype(str).apply(parse_embedding)
39
+
40
+ # Simulated user database
41
+ users = {"testuser": "password123"} # Dictionary to store usernames and passwords
42
+
43
+ # Session state for login
44
+ if "logged_in" not in st.session_state:
45
+ st.session_state["logged_in"] = False
46
+ st.session_state["username"] = ""
47
+ st.session_state["liked_tweets"] = []
48
+ st.session_state["posted_tweets"] = []
49
+
50
+ # Login Page
51
+ if not st.session_state["logged_in"]:
52
+ st.title("Tweet Recommendation System")
53
+ username = st.text_input("Username")
54
+ password = st.text_input("Password", type="password")
55
+ if st.button("Login"):
56
+ if username in users and users[username] == password:
57
+ st.session_state["logged_in"] = True
58
+ st.session_state["username"] = username
59
+ st.success("Login successful!")
60
+ st.experimental_rerun()
61
+ else:
62
+ st.error("Invalid credentials")
63
+ else:
64
+ st.title(f"Welcome, {st.session_state['username']}!")
65
+
66
+ # Randomly select 10 tweets for the Explore Page
67
+ random_tweets = original_tweets_df.sample(10)
68
+
69
+ st.subheader("Explore Tweets")
70
+ for _, row in random_tweets.iterrows():
71
+ tweet_id = row['tweet_id']
72
+ text = row['original_text']
73
+
74
+ with st.container():
75
+ st.write(f"*Tweet:* {text}")
76
+ if st.button(f"Like ❀ {tweet_id}", key=f"like_{tweet_id}"):
77
+ if tweet_id not in st.session_state["liked_tweets"]:
78
+ st.session_state["liked_tweets"].append(tweet_id)
79
+ st.success("Tweet Liked!")
80
+
81
+ # Posting new tweets
82
+ st.subheader("Post a Tweet")
83
+ new_tweet = st.text_area("Write your tweet here:")
84
+ if st.button("Post Tweet"):
85
+ if new_tweet:
86
+ new_tweet_embedding = get_embedding(new_tweet)
87
+ st.session_state["posted_tweets"].append(new_tweet_embedding)
88
+ st.success("Tweet posted successfully!")
89
+
90
+ # Recommendation Logic
91
+ if st.session_state["liked_tweets"] or st.session_state["posted_tweets"]:
92
+ st.subheader("Recommended Tweets for You")
93
+
94
+ # Get embeddings of liked tweets
95
+ liked_embeddings = [tweets_df[tweets_df['tweet_id'] == tid]['sentence_embedding'].values[0]
96
+ for tid in st.session_state["liked_tweets"]]
97
+
98
+ # Get embeddings of posted tweets
99
+ posted_embeddings = st.session_state["posted_tweets"]
100
+
101
+ # Combine all embeddings
102
+ user_profile_embedding = np.mean(liked_embeddings + posted_embeddings, axis=0)
103
+
104
+ # Compute cosine similarity
105
+ all_embeddings = np.vstack(tweets_df['sentence_embedding'].values)
106
+ similarities = cosine_similarity([user_profile_embedding], all_embeddings)[0]
107
+
108
+ # Get top 10 similar tweets
109
+ top_indices = np.argsort(similarities)[-10:][::-1]
110
+ recommended_tweets = tweets_df.iloc[top_indices]
111
+
112
+ # Display recommended tweets
113
+ for _, row in recommended_tweets.iterrows():
114
+ tweet_id = row['tweet_id']
115
+ text = original_tweets_df[original_tweets_df['tweet_id'] == tweet_id]['original_text'].values[0]
116
+ with st.container():
117
+ st.write(f"*Recommended Tweet:* {text}")