PythonのWordCloudで遊んでみた【題材 : 吾輩は猫である】


きっかけ

 イベントに参加した際にの隣の席の方が使っていたのをみて将来的に役に立つ技術が学べそうだと思い、やり方を調べつつWordCloudを使ってみた。ドキュメントは →こちら

WordCloudとは

 文章中で出現頻度が高い単語を選んで、その頻度に応じた大きさで図示する手法のことである。参照

やったこと

 今回は吾輩は猫であるの小説を元にWordCloudを使い、簡単な画像の作成を行った。(以下参照)

 

※画像

小説については青空文庫のもの(前処理実施)を使用した。以下、コードと備忘録である。

 

  • ライブラリのインストールとマスク画像(猫の画像)の準備

from wordcloud import WordCloud
import MeCab
import re
from PIL import Image
import numpy as np

mask = np.array(Image.open('イメージ画像のパスを入力'))
mask = np.where(mask == 0, 255, 0)

 

  • 形態素解析で単語の抜き出しを行い、小説のデータを整形

with open("./前処理済/wagahaiwa_nekodearu.txt", mode='r', encoding='utf-8') as f:
    text_list = [i.strip() for i in f]
text = "".join(text_list)

stop_words = ['する', 'せる', 'られる', 'あの', 'する', 'ある', 'とこ', 'なる', 'ない', 'ああ', 'れる', 'さん', 'やる', 'この', 'どう', 'そう']
font_path = "/Library/Fonts/BIZ-UDGothicR.ttc"

mecab = MeCab.Tagger("-Ochasen")
mecab_str =  mecab.parse(text)
mecab_list = mecab_str.replace('\t', 't').split('\n')
lang_meta_list = [re.split('[t-]' ,lang_meta_str) for lang_meta_str in mecab_list]

for lang_meta in lang_meta_list : 
    if "助詞" in lang_meta :
        continue
    if "助動詞" in lang_meta :
        continue
    if "非自立" in lang_meta :
        continue  
    if "サ変・スル" in lang_meta :
        continue
    if "サ変接続" in lang_meta :
        continue
    #if "一般" in lang_meta :
        #continue
    if "数" in lang_meta :
        continue
    if "記号" in lang_meta :
        continue    
    else :
        try:
            lang = lang_meta[2]
            print(lang_meta)
            text_list.append("{}\t".format(lang))
        except:
            pass

text = ("").join(text_list)

 

  • WordCloudの実装

wordcloud = WordCloud(font_path=font_path, font_step=1, mask=mask, background_color="white", contour_width=1, repeat=1, contour_color='purple', colormap='Praples', stopwords=set(stop_words)).generate(text)
wordcloud.to_file("./吾輩は猫である.png")    

 

吾輩は猫である.png を開くと先ほどの
 

※画像

が出力される

 

完了

まとめ

  • 少ないコードで作成可能。
  • 見栄えが面白いのでプレゼンに使える。(※個人的意見)
  • wordcloudのパラメータがもう少し欲しい。(別のwordcloudの埋め込み等...)
  • Mecabのライブラリを楽しく学べるきっかけになる。
  • ドキュメントが多く存在するので扱いやすい。

 
今回は小説の文書を使用し、猫の画像をマスク画像としてwordcloudを行ったが、童話のストーリーを使用してその童話に出てくるキャラクターをマスク画像として出現頻度が高い単語で埋め尽くすのもおもしろいなと思った。
 
 

以上