모 아티스트 그룹은 무엇을 우리에게 전하고 싶었는가? ? ? (WordCloud에서 가사화해 보았다)
이전 기사: @hima_zin331 님의
超解像技術-SRGAN-実装してみた(Tensorflow 2.0) 推論フェーズ編
다음 기사: Comming Soon...소개
올해로 모 아티스트 그룹이 활동 휴지하는 가운데, 당 그룹은 결성 15년 약 170곡 정도의 곡을 내고 왔습니다. 거기서 이번은 약 170곡의 가사를 해석해, 어떤 단어를 많이 사용해 무엇을 팬에게 전하고 싶었는지를 WordCloud로 가시화해 보았습니다.
1. BeautifulSoup, pandas를 사용하여 가사를 스크래핑하고 파일에 저장합니다.
scraping.py
import requests #URLを開くことができるライブラリ
from bs4 import BeautifulSoup #HTML, XMLから狙ったデータを抽出するためのライブラリ
import pandas as pd #データ分析を容易に行うことができる(今回は表作成のために使用)
import time
#スクレイピングしたデータを格納する表を作成(columns: 列名一列目に`歌詞`というラベル(名前)をつける。)
lyricsTable = pd.DataFrame(columns=['歌詞'])
#テーブルの最初の5行を表示
lyricsTable.head()
#曲ページ先頭アドレス
base_url = 'https://www.uta-net.com'
#歌詞一覧ページ
url = 'https://www.uta-net.com/artist/****/'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml') #第一引数・・・取得した文字列はtext属性(response.text)で取得できる
#第二引数・・・解析に利用するパーサー。'lxml'は高速に処理できる。
links = soup.find_all('td', class_='side td1') #tdタグ & クラス名が'side td1'な要素を全て取得する。リストで格納される。
for link in links:
a = base_url + (link.a.get('href')) #aタグの属性を取得する。
#歌詞詳細ページ
response = requests.get(a)
soup = BeautifulSoup(response.text, 'lxml')
song_lyrics = soup.find('div', id="kashi_area", itemprop='text')
#要素に含まれるテキストを取得(strip・・・Trueにすることにより改行や空白文字を除去してくれる)
song_lyrics = song_lyrics.get_text(strip=True)
'''
---------------歌詞抽出完了--------------
'''
#取得した歌詞を表に追加
tmp_seed = pd.DataFrame([song_lyrics], index=lyricsTable.columns).T
lyricsTable = lyricsTable.append(tmp_seed)
#CSVファイルに格納(mode・・・指定したパスが存在しない場合は新規作成、存在する場合は上書きする)
lyricsTable.to_csv('lyricsTable_AAA.csv', mode='w', encoding='utf-8')
2. janome을 사용하여 형태소 분석을 수행합니다.
analytics.py
from janome.tokenizer import Tokenizer
import pandas as pd
import re
#CSVファイルを読み込み
lyrics_file = pd.read_csv('lyricsTable.csv', encoding='utf-8')
song_lyrics = lyrics_file['歌詞'].tolist() #リストに変換
t = Tokenizer()
results = []
for s in song_lyrics:
tokens = t.tokenize(s)
result = []
for tok in tokens:
if tok.base_form == '*':
word = tok.surface
else:
word = tok.base_form
#1単語の品詞の抽出
ps = tok.part_of_speech
hinshi = ps.split(',')[0]
if hinshi in ['名詞', '形容詞', '動詞', '副詞']:
result.append(word)
rl = (' '.join(result)).strip()
results.append(rl)
consequence = [i.replace('\u3000','')for i in results]
with open('word_lyrics.txt', 'w', encoding='utf-8') as fp: # `with`ブロックを使うことでブロックの終了時に自動的にCloseされる
fp.write("\n".join(consequence))
3. WordCloud 만들기
wordcloud.py
from wordcloud import WordCloud
with open('word_lyrics.txt', encoding='utf8') as text_file:
text = text_file.read()
#日本語のフォントパス
fpath = '../ヒラギノ角ゴシック W9.ttc'
#表示対象にしたくない単語の除去
stop_words = ['そう', 'ない', 'いる', 'する', 'まま', 'よう', 'てる', 'なる', 'こと', 'もう', 'いい', 'ある',
'ゆく', 'れる', 'の', 'ん','せる', 'さ', 'く', '中']
wordcloud = WordCloud(background_color='white',
font_path = fpath, width=700, height=500, stopwords=set(stop_words)).generate(text)
wordcloud.to_file('./wordcloud.png')
4.완성
참고 자료
노래 그물
htps : // m / ysdyt / ms / 9 82fc5b504 7913
https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwj96_6b8rrtAhXIZt4KHapnDf4QFjACegQIBhAC&url=https%3A%2F%2Fn 2F&usg=AOvVaw32rxuE65WNlS2E4Ku7lvos
https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwj6z6im8rrtAhVXfXAKHbZ7AmgQFjADegQIAhAC&url=https%3A%2F%2Fqiita.com%2Fyuuuusuke1997%2Fitems%2F122ca7597c909e73aad5&usg=AOvVaw1mWeXJY- GCeexfmd9ODOHs
Reference
이 문제에 관하여(모 아티스트 그룹은 무엇을 우리에게 전하고 싶었는가? ? ? (WordCloud에서 가사화해 보았다)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/koseiinfratop/items/906463a8d51c9f1d0d2c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)