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, 차이는 있지만 출현하고 있는 단어는 거의 같고, 전곡과 비교해도 둘 다 같은 단어를 볼 수 있습니다. 차이를 보는 것보다 그 아티스트의 특징이 보이는 느낌이었습니다.
라고 하는 것으로 이번은 곡의 장르 일에 비교해 보면 어떠한 특징이 있는지를 봐 보려고 생각합니다.
Reference
이 문제에 관하여(Janome에서 형태소 분석), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ken017/items/e85635285980823e4c64
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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('名詞'))
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)
Reference
이 문제에 관하여(Janome에서 형태소 분석), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ken017/items/e85635285980823e4c64텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)