wordcloudはワードクラウド(タグクラウド)を作成するPythonのパッケージです.
Webサイトや口コミ,小説等から取得したあるテキストから単語の出現頻度をカウントし,よく使われている単語を強調して図示します.

目次

  1. テキストファイルの読み込み
  2. 日本語テキストの場合
    1. 形態素解析
    2. 除去する単語のリスト作成
    3. リスト化
  3. 生成
  4. 出力

テキストファイルの読み込み

input.txtを変数textに格納します.

with open('input.txt', 'r', encoding='utf-8') as f:
text = f.read()

日本語テキストの場合

読み込んだテキストが日本語である場合,スペース区切りになっていませんから,そのままではワードクラウドを作ることができません.
そこで,MeCabを使用してスペース区切りテキストにします.

形態素解析

pip3 install MeCabにより,予めMeCabをインストールしているものとします.
このとき,変数textのテキストを形態素解析するには

import MeCab

tagger = MeCab.Tagger()
tagger.parse('')
node = tagger.parseToNode(text)

とします.
いま,変数nodeには各単語が文法的な情報とともに入っています.

除去する単語のリスト作成

テキストには,あまり重要でないもの(例えば,「もの」・「こと」や指示代名詞「あれ」・「これ」)があるでしょう.
除去する予定の単語をリストにしておきます.

stop_words = ['もの', 'こと', 'あれ', 'これ']

リスト化

変数nodeから特定の品詞で,かつ,除去リストstop_wordsに含まれないものを抽出します.

word_list = []

while node:
word_type = node.feature.split(',')[0]
word_surface = node.surface.split(',')[0]
if word_type == '名詞' and word_surface not in stop_words:
word_list.append(node.surface)
node = node.next

リストをスペース区切りテキストに変換します.

text = ' '.join(word_list)

生成

さて,スペース区切りテキストが格納された変数textから,以下のようにしてワードクラウドを生成します.
フォントへのパスやマスク画像は適当に選択ください.

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

wordcloud = WordCloud(
background_color = 'white',
font_path = 'path/to/file',
mask = np.array(Image.open('mask.png')),
contour_width = 1,
contour_color = 'black',
stopwords = set(stop_words)
).generate(text)

出力

生成したワードクラウドを出力します.

wordcloud.to_file('output.png')