Mr. Children 未完の歌詞でWord Cloudをつくってみた

Mr. Children 未完 Word Cloud

好きな歌詞を使ったWord Cloud

Mr. Childrenの名曲「未完」の歌詞を使って、Word Cloudなるものを作ってみました。アイキャッチ画像にあるように、使用頻度や重要度に応じて、単語の大きさや配置を調整したものがWord Cloudです。デザインもきれいで簡単なインテリアになりそう(?)です。

最近ニューアルバム「重力と呼吸」をリリースしたばかりのMr. Childrenですが、今回のWord Cloudを作るにあたり、ニューアルバムからではなく、前作の「REFLECTION」から楽曲を選んでいる点には、どうか目をつぶってください。

このWord Cloudは最近ハマッているプログラミング学習の一環として取り組んでみました。

プログラミングの手順

プログラミング言語はPythonを使っています。まだプログラミングの初心者なので、すべてのコードを見せる度胸はないのですが、次のような手順で作成しています。

  1. 歌ネット」をウェブスクレイピングし、Mr. Children「未完」の歌詞を入手する。
  2. MeCab(形態素解析エンジン)を使って、歌詞を解析し、名詞・形容詞・副詞のみ吸い出す。
  3. Word Cloudのモジュールを使って、吸い出した単語を画像に流し込む。

という感じです。

Word Cloudを実際に作る際に参考にした、というか、コードをそのまま拝借したサイトは、こちらのGenerating WordClouds in Pythonという記事からです。

Pythonのソースコード

Word Cloudを作るところのソースコードだけ載せておきます。

意外と苦労したのは、マスク処理された鳥の形の画像(ソースコードのbird_mask.pngのところ)がうまく処理されなかった点。手軽に透明pngという画像処理ソフトで画像を加工したらうまくいきました。

そのうちプログラミングにも慣れてきたら、一連のソースコードを掲載できるようにしていきたいと思います。ではその時まで。

from wordcloud import WordCloud
from PIL import Image
import numpy as np
from os import path
import matplotlib.pyplot as plt

wine_mask = np.array(Image.open("bird_mask.png"))
wine_mask = wine_mask.reshape((wine_mask.shape[0],-1), order='F')

def transform_format(val):
if val == 0:
return 255
else:
return val

# Transform your mask into a new one that will work with the function:
transformed_wine_mask = np.ndarray((wine_mask.shape[0],wine_mask.shape[1]), np.int32)

for i in range(len(wine_mask)):
transformed_wine_mask[i] = list(map(transform_format, wine_mask[i]))

# Check the expected result of your mask
#transformed_wine_mask

# Create a word cloud image
wc = WordCloud(background_color="white", max_words=1000,font_path="C:\Windows\Fonts\meiryo.ttc",mask=transformed_wine_mask,contour_width=3, contour_color='steelblue')

# Generate a wordcloud
wc.generate(" ".join(keywords))

# store to file
wc.to_file("mrchildren.png")

# show
plt.figure(figsize=[20,10])
plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.show()

Mr. Children 未完 Word Cloud

シェアする

  • このエントリーをはてなブックマークに追加

フォローする