Natural Language Processing

Using the data gathered from the Spotify API, we now want to extract and process the lyrics for each song. This is accomplished through scraping textual information, namely lyrical data, from the Genius Lyrics website. Following extraction, the lyrics are thoroughly processed and cleaned before undergoing sentiment analysis.

Scraping the Web

To get started, the script below imports lyricsgenius, a fundamental package libary allowing for web scraping of the Genius Lyrics website to retrieve the lyrics of any given song. Through the initialization of the genius variable, one can access the Genius API and retrieve the lyrics of any given song, such as “Too Many Nights” by Metro Boomin.

import lyricsgenius

genius = lyricsgenius.Genius("epFCxujgBe-Y6WrkZedI8kerKxiCpR6Rh0DAHYNlKDf9B4H1nXTdZIkj7krNUHVV")
song = genius.search_song("Too Many Nights", "Metro Boomin")
Searching for "Too Many Nights" by Metro Boomin...
Done.

First, we define a function that retrieves the lyrics for any song and artist from the Genius database. As shown below, it first searches for the track using the provided name and artist and then extracts the lyrics from the search results.

def get_song_lyrics(song_name, song_artist):
    song_genius = genius.search_song(song_name, song_artist)
    song_lyrics = song_genius.lyrics.partition("Lyrics")[2]
    # Remove any numbers followed by 'Embed'
    song_lyrics = re.sub(r"[\[].*?[\]]|\d+Embed", "", song_lyrics)
    # Remove text between square brackets
    song_lyrics = re.sub(r"(\-[A-Za-z]+\-)", "", song_lyrics)
    song_lyrics = re.sub(r'\d+', '', song_lyrics)

    return song_lyrics

Pre-Processing Text Data

Using the genius package, we define a function to fetch the lyrics of a song given the track name and artist. Once retrieved, the next step is to pre-process the textual data. This involves a cleansing process to eliminate profanity and patterns that may hinder the overall readability. The Python script contains the following steps:

  1. Language Detection
  2. Expanding Contractions
  3. Converting Text to Lowercase
  4. Spell Checking + Censoring
  5. Removing Punctuations
  6. Tokenization

The function detect_and_translate below is designed to identify and translate text into a specified language, specifically English. It first checks the language of the original text and compares it to the target language. If the detected language differs from the target language, the function utilizes GoogleTranslator to translate the input text into the target language (English).

# Function to detect and translate text
def detect_and_translate(track_lyrics, target_lang='en'):
    if detect(track_lyrics) == target_lang:
        return track_lyrics
    translator = GoogleTranslator(source='auto', target=target_lang)
    return translator.translate(track_lyrics)

We also develop various functions to support the preprocessing of textual data, streamlining the process and improving the accuracy of the final output. Among these functions are a method for removing punctuation from a given string of lyrics and a spell-checker that automatically finds and corrects any spelling errors.

def remove_punctuation(text):
    no_punct = ""
    for char in text:
        if char not in string.punctuation:
            no_punct = no_punct + char
    return no_punct  # return unpunctuated string
# Spell Check + Censor
spell = SpellChecker()

def spell_check(word_list_str):
    word_corrected_list = []
    for word in word_list_str.split():
        word_corrected = spell.correction(word)
        if word_corrected is not None:
            word_corrected_list.append(word_corrected)
        else:
            word_corrected_list.append(word)
    return word_corrected_list

The clean_song_lyrics function is designed to simplify the processing of lyrics for a specific song and artist. The function extracts the lyrics from the Genius database and performs a series of modifications, including expanding contractions, removing repetitive phrases, and converting the text to lowercase. It also ensures that the spelling is correct and eliminates any profanity. The end result is a cleaned set of lyrics, tokenized and encoded as a list of words.

def clean_song_lyrics(song_name, artist_name):
    genius_lyrics = get_song_lyrics(song_name, artist_name)
    lyrics_en = detect_and_translate(genius_lyrics, "en")
    
    no_contract = [contractions.fix(word) for word in lyrics_en.split()]
    no_contract_str = " ".join(no_contract).lower()  # lowercase
    no_contract_str = re.sub(r"nana|lala", "", no_contract_str)

    corrected = spell_check(no_contract_str) # <5> # Spell Check + Censor
    censored = profanity.censor(" ".join(corrected), censor_char="")
    no_punct = remove_punctuation(censored) # <6> # Remove Punctuation
    
    tokenized = word_tokenize(no_punct)  # Tokenize
    strencode = [i.encode("ascii", "ignore") for i in tokenized]  # Encode() method
    return [i.decode() for i in strencode]  # Decode() method

Removing Stop Words

We employ the Natural Language Toolkit (NLTK) library and its WordNetLemmatizer tool to filter out stopwords. By removing frequently used words like “the,” “and,” or “of,” the resulting text becomes more concise, enabling a more thorough examination of the lyrics and their underlying message.

