【Python】ワードクラウドでギレン閣下の演説を可視化
Pythonを使ってワードクラウドを描画
ギレン閣下の演説を形態素解析
ワードクラウドってかっこいいな〜と思い、
ギレン閣下の演説を形態素解析して描画してみました。
ネタ元
ここのサイトから演説内容を拝借しました。
利用したのはギレン総帥の演説①です。
実行手順
1.MeCabの準備
環境構築に関してはこちらののサイトを参考にしました。
MacでPython3系を前提として環境構築をしておりますので、
Windowsは別の方法になるかもしれません。
MeCabのインストール
homebrewはすでにインストールされておりますでしょか。
MeCabのインストールはhomebrewを使って行います。
brew install mecab brew install mecab-ipadic
neologdのインストール
形態素解析するためには、辞書が必要になります。
brew install mecab mecab-ipadic git curl xz git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git cd mecab-ipadic-neologd ./bin/install-mecab-ipadic-neologd -n -a echo `mecab-config --dicdir`"/mecab-ipadic-neologd" mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd/
これを実行することで辞書がインストールされました。
インストールとあわせて、mecabrcを編集してパスを変更しておきましょう。 mecabrcは/usr/local/etc/mecabrcにあります。
; dicdir = /usr/local/lib/mecab/dic/ipadic ←既存コードをコメントアウト dicdir = /usr/local/lib/mecab/dic/mecab-ipadic-neologd
Pythonから呼び出せるようにする
インストールしたMeCabをPythonから呼び出せるように、pipを使ってインストールしましょう。
pip install mecab-python3
2.ワードクラウドを描画
こちらのサイトを参考に描画してみました。
%matplotlib inline import matplotlib.pyplot as plt from wordcloud import WordCloud import MeCab as mc def wordcloud(text): stop_words = [ u'てる', u'いる', u'なる', u'れる', u'する', u'ある', u'こと', u'これ', u'さん', u'して', u'くれる', u'やる', u'くださる', u'そう', u'せる', u'した', u'思う', u'それ', u'ここ', u'ちゃん', u'くん', u'', u'て',u'に',u'を',u'は',u'の', u'が', u'と', u'た', u'し', u'で', u'ない', u'も', u'な', u'い', u'か', u'ので', u'よう', u''] wordcloud = WordCloud(background_color="white", font_path="/System/Library/Fonts/ヒラギノ明朝 ProN W3.ttc", stopwords=set(stop_words), width=1024,height=674).generate(text) plt.figure(figsize=(15,12)) plt.imshow(wordcloud) plt.axis("off") plt.show() # 描画したグラフを保存 wordcloud.to_file("speech_wordcloud.png") # テキストファイルに格納した演説内容を読み込み with open('speech', 'r') as f: speech = f.read() # 読み込んだだけでは不要なテキストが含まれているので、replaceで除去 text = speech.replace('\n','').replace('\t','') t = mc.Tagger('-Ochasen') 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 wordcloud(" ".join(output))
出力した結果はこちらです!
なんとなく出来たのではないでしょうか。