IshmamF commited on
Commit
d0d4d4e
1 Parent(s): b3ea381

Update song_matching.py

Browse files
Files changed (1) hide show
  1. song_matching.py +19 -20
song_matching.py CHANGED
@@ -11,29 +11,28 @@ class SongMatcher:
11
  self.songs_df = pd.read_csv(songs_data_file)
12
  self.sim_model = SentenceTransformer(model_name)
13
 
14
- def match_songs_with_sentiment(self, user_sentiment_label, user_sentiment_score, user_input, score_range=0.00625):
15
- """
16
- Matches songs from the dataset with the user's sentiment.
17
- :param user_sentiment_label: The sentiment label of the user input
18
- :param user_sentiment_score: The sentiment score of the user input
19
- :param user_input: Text input from the user
20
- :param score_range: Range for filtering songs based on sentiment score
21
- :return: DataFrame of top 5 matched songs
22
- """
23
  # Filter songs with the same sentiment label
24
- matched_songs = self.songs_df[self.songs_df['sentiment'] == user_sentiment_label]
25
-
26
  # Calculate the score range
27
  score_min = max(0, user_sentiment_score - score_range)
28
  score_max = min(1, user_sentiment_score + score_range)
29
-
30
  # Further filter songs whose scores fall within the specified range
31
  matched_songs = matched_songs[(matched_songs['score'] >= score_min) & (matched_songs['score'] <= score_max)]
32
-
33
- # Compute similarity between user input and song lyrics
34
- input_vector = self.sim_model.encode(user_input)
35
- matched_songs['similarity'] = matched_songs['seq'].apply(lambda x: util.pytorch_cos_sim(self.sim_model.encode(x), input_vector))
36
-
37
- # Select the top five songs based on similarity and return
38
- top_5 = matched_songs.nlargest(5, 'similarity')
39
- return top_5[['song', 'artist', 'seq', 'similarity', 'sentiment', 'score']]
 
 
 
 
 
 
 
11
  self.songs_df = pd.read_csv(songs_data_file)
12
  self.sim_model = SentenceTransformer(model_name)
13
 
14
+ def match_songs_with_sentiment(user_sentiment_label, user_sentiment_score,inputVector, score_range,songs_df):
15
+
 
 
 
 
 
 
 
16
  # Filter songs with the same sentiment label
17
+ matched_songs = songs_df[songs_df['sentiment'] == user_sentiment_label]
18
+
19
  # Calculate the score range
20
  score_min = max(0, user_sentiment_score - score_range)
21
  score_max = min(1, user_sentiment_score + score_range)
22
+
23
  # Further filter songs whose scores fall within the specified range
24
  matched_songs = matched_songs[(matched_songs['score'] >= score_min) & (matched_songs['score'] <= score_max)]
25
+
26
+ # Shuffle the matched songs to get a random order
27
+ matched_songs = matched_songs.sample(frac=1).reset_index(drop=True)
28
+
29
+ matched_songs['similarity'] = matched_songs['seq'].apply(lambda x: util.pytorch_cos_sim(sim_model.encode(x), inputVector))
30
+
31
+ top_5 = matched_songs['similarity'].sort_values(ascending=False).head(5)
32
+
33
+ # Sort the songs by how close their score is to the user's sentiment score
34
+ # matched_songs['score_diff'] = abs(matched_songs['score'] - user_sentiment_score)
35
+ # matched_songs = matched_songs.sort_values(by='score_diff')
36
+
37
+ # Select the top five songs and return
38
+ return matched_songs.loc[top_5.index, ['song','artist','seq','similarity','sentiment','score']]