Janome에서 형태소 분석

소개



qiita 첫 투고입니다. 이전부터 자연언어 처리에 흥미가 있어 만져 보자고 하는 것으로, 자신이 좋아하는 가수의 곡의 가사, 인기 top10과 별로 인기가 없는 top10을 스크래핑→형태 해석→빈도의 추출→그래프화해 어느 같은 차이가 나오는지 보았습니다.

사용한 사이트



Uta-Net
htps //w w. 우타네 t. 코m/

스크래핑


import requests
from bs4 import BeautifulSoup
from janome.tokenizer import Tokenizer
import collections

t = Tokenizer()

#指定したurlのhtmlから歌詞を抽出
r = requests.get("歌詞ページのURL")
soup = BeautifulSoup(r.content, "html.parser")
kashi = soup.find(id = "kashi_area").text

#名詞の出現頻度の抽出
kashi = collections.Counter(token.base_form for token in t.tokenize(kashi)if token.part_of_speech.startswith('名詞'))

위에서 가사를 분석 할 수있는 출현 빈도 데이터를 DB에 저장

그래프화


import numpy as np
import matplotlib.pyplot as plt
import songdef as s
import japanize_matplotlib

top_x = []
top_y = []

last_x = []
last_y = []

all_x = []
all_y = []

#DBからデータを持ってくる
d_top = s.get_date("top_song")#DBから抽出したデータを持ってくるメソッド
d_top = s.sort_del(d_top)#データをlist型に変換し頻度の高い順にソートし、top10以下を切り捨てるメソッド

d_last = s.get_date("last_song")
d_last = s.sort_del(d_last)

d_all = s.get_date("all_song")
d_all = s.sort_del2(d_all)


#x,yのデータの用意
for res in d_top:
    best_x.append(res)
    best_y.append(d_top[res])

for res in d_last:
    normal_x.append(res)
    normal_y.append(d_last[res])

for res in d_all:
    all_x.append(res)
    all_y.append(d_all[res])



#Figureを作成
fig = plt.figure(facecolor = "lightgray", figsize = (20,15))
fig2 = plt.figure(facecolor = "lightgray", figsize = (40,15))

#FigureにAxesを追加
ax_1 = fig.add_subplot(221)
ax_2 = fig.add_subplot(222)
ax_3 = fig2.add_subplot(223)


#Axesの設定
ax_1.set_title("top10_song", fontsize = 14)
ax_1.set_xlabel("word", fontsize = 14)
ax_1.set_ylabel("count", fontsize = 14)

ax_2.set_title("last10_song", fontsize = 14)
ax_2.set_xlabel("word", fontsize = 14)
ax_2.set_ylabel("count", fontsize = 14)

ax_3.set_title("all_song", fontsize = 14)
ax_3.set_xlabel("word", fontsize = 14)
ax_3.set_ylabel("count", fontsize = 14)

#Axesに棒グラフを追加
ax_1.bar(top_x,top_y)
ax_2.bar(last_x,last_y)
ax_3.bar(all_x,all_y)

Jupyter에서 위의 코드로 그래프를 작성한 결과 ,,,


이런 느낌이 되었습니다! 덧붙여서 all_song은 대상 아티스트 전곡의 데이터입니다. top10, last10의 비율을 보기 위해 추가되었습니다.

결과



top10과 last10, 차이는 있지만 출현하고 있는 단어는 거의 같고, 전곡과 비교해도 둘 다 같은 단어를 볼 수 있습니다. 차이를 보는 것보다 그 아티스트의 특징이 보이는 느낌이었습니다.
라고 하는 것으로 이번은 곡의 장르 일에 비교해 보면 어떠한 특징이 있는지를 봐 보려고 생각합니다.

좋은 웹페이지 즐겨찾기