노래 가사에 어떤 단어가 많이 쓰이는지 알아보자
안녕하세요. 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였습니다. 다음에 더 좋은 정보로 찾아뵙도록 하겠습니다.