def remove_stopwords_lyrics(clean_lyrics_decode):
    stopword = stopwords.words("english")
    stopword.extend(["yeah", "nanana", "nana", "oh", "la"])
    return [word for word in clean_lyrics_decode if word not in stopword]

Lemmatization

Next, we define a function to perform lemmatization on a set of words using the WordNetLemmatizer class from the NLTK library. Lemmatization helps to standardize words and reduce their complexity by reducing words to their root or base form. Our function specifically targets verbs and transforms different variations of the same verb into its most basic form.

from nltk.corpus import stopwords, wordnet

def get_wordnet_pos(tag):
    if tag.startswith("J"):
        return wordnet.ADJ
    elif tag.startswith("V"):
        return wordnet.VERB
    elif tag.startswith("N"):
        return wordnet.NOUN
    elif tag.startswith("R"):
        return wordnet.ADV
    else:
        return wordnet.NOUN
from nltk.tag import pos_tag
from nltk import pos_tag

def word_lemmatize(lyrics_cleaned):  # clean_lyrics_decode):
    pos_tags = pos_tag(lyrics_cleaned)
    wordnet_pos = [(word, get_wordnet_pos(pos_tag)) for (word, pos_tag) in pos_tags]

    wnl = WordNetLemmatizer()  # Lemmatize Lyrics
    return [wnl.lemmatize(word, tag) for word, tag in wordnet_pos]

In summary, the code above defines a function that makes use of the WordNetLemmatizer class from the NLTK library to conduct lemmatization specifically targeting verbs, thereby converting words to their most basic form.


Sentiment Analysis

Subsequently, the process involves the implementation of pipeline classes to carry out predictions using models accessible in the Hub. The code imports and employs multiple transformer models specifically designed for text classification and sentiment analysis. Specifically, the following procedure creates three distinct pipelines, each equipped with different models that facilitate the assessment of emotions and sentiment in textual content.

import transformers
from transformers import pipeline

