BUMP OF CHICKENの歌詞をスクレイピングした

何故したか

仕事において自然言語処理をする機会が増えそうであり、自然言語処理っぽいことをしてみたかった。

また、某ゲームのED曲がBUMP OF CHICKENの新曲かと騒がれるほど曲の雰囲気が似ていると言われているので、類似具合を定量評価したかった。

www.youtube.com

やったこと

J-LyricのwebサイトからBUMP OF CHICKENの歌詞のみをスクレイピングしました。

今回も、Python+Beautiful Soupでスクレイピングしました。

曲のタイトルをファイル名とするテキストファイルで保存しました。

以下にソースコードを示します。

import urllib.request
from bs4 import BeautifulSoup
import re
import time

fqdn = 'http://j-lyric.net'
path_bump = '/artist/a000673/'
url = fqdn + path_bump

response = urllib.request.urlopen(url)
data = response.read()
soup = BeautifulSoup(data, "lxml")

select1 = soup.find("div", id="mnb")
select2 = select1.find("div", class_="cnt")

contents = select2.find_all('div', id=re.compile('ly'))

for i in range(len(contents)):
    select4 = select2.find("div", id="ly" + str(i+1))
    select5 = select4.find('p', class_='ttl')
    title = select5.find('a')
    title = re.sub('<a href=".+">', '', str(title)).replace('</a>', '')
    
    path_lyric = select5.a.get('href')
    response_lyric = urllib.request.urlopen(fqdn + path_lyric)
    data_lyric = response_lyric.read()
    soup_lyric = BeautifulSoup(data_lyric, "lxml")

    select6 = soup_lyric.find("div", id="mnb")
    select7 = select6.find("div", class_="lbdy")
    select8 = select7.find("p", id="Lyric")
    lyric = str(select8).replace('<p id="Lyric">', '').replace('</p>', '').replace('<br/>', '\n')
    
    f = open(title + '.txt', 'w')
    f.write(lyric)
    f.close()
    
    # スクレイピングマナー
    time.sleep(1)

今後やりたいこと

Doc2Vecなどを使って、歌詞の類似度を算出したい。

また音の特徴量を抽出して、曲調の類似度も算出したい。