본문 바로가기

프로그래밍/파이썬

노래 가사에 어떤 단어가 많이 쓰이는지 알아보자


안녕하세요. Wiu입니다.

오늘은 노래 가사를 크롤링하여 어떤 단어가 많이 쓰이는지 확인해보겠습니다.

저도 공부하는 입장이라서 잘못된 점이나 고쳐야 할 점이 있다면 댓글로 알려주시면 감사하겠습니다.


처음으로는 가사를 가져올 건데요.

저는 https://www.lyrics.co.kr/charts/tops?site=melon 에서 가사를 가져오겠습니다.

 

차트>멜론 TOP 100>실시간 | 노래 가사

멜론 실시간 TOP 100 차트

www.lyrics.co.kr

먼저 Top 100의 노래 링크들을 가져오도록 하겠습니다.

from urllib.request import urlopen
from bs4 import BeautifulSoup

html = urlopen("https://www.lyrics.co.kr/charts/tops?site=melon")
bsObj = BeautifulSoup(html, "html.parser")

song_page_urls = []
for cover in bsObj.body.find_all('div', {'class' : 'post-content mt-0'}):
    link = cover.select('a')[0].get('href')
    song_page_urls.append(link)

그다음에는 이 링크를 통해 가사와 곡 정보를 가져오도록 하겠습니다.

for index, lyrics_url in enumerate(song_page_urls):
  p = re.compile(r'<.*?>')
  html = urlopen("https://www.lyrics.co.kr" + lyrics_url)
  bsObj = BeautifulSoup(html, "html.parser")
  song_index = bsObj.find('div', {'class' : 'post-content mt-0'}).select('a')[0].text.split(" (+) ")
  song_title = song_index[1]
  song_artist = song_index[0]
  lyrics = str(bsObj.find('div', {'class' : 'blog-content'}).select('p')[0])
  lyrics = lyrics.lower()
  lyric = p.sub(' ', lyrics)
  print(song_title + " : " + song_artist + " / " + lyric)
  break

이를 통해 노래명, 노래 아티스트, 가사를 가져왔습니다.

 

이제 이 가사에서 단어를 골라 수를 새보겠습니다.

from urllib.request import urlopen
from bs4 import BeautifulSoup
from openpyxl import Workbook
from collections import Counter
from matplotlib import pyplot as plt
import matplotlib.font_manager as fm
from konlpy.tag import *
import re

html = urlopen("https://www.lyrics.co.kr/charts/tops?site=melon")
bsObject = BeautifulSoup(html, "html.parser")
hannanum = Hannanum()

song_page_urls = []
lWords = []
lCount = []

for cover in bsObject.body.find_all('div', {'class' : 'post-content mt-0'}):
    link = cover.select('a')[0].get('href')
    song_page_urls.append(link)

for index, lyrics_url in enumerate(song_page_urls):
    p = re.compile(r'<.*?>')
    html = urlopen("https://www.lyrics.co.kr" + lyrics_url)
    bsObject = BeautifulSoup(html, "html.parser")
    song_index = bsObject.find('div', {'class' : 'post-content mt-0'}).select('a')[0].text.split(" (+) ")
    lyrics = str(bsObject.find('div', {'class' : 'blog-content'}).select('p')[0])
    lyrics = lyrics.lower()
    lyric = p.sub(' ', lyrics)
    lyric_count = Counter(hannanum.nouns(lyric))
    song_title = song_index[1]
    song_artist = song_index[0]
    for word, count in lyric_count.items():
      if (count >= 2):
        if (len(lWords) == 0) :
          lWords.append(word)
          lCount.append(count)
        else :
          if word in lWords:
            lCount[lWords.index(word)] += count
          else :
            lWords.append(word)
            lCount.append(count)
    if (index == 40) : break
for num, word in enumerate(lWords) :
  print(word + " : " + str(lCount[num]))

 이와 같이 Top 40까지의 곡들에서 한 곡에 1번 나오는 단어들을 제외한 후에 새보았습니다.


글을 쓰는 시간 기준

너 : 197

나 : 173

내 : 80

말 : 54

사랑 : 53

네 : 44

우리 : 38

와 같은 결과를 보여주고 있습니다.


단어를 나눠주는 KoNLPy 링크를 타고 가시면 더 많은 것을 알아보실 수 있습니다.

https://konlpy-ko.readthedocs.io/ko/v0.4.3/

 

KoNLPy: 파이썬 한국어 NLP — KoNLPy 0.4.3 documentation

KoNLPy: 파이썬 한국어 NLP KoNLPy(“코엔엘파이”라고 읽습니다)는 한국어 정보처리를 위한 파이썬 패키지입니다. 설치법은 이 곳을 참고해주세요. NLP를 처음 시작하시는 분들은 시작하기 에서 가볍게 기본 지식을 습득할 수 있으며, KoNLPy의 사용법 가이드는 사용하기, 각 모듈의 상세사항은 API 문서에서 보실 수 있습니다. >>> from konlpy.tag import Kkma >>> from konlpy.utils import pprin

konlpy-ko.readthedocs.io

이상 Wiu였습니다. 다음에 더 좋은 정보로 찾아뵙도록 하겠습니다.