# Initialize Genius API and sentiment classifiers
classifiers = [
    pipeline("text-classification", model='bhadresh-savani/distilbert-base-uncased-emotion', return_all_scores=True),
    pipeline("text-classification", model='cardiffnlp/twitter-roberta-base-sentiment', return_all_scores=True),
    pipeline("sentiment-analysis", return_all_scores=True)
]
No model was supplied, defaulted to distilbert-base-uncased-finetuned-sst-2-english and revision af0f99b (https://huggingface.co/distilbert-base-uncased-finetuned-sst-2-english).
Using a pipeline without specifying a model name and revision in production is not recommended.

The get_lyric_sentiment function takes in pre-processed lyrics as input and produces a dictionary of sentiment scores. It leverages three distinct classifiers to calculate the scores and aggregates them into a final result. For instance, one of these classifiers is the distilbert-base-uncased-emotion model, specifically trained to detect “emotions in texts such as sadness, joy, love, anger, fear, and surprise”.

# Function to perform sentiment analysis
def get_lyric_sentiment(lyrics, classifiers):
    text = ' '.join(lyrics)
    scores = {}
    for classifier in classifiers:
        try:
            predictions = classifier(text, truncation=True)
            for prediction in predictions[0]:
                scores[prediction['label']] = prediction['score']
        except Exception as e:
            print(f"Error during sentiment analysis: {e}")
    return scores

If the lyric sequence contains more than 512 tokens, it will trigger an error message indicating an exception encountered in the ‘embeddings’ layer. However, we have implemented measures to properly manage lyric sequences that exceed 512 words in the function mentioned above.


Putting it All Together

To summarize, the code efficiently collects data and performs text analysis on every song in a playlist. Specifically, it systematically processes a list of tracks and corresponding artists while simultaneously conducting a thorough cleaning procedure on the lyrics. The cleaning process involves removing all nonessential characters, resulting in a more precise depiction of the song’s content. The outcome is a comprehensive frequency analysis of each word in a song’s lyrics, providing deeper insights into the overall conveyed message.

Additionally, the program computes a sentiment score for each song based on the lyrics, indicating whether the lyrics are positive, negative, or neutral. It also collects information about the song and artist, such as the release date, length, popularity, and genre. Finally, the program compiles all this information into a dataframe for further analysis.

track_data = []
for i, track in all_tracks.iterrows():

    song_name = track["name"] #.partition(" (")[0]
    song_name = track['name'].partition(" (with")[0]
    song_name = song_name.partition(" - From")[0]
    
    artist_name = track["artist"]

    try:
        track_lyrics = clean_song_lyrics(song_name, artist_name)
        stopwords_removed = remove_stopwords_lyrics(track_lyrics)
        lemmatized = word_lemmatize(stopwords_removed)

        sentiment_scores = get_lyric_sentiment(stopwords_removed, classifiers)

        track_info = track.to_dict()
        track_info.update(sentiment_scores)

        track_info["lyrics"] = track_lyrics
        track_info["stopwords_removed"] = stopwords_removed
        track_info["lemmatized"] = lemmatized

        track_data.append(track_info)

    except Exception as e:
        print(f"Error processing track {track['name']} by {track['artist']}: {e}")

df_tracks = pd.DataFrame(track_data)
Searching for "Please Please Please" by Sabrina Carpenter...
Done.
Searching for "Si Antes Te Hubiera Conocido" by KAROL G...
Done.
Searching for "BIRDS OF A FEATHER" by Billie Eilish...
Done.
Searching for "Good Luck, Babe!" by Chappell Roan...
Done.
Searching for "A Bar Song (Tipsy)" by Shaboozey...
Done.
Searching for "Not Like Us" by Kendrick Lamar...
Done.
Error during sentiment analysis: The expanded size of the tensor (519) must match the existing size (514) at non-singleton dimension 1.  Target sizes: [1, 519].  Tensor sizes: [1, 514]
Searching for "MILLION DOLLAR BABY" by Tommy Richman...
Done.
Searching for "Too Sweet" by Hozier...
Done.
Searching for "Beautiful Things" by Benson Boone...
Done.
Searching for "I Had Some Help (Feat. Morgan Wallen)" by Post Malone...
Done.
Searching for "Espresso" by Sabrina Carpenter...
Done.
Searching for "i like the way you kiss me" by Artemas...
Done.
Searching for "Stargazing" by Myles Smith...
Done.
Searching for "LUNCH" by Billie Eilish...
Done.
Searching for "End of Beginning" by Djo...
Done.
Searching for "we can't be friends (wait for your love)" by Ariana Grande...
Done.
Searching for "Lose Control" by Teddy Swims...
Done.
Searching for "Tough" by Quavo...
Done.
Searching for "Austin" by Dasha...
Done.
Searching for "I Can Do It With a Broken Heart" by Taylor Swift...
Done.
Searching for "Houdini" by Eminem...
Done.
Searching for "Nasty" by Tinashe...
Done.
Searching for "Belong Together" by Mark Ambor...
Done.
Searching for "Slow It Down" by Benson Boone...
Done.
Searching for "HOT TO GO!" by Chappell Roan...
Done.
Searching for "GIRLS" by The Kid LAROI...
Done.
Searching for "greedy" by Tate McRae...
Done.
Searching for "Move" by Adam Port...
Done.
Searching for "Fortnight (feat. Post Malone)" by Taylor Swift...
Done.
Searching for "Saturn" by SZA...
Done.
Searching for "28" by Zach Bryan...
Done.
Searching for "Close To You" by Gracie Abrams...
Done.
Searching for "the boy is mine" by Ariana Grande...
Done.
Searching for "Stick Season" by Noah Kahan...
Done.
Searching for "I Don't Wanna Wait" by David Guetta...
Done.
Searching for "Smeraldo Garden Marching Band (feat. Loco)" by Jimin...
Done.
Searching for "Stumblin' In" by CYRIL...
Done.
Searching for "360" by Charli xcx...
Done.
Searching for "Rockstar" by LISA...
Done.
Searching for "One Of The Girls" by The Weeknd...
Done.
Searching for "Scared To Start" by Michael Marcagi...
Done.
Searching for "Lies Lies Lies" by Morgan Wallen...
Done.
Searching for "feelslikeimfallinginlove" by Coldplay...
Done.
Searching for "Parking Lot" by Mustard...
Done.
Searching for "Gata Only" by FloyyMenor...
Done.
Searching for "BAND4BAND (feat. Lil Baby)" by Central Cee...
Done.
Searching for "Santa" by Rvssian...
Done.
Searching for "Magnetic" by ILLIT...
Done.
Searching for "Water" by Tyla...
Done.
Searching for "Illusion" by Dua Lipa...
Done.
Asking to truncate to max_length but no maximum length is provided and the model has no predefined maximum length. Default to no truncation.
#df_tracks = pd.DataFrame(track_data)
df_tracks.to_csv("../assets/data/all_tracks+lyrics.csv", index=False)
df_tracks
name track_id album artist artist_id release_date length popularity artist_pop artist_genres ... fear surprise LABEL_0 LABEL_1 LABEL_2 NEGATIVE POSITIVE lyrics stopwords_removed lemmatized
0 Please Please Please 5N3hjp1WNayUPZrA8kJmJP Please Please Please Sabrina Carpenter 74KM79TiuVKeVCqs8QtB0B 2024-06-06 186365 98 91 ['pop'] ... 0.000637 0.000841 0.251058 0.542962 0.205980 0.857851 0.142149 [i, know, i, have, good, judgment, i, know, i,... [know, good, judgment, know, good, taste, funn... [know, good, judgment, know, good, taste, funn...
1 Si Antes Te Hubiera Conocido 6WatFBLVB0x077xWeoVc2k Si Antes Te Hubiera Conocido KAROL G 790FomKkXshlbRYZFtlgla 2024-06-21 195824 91 89 ['reggaeton', 'reggaeton colombiano', 'trap la... ... 0.001239 0.000147 0.030611 0.523545 0.445844 0.966250 0.033750 [what, what, we, are, ready, to, rule, summer,... [ready, rule, summer, started, fire, would, me... [ready, rule, summer, start, fire, would, meet...
2 BIRDS OF A FEATHER 6dOtVTDdiauQNBQEDOtlAB HIT ME HARD AND SOFT Billie Eilish 6qqNVTkY8uBg9cP3Jd7DAH 2024-05-17 210373 98 94 ['art pop', 'pop'] ... 0.434426 0.034063 0.122799 0.504202 0.372999 0.959893 0.040107 [i, want, you, to, stay, til, i, am, in, the, ... [want, stay, til, grave, til, rot, away, dead,... [want, stay, til, grave, til, rot, away, dead,...
3 Good Luck, Babe! 0WbMK4wrZ1wFSty9F7FCgu Good Luck, Babe! Chappell Roan 7GlBOeep6PqTfFi59PTUUN 2024-04-05 218423 94 86 ['indie pop', 'pov: indie'] ... 0.000427 0.000471 0.343443 0.554660 0.101897 0.981645 0.018355 [it, is, fine, it, is, cool, you, can, say, th... [fine, cool, say, nothing, know, truth, guess,... [fine, cool, say, nothing, know, truth, guess,...
4 A Bar Song (Tipsy) 2FQrifJ1N335Ljm3TjTVVf A Bar Song (Tipsy) Shaboozey 3y2cIKLjiOlp1Np37WiUdH 2024-04-12 171291 93 81 ['pop rap'] ... 0.009928 0.003751 0.057218 0.763994 0.178788 0.994249 0.005751 [my, baby, want, a, barking, she, is, been, te... [baby, want, barking, telling, night, long, ga... [baby, want, bark, tell, night, long, gasoline...
5 Not Like Us 6AI3ezQ4o3HUoP6Dhudph3 Not Like Us Kendrick Lamar 2YZyLoL8N0Wb9xBt1NhZWg 2024-05-04 274192 96 92 ['conscious hip hop', 'hip hop', 'rap', 'west ... ... 0.007257 0.004582 NaN NaN NaN 0.997331 0.002669 [psst, i, see, dead, people, mustard, on, the,... [psst, see, dead, people, mustard, beat, musta... [psst, see, dead, people, mustard, beat, musta...
6 MILLION DOLLAR BABY 7fzHQizxTqy8wTXwlrgPQQ MILLION DOLLAR BABY Tommy Richman 1WaFQSHVGZQJTbf0BdxdNo 2024-04-26 155151 86 83 ['chill abstract hip hop'] ... 0.032734 0.004189 0.280416 0.655696 0.063888 0.992852 0.007148 [do, it, baby, do, what, i, should, think, do,... [baby, think, baby, could, think, baby, think,... [baby, think, baby, could, think, baby, think,...
7 Too Sweet 4IadxL6BUymXlh8RCJJu7T Unheard Hozier 2FXC3k01G6Gw61bmprjgqS 2024-03-22 251424 83 85 ['irish singer-songwriter', 'modern rock', 'po... ... 0.002293 0.001093 0.120370 0.648945 0.230685 0.984314 0.015686 [it, can, not, be, said, i, am, an, early, bir... [said, early, bird, clock, say, word, baby, ne... [say, early, bird, clock, say, word, baby, nev...
8 Beautiful Things 6tNQ70jh4OwmPGpYy6R2o9 Beautiful Things Benson Boone 22wbnEMDvgVIAGdFeek6ET 2024-01-18 180304 91 85 ['singer-songwriter pop'] ... 0.996488 0.000843 0.033857 0.318134 0.648009 0.012351 0.987649 [for, a, while, there, it, was, rough, but, la... [rough, lately, better, last, four, cold, reme... [rough, lately, well, last, four, cold, rememb...
9 I Had Some Help (Feat. Morgan Wallen) 7221xIgOnuakPdLqT0F3nP I Had Some Help Post Malone 246dkjvS1zLTtiykXe5h60 2024-05-10 178205 95 90 ['dfw rap', 'melodic rap', 'pop', 'rap'] ... 0.000706 0.000557 0.210037 0.717910 0.072052 0.998456 0.001544 [you, got, a, got, ta, nerve, do, not, you, ba... [got, got, ta, nerve, baby, hit, curb, made, t... [get, get, ta, nerve, baby, hit, curb, make, t...
10 Espresso 2qSkIjg1o9h3YT9RAgYN75 Espresso Sabrina Carpenter 74KM79TiuVKeVCqs8QtB0B 2024-04-12 175459 99 91 ['pop'] ... 0.027107 0.004054 0.070886 0.800304 0.128810 0.992557 0.007443 [now, he, is, thinking, about, me, every, nigh... [thinking, every, night, sweet, guess, say, sl... [think, every, night, sweet, guess, say, sleep...
11 i like the way you kiss me 2GxrNKugF82CnoRFbQfzPf i like the way you kiss me Artemas 0PCCGZ0wGLizHt2KZ7hhA2 2024-03-19 142514 95 81 [] ... 0.001377 0.001145 0.034661 0.521730 0.443609 0.984495 0.015505 [i, like, the, way, you, kiss, me, i, like, th... [like, way, kiss, like, way, uh, like, way, ki... [like, way, kiss, like, way, uh, like, way, ki...
12 Stargazing 3Vr3zh0r7ALn8VLqCiRR10 Stargazing Myles Smith 3bO19AOone0ubCsfDXDtYt 2024-05-10 172533 92 78 ['singer-songwriter pop'] ... 0.000203 0.000153 0.479969 0.450779 0.069251 0.994339 0.005661 [oohooh, oohooh, oohooh, time, stood, still, j... [oohooh, oohooh, oohooh, time, stood, still, l... [oohooh, oohooh, oohooh, time, stand, still, l...
13 LUNCH 629DixmZGHc7ILtEntuiWE HIT ME HARD AND SOFT Billie Eilish 6qqNVTkY8uBg9cP3Jd7DAH 2024-05-17 179586 94 94 ['art pop', 'pop'] ... 0.004807 0.005700 0.226971 0.703515 0.069515 0.995480 0.004520 [oh, mmmm, i, could, eat, that, girl, for, lun... [mmmm, could, eat, girl, lunch, dances, tongue... [mmmm, could, eat, girl, lunch, dance, tongue,...
14 End of Beginning 3qhlB30KknSejmIvZZLjOD DECIDE Djo 5p9HO3XC5P3BLxJs5Mtrhm 2022-09-16 159245 93 77 ['pov: indie', 'psychedelic pop'] ... 0.018631 0.004027 0.159378 0.691760 0.148862 0.964887 0.035113 [just, one, more, tear, to, cry, one, teardrop... [one, tear, cry, one, teardrop, eye, better, s... [one, tear, cry, one, teardrop, eye, well, sav...
15 we can't be friends (wait for your love) 46kspZSY3aKmwQe7O77fCC eternal sunshine Ariana Grande 66CXWjxzNUsdJxJ2JdwvnR 2024-03-08 228639 86 91 ['pop'] ... 0.000605 0.000460 0.063339 0.507926 0.428735 0.996296 0.003704 [i, did, not, think, you, would, understand, m... [think, would, understand, could, ever, even, ... [think, would, understand, could, ever, even, ...
16 Lose Control 17phhZDn6oGtzMe56NuWvj I've Tried Everything But Therapy (Part 1) Teddy Swims 33qOK5uJ8AR2xuQQAhHump 2023-09-15 210688 90 82 [] ... 0.000485 0.000120 0.557471 0.412347 0.030183 0.998184 0.001816 [something, is, got, a, hold, of, me, lately, ... [something, got, hold, lately, know, anymore, ... [something, get, hold, lately, know, anymore, ...
17 Tough 22DH8NChecsgPxDjA4pqer Tough Quavo 0VRj0yCOv2FXJNP47XQnx5 2024-07-03 188828 85 79 ['atl hip hop', 'melodic rap', 'rap', 'trap'] ... 0.041581 0.004940 0.152115 0.734467 0.113419 0.977612 0.022388 [tough, like, the, scuff, on, a, pair, of, old... [tough, like, scuff, pair, old, leather, boots... [tough, like, scuff, pair, old, leather, boot,...
18 Austin 4NJqhmkGN042BrvHoMKUrJ Austin Dasha 7Ez6lTtSMjMf2YSYpukP1I 2023-11-17 171782 41 75 [] ... 0.002042 0.000548 0.332335 0.619888 0.047777 0.997655 0.002345 [we, had, a, plan, move, out, of, this, town, ... [plan, move, town, baby, west, sand, talked, l... [plan, move, town, baby, west, sand, talk, lat...
19 I Can Do It With a Broken Heart 4q5YezDOIPcoLr8R81x9qy THE TORTURED POETS DEPARTMENT Taylor Swift 06HL4z0CvFAxyc27GXpf02 2024-04-18 218004 87 100 ['pop'] ... 0.001501 0.000734 0.268903 0.570628 0.160469 0.992031 0.007969 [i, can, read, your, mind, she, is, having, th... [read, mind, time, life, glittering, prime, li... [read, mind, time, life, glitter, prime, light...
20 Houdini 2HYFX63wP3otVIvopRS99Z Houdini Eminem 7dGJo4pcD2V6oG8kP0tJRR 2024-05-31 227239 94 91 ['detroit hip hop', 'hip hop', 'rap'] ... 0.059232 0.007880 0.143081 0.793169 0.063750 0.994274 0.005726 [hey, them, it, is, pal, uh, i, was, listening... [hey, pal, uh, listening, album, good, lucky, ... [hey, pal, uh, listen, album, good, lucky, gue...
21 Nasty 6NjWCIYu1W8xa3HIvcIhd4 Nasty Tinashe 0NIIxcxNHmOoyBx03SfTCD 2024-04-12 176027 86 73 ['alternative r&b', 'dance pop', 'metropopolis... ... 0.003332 0.002755 0.546907 0.416473 0.036621 0.997654 0.002346 [because, it, feels, like, heaven, when, it, h... [feels, like, heaven, hurts, bad, baby, put, l... [feel, like, heaven, hurt, bad, baby, put, lik...
22 Belong Together 5uQ7de4EWjb3rkcFxyEOpu Belong Together Mark Ambor 11p2E654TTU8e0nZWBR4AL 2024-02-16 148317 91 76 ['singer-songwriter pop'] ... 0.005112 0.002070 0.018785 0.284418 0.696797 0.206854 0.793146 [i, know, sleep, is, friends, with, death, but... [know, sleep, friends, death, maybe, get, rest... [know, sleep, friend, death, maybe, get, rest,...
23 Slow It Down 51eSHglvG1RJXtL3qI5trr Fireworks & Rollerblades Benson Boone 22wbnEMDvgVIAGdFeek6ET 2024-04-05 161831 89 85 ['singer-songwriter pop'] ... 0.669380 0.007431 0.709808 0.263808 0.026384 0.983390 0.016610 [i, would, never, met, you, but, i, wanted, to... [would, never, met, wanted, invite, party, wal... [would, never, meet, want, invite, party, walk...
24 HOT TO GO! 4xdBrk0nFZaP54vvZj0yx7 The Rise and Fall of a Midwest Princess Chappell Roan 7GlBOeep6PqTfFi59PTUUN 2023-09-22 184841 88 86 ['indie pop', 'pov: indie'] ... 0.001401 0.002167 0.105176 0.805817 0.089007 0.988687 0.011313 [five, six, five, six, seven, eight, i, could,... [five, six, five, six, seven, eight, could, on... [five, six, five, six, seven, eight, could, on...
25 GIRLS 7z3PblAN3dH1JMewiRydkZ GIRLS The Kid LAROI 2tIP7SsRs7vjIcLrU85W8J 2024-06-28 152979 82 81 ['australian hip hop'] ... 0.004544 0.001163 0.171786 0.707467 0.120747 0.994324 0.005676 [fall, in, love, for, no, reason, fallin, uh, ... [fall, love, reason, fallin, uh, turned, said,... [fall, love, reason, fallin, uh, turn, say, gi...
26 greedy 3rUGC1vUpkDG9CZFHMur1t greedy Tate McRae 45dkTj5sMRSjrmBSBeiHym 2023-09-15 131872 89 82 ['pop'] ... 0.001383 0.000401 0.257882 0.650690 0.091428 0.970451 0.029549 [wood, he, said, are, you, serious, i, have, t... [wood, said, serious, tried, figure, next, nig... [wood, say, serious, tried, figure, next, nigh...
27 Move 1BJJbSX6muJVF2AK7uH1x4 Move Adam Port 2loEsOijJ6XiGzWYFXMIRk 2024-06-07 177598 86 72 ['melodic house'] ... 0.001471 0.001813 0.125568 0.807287 0.067145 0.155766 0.844234 [fire, burning, style, gunning, any, i, am, fe... [fire, burning, style, gunning, feenin, want, ... [fire, burning, style, gun, feenin, want, tast...
28 Fortnight (feat. Post Malone) 2OzhQlSqBEmt7hmkYxfT6m THE TORTURED POETS DEPARTMENT Taylor Swift 06HL4z0CvFAxyc27GXpf02 2024-04-18 228965 91 100 ['pop'] ... 0.097827 0.012489 0.494738 0.437140 0.068122 0.984428 0.015572 [i, should, have, been, taken, away, but, peop... [taken, away, people, forgot, come, pick, alco... [take, away, people, forget, come, pick, alcoh...
29 Saturn 1bjeWoagtHmUKputLVyDxQ Saturn SZA 7tYKF4w9nC0nq9CsPZTHyP 2024-02-22 186191 90 89 ['pop', 'r&b', 'rap'] ... 0.077055 0.002667 0.401661 0.494084 0.104256 0.998026 0.001974 [if, there, is, another, universe, please, mak... [another, universe, please, make, noise, noise... [another, universe, please, make, noise, noise...
30 28 5iJKGpnFfvbjZJeAtwXfCj The Great American Bar Scene Zach Bryan 40ZNYROS4zLfyyBSs2PGe2 2024-07-04 233333 81 91 ['classic oklahoma country'] ... 0.000493 0.000980 0.127071 0.535515 0.337414 0.918328 0.081672 [you, took, a, train, to, the, south, side, of... [took, train, south, side, boson, showed, old,... [take, train, south, side, boson, show, old, m...
31 Close To You 5MPi9e7z46wopyad10R6qx Close To You Gracie Abrams 4tuJ0bMpJh08umKkEXKUI5 2024-06-07 225973 77 82 ['alt z'] ... 0.080101 0.008835 0.207858 0.741581 0.050560 0.963049 0.036952 [close, to, you, close, to, you, i, do, not, g... [close, close, got, single, problem, provocati... [close, close, get, single, problem, provocati...
32 the boy is mine 0Lmbke3KNVFXtoH2mMSHCw eternal sunshine Ariana Grande 66CXWjxzNUsdJxJ2JdwvnR 2024-03-08 173639 86 91 ['pop'] ... 0.009534 0.002129 0.181925 0.762790 0.055285 0.988922 0.011078 [how, can, it, be, you, and, me, might, be, me... [might, meant, unseen, want, scene, usually, u... [might, mean, unseen, want, scene, usually, un...
33 Stick Season 0mflMxspEfB0VbI1kyLiAv Stick Season Noah Kahan 2RQXRUsr4IW1f3mKyKsy4B 2022-10-14 182346 90 84 ['pov: indie'] ... 0.104740 0.003200 0.516024 0.447031 0.036945 0.998780 0.001220 [as, you, promised, me, that, i, was, more, th... [promised, miles, combined, must, change, hear... [promise, mile, combine, must, change, heart, ...
34 I Don't Wanna Wait 331l3xABO0HMr1Kkyh2LZq I Don't Wanna Wait David Guetta 1Cs0zKBU1kc0i8ypK3B9ai 2024-04-05 149667 90 89 ['big room', 'dance pop', 'edm', 'pop', 'pop d... ... 0.000750 0.001233 0.186699 0.667073 0.146227 0.926766 0.073234 [let, us, make, tonight, the, weekend, i, do, ... [let, us, make, tonight, weekend, want, waiait... [let, u, make, tonight, weekend, want, waiait,...
35 Smeraldo Garden Marching Band (feat. Loco) 1kPhV0KQui1phEpjnWIqUN Smeraldo Garden Marching Band (feat. Loco) Jimin 1oSPZhvZMIrWW5I41kPkkY 2024-06-28 182840 91 84 ['k-pop'] ... 0.002519 0.001851 0.053019 0.700006 0.246975 0.068059 0.931941 [say, oh, this, harmonys, just, for, you, oh, ... [say, harmonys, say, love, introducing, began,... [say, harmony, say, love, introduce, begin, tu...
36 Stumblin' In 0h3Xy4V4apMraB5NuM8U7Z Stumblin' In CYRIL 11kt6ggsdxvI8MhyeSMKom 2023-11-10 213363 89 79 [] ... 0.327841 0.003080 0.325368 0.583619 0.091013 0.995401 0.004599 [our, love, is, alive, and, so, we, begin, foo... [love, alive, begin, foolishly, laying, hearts... [love, alive, begin, foolishly, lay, heart, ta...
37 360 4w2GLmK2wnioVnb5CPQeex BRAT Charli xcx 25uiPmTg16RbhZWAqwLBy5 2024-06-07 133805 84 85 ['art pop', 'candy pop', 'metropopolis', 'pop'... ... 0.012352 0.004491 0.165593 0.730096 0.104311 0.991431 0.008569 [i, went, my, own, way, and, i, made, it, i, a... [went, way, made, favorite, reference, baby, c... [go, way, make, favorite, reference, baby, cal...
38 Rockstar 6vvPecFTmWxDfEJ6cYT1wa Rockstar LISA 5L1lO4eRHmJ7a0Q6csE5cT 2024-06-27 138213 90 79 ['k-pop'] ... 0.036838 0.012582 0.055340 0.774254 0.170406 0.981867 0.018133 [gold, teeth, sitting, on, the, dash, she, a, ... [gold, teeth, sitting, dash, rockstar, make, f... [gold, teeth, sit, dash, rockstar, make, favor...
39 One Of The Girls (with JENNIE, Lily Rose Depp) 7CyPwkp0oE8Ro9Dd5CUDjW The Idol Episode 4 (Music from the HBO Origina... The Weeknd 1Xyo4u8uXC1ZmMpatF05PJ 2023-06-23 244684 91 93 ['canadian contemporary r&b', 'canadian pop', ... ... 0.018034 0.003468 0.178038 0.707149 0.114813 0.885132 0.114868 [lock, me, up, and, throw, away, the, key, he,... [lock, throw, away, key, knows, get, best, for... [lock, throw, away, key, know, get, best, forc...
40 Scared To Start 3Pbp7cUCx4d3OAkZSCoNvn Scared To Start Michael Marcagi 4j96cMcT8GRi11qbvo1cLQ 2024-01-12 159636 88 73 [] ... 0.993651 0.000680 0.467322 0.498693 0.033985 0.993110 0.006890 [she, is, wearing, an, old, dress, walking, it... [wearing, old, dress, walking, waiting, someon... [wear, old, dress, walk, wait, someone, turn, ...
41 Lies Lies Lies 7Fzl7QaTu47WyP9R5S5mh5 Lies Lies Lies Morgan Wallen 4oUHIQIBe0LHzYfvXNW4QM 2024-07-05 198068 80 90 ['contemporary country'] ... 0.005516 0.000481 0.621788 0.354477 0.023735 0.990984 0.009016 [i, do, not, come, down, with, the, sun, i, wi... [come, sun, hate, morning, comes, thoughts, bo... [come, sun, hate, morning, come, thought, body...
42 feelslikeimfallinginlove 1YsU8rW2u8z4F0pwOBQ4Ea feelslikeimfallinginlove Coldplay 4gzpq5DPGxSnKTe4SA8HAU 2024-06-21 237803 83 88 ['permanent wave', 'pop'] ... 0.001050 0.000178 0.352217 0.564125 0.083659 0.954148 0.045852 [i, know, that, this, could, hurt, me, bad, i,... [know, could, hurt, bad, know, could, feel, li... [know, could, hurt, bad, know, could, feel, li...
43 Parking Lot 4IFd7EVCyJsUHesBMXI8ju Parking Lot Mustard 0YinUQ50QDB7ZxSCLyQ40k 2024-06-21 172794 83 73 ['cali rap', 'pop rap', 'rap', 'southern hip h... ... 0.091244 0.010612 0.097719 0.778541 0.123740 0.991387 0.008613 [away, away, away, away, away, away, away, awa... [away, away, away, away, away, away, away, awa... [away, away, away, away, away, away, away, awa...
44 Gata Only 6XjDF6nds4DE2BBbagZol6 Gata Only FloyyMenor 7CvTknweLr9feJtRGrpDBy 2024-02-02 222000 96 82 ['reggaeton chileno'] ... 0.884537 0.003583 0.210103 0.690181 0.099717 0.996415 0.003585 [hey, mommy, i, feel, you, far, away, tell, me... [hey, mommy, feel, far, away, tell, want, goin... [hey, mommy, feel, far, away, tell, want, go, ...
45 BAND4BAND (feat. Lil Baby) 7iabz12vAuVQYyekFIWJxD BAND4BAND (feat. Lil Baby) Central Cee 5H4yInM5zmHqpKIoMNAx4r 2024-05-23 140733 91 82 ['melodic drill', 'r&drill'] ... 0.031337 0.003643 0.158056 0.726879 0.115065 0.995000 0.005000 [i, am, not, in, the, mood, because, my, fligh... [mood, flight, delayed, jumped, private, jet, ... [mood, flight, delay, jump, private, jet, ask,...
46 Santa 5bi0gh89wRuH2OgjdAKFsb Santa Rvssian 1fctva4kpRbg2k3v7kwRuS 2024-04-04 193038 88 76 ['reggaeton', 'reggaeton flow', 'trap latino',... ... 0.221692 0.006951 0.261035 0.679751 0.059214 0.986848 0.013152 [they, rvssian, i, can, not, deny, this, desir... [rvssian, deny, desire, stop, looking, lips, r... [rvssian, deny, desire, stop, look, lip, rejec...
47 Magnetic 1aKvZDoLGkNMxoRYgkckZG SUPER REAL ME ILLIT 36cgvBn0aadzOijnjjwqMN 2024-03-25 160688 89 74 ['5th gen k-pop'] ... 0.069957 0.007273 0.092965 0.713226 0.193809 0.986112 0.013888 [baby, i, am, just, trying, to, play, it, cool... [baby, trying, play, cool, hide, want, wait, m... [baby, try, play, cool, hide, want, wait, minu...
48 Water 5aIVCx5tnk0ntmdiinnYvw Water Tyla 3SozjO3Lat463tQICI9LcE 2023-07-28 200255 86 77 [] ... 0.006878 0.002168 0.210546 0.642083 0.147372 0.992614 0.007386 [make, me, sweat, make, me, hotter, make, me, ... [make, sweat, make, hotter, make, lose, breath... [make, sweat, make, hotter, make, lose, breath...
49 Illusion 59xD5osEFsaNt5PXfIKUnX Illusion Dua Lipa 6M2wZ9GZgrQXHCFfjv46we 2024-04-11 188143 79 88 ['dance pop', 'pop', 'uk pop'] ... 0.292987 0.295016 0.178378 0.761315 0.060307 0.980528 0.019472 [i, been, known, to, miss, a, red, flag, i, be... [known, miss, red, flag, known, put, lover, pe... [know, miss, red, flag, know, put, lover, pede...

50 rows × 39 columns