ワードクラウド作成ライブラリWordCloudのmask(マスク)を試してみる

目次

WordCloud

前回、WordCloudのオプションを色々試してみて、使い方を勉強してみました。

今回は前回「面白そうなので、今度試します」と言っていたmaskとそれに関する二つのオプション(contour_width、contour_color)を試していきます。

ただし前回のままでは試すことができないので、もう少し準備が必要です。

まず文字の量が全然足りないので、形態素解析ライブラリjanomeを勉強したときの記事全文(プログラム含む)をテキストファイルにしました。

ちなみにそのときの記事がこちら。

全文をテキストファイルにしたものがこちらです。

結構適当にコピーしているので、多少前回の記事と違うところがあっても気にしないでください。

そしてもう一つ必要なものが、画像ファイルです。

どう使うかは後でのお楽しみとして、とりあえずこんな画像を用意しました。

何か分かりますでしょうか?

実はこのウェブサイト「3PySci」のロゴの「Py」の部分です。

これで準備は完了です。

それでは始めていきましょう。

テキストファイルの読み込みと形態素解析

まずはテキストファイルを読み込み、形態素解析をしましょう。

先ほどの「data.txt」をプログラムと同じフォルダに配置します。

そしてjanomeの解説の際に覚えた「分かち書き」をこちらのプログラムで行います。

from janome.tokenizer import Tokenizer

with open("./data.txt", "r") as f:
    data = f.read()

tk = Tokenizer(wakati=True)
tokens = tk.tokenize(data)

words = " ".join(list(tokens))

print(words)

前回と違うのはこちらのデータの読み込みの部分だけです。

with open("./data.txt", "r") as f:
    data = f.read()

テキストファイルを読み込むのによくやるのは、for関数を使って1行ずつ読み込むことですが、janomeには一度に渡してしまえるため、「data = f.read()」でテキストファイル全文をそのままdataに格納しています。

あとは前と同様にjanomeのtokenaizerで分かち書きに変換しています。

WordCloudのmaskを試す

それではWordCloudのmaskを試してみましょう。

プログラムとしてはこんな感じになります。

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

img = Image.open("./py_img.png")
mask_img = np.array(img)

wordcloud = WordCloud(mask=mask_img,font_path=r"/System/Library/Fonts/Hiragino Sans GB.ttc").generate(words)
wordcloud.to_file("./sample.png")

まず画像をPIL(Python Image Library)で読み込みます。

img = Image.open("./py_img.png")

PILに関しては前に解説していますので、良かったらこちらの記事をどうぞ。

そして読み込んだ画像ファイルをnumpyを使ってndarray形式に変換します。

mask_img = np.array(img)

そしてndarray形式にした画像データをmaskの引数に入れて、ワードクラウドを作成します。

wordcloud = WordCloud(mask=mask_img,font_path=r"/System/Library/Fonts/Hiragino Sans GB.ttc").generate(words)
wordcloud.to_file("./sample.png")

これで実行してみるとこんな画像が出力されます。

つまりmaskとは、読み込んだ画像の形に合わせてワードクラウドを作ってくれる機能なのです。

背景が黒ではちょっとパッとしないので、白にしてみました。

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

img = Image.open("./py_img.png")
mask_img = np.array(img)

wordcloud = WordCloud(mask=mask_img, background_color="white", font_path=r"/System/Library/Fonts/Hiragino Sans GB.ttc").generate(words)
wordcloud.to_file("./sample.png")

実行結果

やはり背景は白の方が映えますね。

contour_widthを試す

では次にcontour_widthを試してみましょう。

これはmaskと併せて使う機能なので、先ほどの背景を白にしたプログラムにcontour_widthを追加します。

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

img = Image.open("./py_img.png")
mask_img = np.array(img)

wordcloud = WordCloud(mask=mask_img, background_color="white", contour_width=5, font_path=r"/System/Library/Fonts/Hiragino Sans GB.ttc").generate(words)
wordcloud.to_file("./sample.png")

実行結果

枠線が表示されました。

ちなみにcontour_widthは数字(int)で指定しますが、その数字が枠線の太さを示しています。

contour_colorを試す

ここまで来れば、contour_colorは何か分かるかと思います。

そう、枠線の色です。

枠線を表示した先ほどのプログラムにcontour_colorを追加して枠線の色を変えてみましょう。

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

img = Image.open("./py_img.png")
mask_img = np.array(img)

wordcloud = WordCloud(mask=mask_img, background_color="white", contour_color="red", contour_width=2, font_path=r"/System/Library/Fonts/Hiragino Sans GB.ttc").generate(words)
wordcloud.to_file("./sample.png")

実行結果

枠線が赤に変わりました。

テキストの色とうまくマッチングさせれば、結構映えるワードクラウドになることでしょう。

問題はそのセンスが私には無いということで…

それにしてもjanomeもWordCloudも面白いライブラリなので、また色々と遊んでいきたいと思います。

ではでは今回はこんな感じで。

よかったらシェアしてね!

コメント

コメントする

目次
閉じる