2017/11/29
_ [Python]URLを入力したら wordcloud を作成&表示する CGIを作ってみた
wordcloud が作れる環境が出来たんで、 jupyter notebook 上で色々と URLを変えてみて wordcloud を表示して楽しんではみたものの、 毎回チマチマと URL文字列を修正して ctrl+ret するのが面倒になってきた (+_+)
そこで URLを入力したら wordcloud を作成&表示する CGIを作ってみたらいい感じに (^o^)/
FreeBSD-10.3R Python2.7 + requests-2.8.4 + BeautifulSoup4-4.5.1 + mecab-python-0.996post2 + matplotlib-1.5.3post0 + wordcloud-1.3.1 mecab-ipadic-neologd を使用
- URL入力
- wordcloud 表示結果
コードはいつものごとくエッセンスのみで (^^;
from wordcloud import WordCloud from bs4 import BeautifulSoup, NavigableString, Declaration, Comment import requests import MeCab as mc import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt html_body = u""" <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8" /> </head> <body> %s <br> <img src="%s"> </body> </html>""" # wordcloud.html で入力された URL を取得する form = cgi.FieldStorage() url_str = form.getvalue('urls', '') # URL で指定されたサイトのテキストからワードリスト(utf-8)を作成する headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'} res = requests.get(url_str, timeout=10, headers = headers) # エンコーディングが正しく取得できていないようなので制御を追加 res.encoding = res.apparent_encoding # BeautifulSoupでタグを除去してテキストだけ抜き出す soup = BeautifulSoup(res.content, "lxml") text = '\n'.join(getNavigableStrings(soup)) # 形態素解析 wordlist = mecab_analysis(text) # unicode化した文字列をスペース区切りで連結し、WordCloud を作成 _str = " ".join(wordlist).decode('utf-8') create_wordcloud(_str, img_file) print (html_body % (url_str, img_file)).encode('utf-8')
最後に、Google News を wordcloud してみたけど全くニュース感がない (>_<)
stopwords を工夫するか、個別ニュースに限定するしかないんだろうなぁ
参考にさせていただいたサイト: