概要
僕自身が精神的に追い込まれると何も進捗を生やせなくなるアイドルオタクになる。
しかし、怠惰なオタクはアイドルの全ブログを読んでチェックしていくわけにはいきません。そこでワードクラウドを用いてアイドルが何に興味があるかどのような発言をブログ上で行うかを解析したいと思います。
なお、今回のブログの文章の取得元は私の趣味に依存しないものとします。
環境
パッケージのインストールとか面倒だけどがんばれ~()
実装
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import matplotlib.pyplot as plt from wordcloud import WordCloud import MeCab as mc from bs4 import BeautifulSoup import sys from urllib import request import time import re def mecab_analysis(text): t = mc.Tagger("-Ochasen") t.parse('') node = t.parseToNode(text) output = [] while node: if node.surface != "": # ヘッダとフッタを除外 word_type = node.feature.split(",")[0] if word_type in ["形容詞", "動詞","名詞", "副詞"]: output.append(node.surface) node = node.next if node is None: break return output def get_wordlist_from_blog(url): headers = { "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0", } req = request.Request(url, None, headers) res = request.urlopen(req) soup = BeautifulSoup(res.read(),'html.parser') #soup = soup.find(class_="box-article") text = soup.get_text() return mecab_analysis(text) #return text def create_wordcloud(text): fpath = "/usr/share/fonts/truetype/takao-mincho/TakaoExMincho.ttf" ##ブロックする文字 stop_words = [ 'てる', 'いる', 'なる', 'れる', 'する', 'ある', 'こと', 'これ', 'さん', 'して', \ 'くれる', 'やる', 'くださる', 'そう', 'せる', 'した', '思う', \ 'それ', 'ここ', 'ちゃん', 'くん', '', 'て','に','を','は','の', 'が', 'と', 'た', 'し', 'で', \ 'ない', 'も', 'な', 'い', 'か', 'ので', 'よう', '', 'れ','さ','なっ',\ 'update','member','更新'] wordcloud = WordCloud(background_color="black",font_path= fpath ,width=900, height=500, \ stopwords=set(stop_words)).generate(text) plt.figure(figsize=(15,12)) plt.imshow(wordcloud) plt.axis("off") plt.savefig("graph.png") plt.show() #imoはページ数 ctはメンバー数 def page_info(url): url = url + "&ima=" + "0000" url = url + "&cd=member&ct=" + "17" return url url = "http://www.keyakizaka46.com/mob/news/diarKiji.php?site=k46o" url = page_info(url) wordlist = get_wordlist_from_blog(url) print(wordlist) create_wordcloud(" ".join(wordlist))
最後に
改善点
メンバーのブログを全部解析しているわけではないです。自動取得の部分でブログの本文だけではなく不要なゴミをたくさん集めてしまいました。class_で選んだあとに中身のみを取り出す方法が分からず爆死しておりました。bs4を削除する方法に詳しい方教えてくださいMecabの辞書を作ってメンバーの名前を登録するのが面倒でした…本当にごめんなさい…。
メンバーによって差異があるのとある程度頻出単語が出るので嬉しいです。
改善依頼
cloud_work_keyaki.py · GitHub
blogのURLからbox-articleのみを全て抜き出す方法が知りたいです。Help !!!
オタクとしてこのようなことに利用してしまいましたがワードクラウドは活用方法がおもしろく研究や仕事のいろんな場面で利用できると思います。
参照
Beautiful Soup Documentation — Beautiful Soup 4.4.0 documentation
http://www.keyakizaka46.com/mob/news/diarKiji.php?site=k46o&ima=0000&cd=member