PythonでWord Cloudを作ってみた(和文編)

Pythonでワードクラウドを作ります。ベースになる文章を和文にしてみます。

目次

  1. MeCabとwordcloudモジュールで日本語のワードクラウドを作る
  2. 「こころ」をワードクラウドにしてみた

MeCabとwordcloudモジュールで日本語のワードクラウドを作る

Pythonではwordcloudモジュールで簡単にワードクラウドが作れます。

ただしちょっと問題なのは、単語の区切りが空白文字(スペースなど)なところです。日本語はスペースで単語を区切りませんからね。

ということは、何らかの手段で文章から単語を切り出さなければならないわけです。

そこで今回はMeCabというツールを使用します。これは形態素解析という文章を解析するためのツールです。MeCabを使用するためにはMeCabとMeCabのPythonバインディングをインストールする必要があります。MeCabは 公式サイト などから、 Pythonバインディング はpipでインストールできます。

「こころ」をワードクラウドにしてみた

kokoro.txtという青空文庫からダウンロードしたテキストファイルから、ワードクラウドを作ってみます。テキストファイルは、文字コードをutf-8に変換しておいてください。

import MeCab
from matplotlib import pyplot as plt
from wordcloud import WordCloud

# テキストファイル読み込み
with open('kokoro.txt', mode='rt', encoding='utf-8') as fi:
    source_text = fi.read()

# MeCabの準備
tagger = MeCab.Tagger()
tagger.parse('')
node = tagger.parseToNode(source_text)

# 名詞を取り出す
word_list = []
while node:
    word_type = node.feature.split(',')[0]
    if word_type == '名詞':
        word_list.append(node.surface)
    node = node.next

# リストを文字列に変換
word_chain = ' '.join(word_list)

# ワードクラウド作成
W = WordCloud(width=640, height=480, background_color='white', colormap='bone', font_path='C:\Windows\Fonts\yumin.ttf').generate(word_chain)

plt.imshow(W)
plt.axis('off')
plt.show()

まず、テキストファイルを読み込みます。open/closeではなくてwithを使うとファイルのクローズ忘れがなくなるので便利です。

MeCab.Tagger()を呼び出してオブジェクトを作ります。

tagger.parse('') というのは、MeCabのエラー避けです。

tagger.parseToNode() にテキストを渡してオブジェクトを作ります。テキストが分解されてこのオブジェクトに入るような感じになるのですが、1つ呼び出したら次、次を呼び出したらその次、という感じで中身を取り出していきます。(実際にはポインタになってるらしいです。)

というわけで、whileループで1つずつオブジェクトを処理していきます。今回は、品詞が名詞のものだけを取り出して、リストに追加していきます。

' '.join() は、スペースを区切り文字にしてリストの全要素を結合するという処理です。

あとはできあがったテキストをwordcloudオブジェクトに渡して、matplotlibで描画します。パラメーターなどは こちら を参照してください。このときfont_pathに日本語フォントを指定しないと、豆腐が表示されます。

というわけでできあがったのがこちらです。

ワードクラウド例

何の小説かわかりますか?

公開日

広告