WordCloudというテキストの傾向を可視化できるツールがあります。
入力されるテキストの中から、単語の出現頻度等を調べ、頻度に応じて文字の大きさや色などを変更して、一枚の画像にして表示することができます。
以前、自分で用意したテキストファイルからWordCloudを使ってテキストを分析してみる方法について紹介を行いました。
しかし、より洗練されたデザインを目指す上では、さらに工夫が必要です。今回は、マスクを使うことでWordCloudの出力結果を任意の形状にしてみましょう。
例えば、以下のような出力結果を得ることができます。

WordCloudでマスクを使って任意の形状のWordCloudを生成するプログラム(Python)
テストデータとして、前回同様、今回はコンピュータビジョンのトップカンファレンスであるCVPR2021のAccepted paperのリストを入力してみました。以下にテキストデータにしたものを用意したので、テストしたい方は試してみてください。
さらに、今回は形状を決める「マスク」を事前に用意する必要があります。マスクは「白:表示されない」「黒:表示される」を表します。
簡単なものであればペイントツールなどでも自作できますね。今回は以下の画像を使いたいと思います。

早速、ソースコードを以下に掲載します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from PIL import Image
import numpy as np
from wordcloud import WordCloud
import matplotlib.pyplot as plt
mask_array = np.array(Image.open('mask.png'))
text = open("test.txt",encoding='utf-8').read()
wordcloud_mask = WordCloud(mask=mask_array, background_color="white", max_font_size=250).generate(text)
wordcloud_mask.to_file("word_cloud_mask_result.png")
wordcloud_mask_contour = WordCloud(mask=mask_array, contour_width=5, contour_color="steelblue", background_color="white", max_font_size=250).generate(text)
wordcloud_mask_contour.to_file("word_cloud_mask_contour_result.png")
# plt.imshow(wordcloud_mask)
plt.imshow(wordcloud_mask_contour)
実行すると2種類のWordCloudの画像が出力されます。
1枚目は上記のソースコードの10行目で「mask=mask_array」を指定したものになります。mask_arrayにハート型の画像が入っているので、ハートの黒の部分にのみ文字が表示されます。

2枚目は以下の通り枠線が入ります。ソースコードの13行目が対応箇所で「mask=mask_array, contour_width=5, contour_color=”steelblue”」のようにcontour_widthで枠線の太さを、contour_colorで枠線の色を指定することができます。

まとめ
本日はWordCloudのマスクを用いて、出力結果を任意形状にする方法を紹介しました。これにより、出力結果を洗練することができます。