【実践】PythonでWordCloud(ワードクラウド)しようぜ!

当ページのリンクには広告が含まれています。

前回前々回の記事で、Pythonを使った文書の要約について紹介致しました。

これは、長文から重要な部分を抜き出すことで、文書全体の概要を素早く理解しようという試みです。

一方、単語の登場数に応じて文字のサイズを大小させて視覚化することにより、何について書かれているのか、どんなテーマなのかが一目で分かるようにする手法として「ワードクラウド」があります。

Pythonでは簡単にワードクラウドが作成できますので、その方法について紹介致します。

今回もクラス化していますので、コピペしてすぐにお使いいただけるようにしています。

目次

ワードクラウドの概要

ワードクラウドは、文書から単語(動詞、名詞)を抜き出し、その登場回数に応じて文字を大きく描画することで、文書の内容やテーマを把握しやすくする手法で、下記の様な画像が作成されます。

ワードクラウドを作成する手順は以下の様になります。

  • 形態素解析器を使って文書に含まれる単語を全て抽出する
  • WordCloudのライブラリに抽出結果を投入する。

インストール方法

インストール手順は次の様になります。

日本語対応について

wordcloud のライブラリは日本語に対応していないので、日本語フォント(TTFファイル、又はTTCファイル)を指定する必要があります。

Windows環境であれば標準の日本語フォントを指定するだけでOKですが、英語版Linuxを使っていたり、日本語フォントの場所が分からない場合は、無料で使えるIPA Fontがあるので、これをインストールして下さい。

Qiita
IPAフォントのダウンロード方法と使い方 - Qiita IPAフォントとは、一般社団法人「文字情報技術促進協議会」が公開している無料の日本語フォントです。Windowsアプリを Visual Studio で開発する場合、ほぼ使う機会はあり...

Windowsの場合は C:\Windows\Fonts にインストール済みのフォントが格納されています。

使いたいフォント名を右クリックし、プロパティを表示するとフォントの場所とフォントのファイル名が表示されるので、wordcloudのインスタンス生成時にこのパスとファイル名を記述します。

ちなみに、ここに表示されていても、実際は別の場所にインストールされている場合がありますが、これもプロパティで確認できます。

逆に、右クリックしてもプロパティが表示されないフォントが存在しますが、これはサブフォルダに格納されているからです。

「開く」をクリックするとサブフォルダが開くので、ファイル名を右クリックするとプロパティが表示されます。

ライブラリのインストール

形態素解析器は何でも良いのですが、ここでは janome を利用します。

janomeについての詳細はこちらをご覧ください。

あらかじめ、pip で janome と wordcloud のライブラリをインストールします。

#Python公式サイトからPythonをインストールした方
pip install wordcloud
pip install wordcloud

#anaconda経由でPythonをインストールした方
conda install -c conda-forge janome
conda install -c conda-forge wordcloud

wordcloudの使い方

wordcloud を import した後、次の手順でワードクラウドを作成することが出来ます。

上記のプログラムを実行すると、下記の画像が生成されます。

単語数が少ないということもありますが、デフォルトだちょっと寂しめの画像になりました。

ワードクラウド作成クラスについて

では、さっそく文書要約クラスの概要、リファレンス、ソースコードの順に紹介していきたいと思います。

クラスの概要

read_file 又は read_text メソッドでワードクラウド化したい文書を読み込み、create メソッドでワードクラウド画像を生成します。

リファレンス

クラス名は WordClowdMaker で、メソッドは次の6つがあります。

機能メソッド仕様戻り値補足
コンストラクタ__init__(
text=None, #入力文書
font_path=None, #フォントパス
width=800, #画像横サイズ
height=600, #画像縦サイズ
min_font_size=15 #最小サイズ
)
ファイル読み込みread_file(
filename, #入力ファイル名
 encoding='utf-8' #エンコード名
)
なし
テキスト読み込みread_text(
text #入力文書
)
なし
ワードクラウド
の実行
create(
path, #出力画像のパス
exclusion =[] #除外単語リスト
)
なしexclusion =[’初代','基本'・・・]
ワードクラウド
画像の生成
generate_wordcloud(
path, #出力画像のパス
words #分かち書きテキスト
)
なし
単語の抽出extract_words(
text,
exclusion=[] #除外単語リスト
)
分かち書きテキストexclusion =[’初代','基本'・・・]

プロパティは次の6つがあります。

意味メソッド仕様値の例補足
フォントのフルパスfont_path'C:/Windows/Font/xxxx.ttf'
ワードクラウドしたい文書text'今日の夕食は牛丼'
画像の背景色background_color'white'
画像の横サイズwidth800
画像の縦サイズheight600
最小フォントサイズmin_font_size15

使い方

クラスの使い方は次の通りです。

下記は、Pドライブに置いた startreck.txt ファイルに対してワードクラウドを作成するサンプルコードです。

画像の出力先はPドライブ直下になっていますが、必要に宇治手皆さんの環境に合わせて変更をお願いします。

下記は startreck.txt の中身です。

スタートレックは、22世紀から24世紀の話である。設定では、2026年から2053年にかけて発生した第三次世界大戦により、6億人の犠牲者と文明の崩壊が起きている。2063年にゼフラム・コクレーンがワープエンジンを開発、試験飛行中にバルカン時に発見され、ファーストコンタクトを果たした。 2151年には初代エンタープライズ号「NX-01」が竣工し、クリンゴンとのファーストコンタクトを果たしている。2153年にロミュラン人との戦争が勃発、2161年に地球連合、バルカン、アンドリアが中心になり惑星連邦が設立された。 地球人は銀河系内の約4分の1の領域に進出し、様々な異星人との交流を行っている。 既に貧困や戦争などは根絶されており、見た目や無知から来る偏見、差別も存在しない、理想的な世界となっている。 レプリケーターの登場により貨幣経済は無くなり、人間は富や欲望ではなく人間性の向上を目指して働いている。 しかし、個人財産は存在しており、ワイナリーや宇宙船を所有する一部の恵まれた人々が存在する。 惑星連邦の本部はパリにあり、宇宙艦隊の本部はサンフランシスコに存在する。 惑星連邦内では軍事力による紛争が根絶されたが、クリンゴン帝国やロミュラン帝国、カーデシア連合などの侵略的な星間国家とは必ずしも良好な関係を築けていない。 『スタートレック:エンタープライズ』では惑星連邦設立以前の時代を、『スタートレック:ディスカバリー』では、地球連合やバルカン星などが脱退、惑星連邦が瓦解した32世紀の世界が描かれている。 長く続く作品では、これまでの作品を「なかったこと」にし、設定を一新することがしばしばあるが、スタートレックのシリーズではほぼすべての作品が同じ宇宙を共有している。 一方、作品の根幹としてマルチバースの概念が取り入れられ、物語の主軸として描かれている宇宙とは異なる平行宇宙(パラレルワールド)が登場することもある。 劇場版第11作から劇場版第13作まではリブート作品ではあるが、タイムトラベルの影響で歴史が変わったという設定で、シリーズとしての連続性は保たれている。 タイムトラベルを扱った作品はスタートレックの中でしばしば登場し、異なる歴史を持つパラレルワールドがいくつも存在している。

出力した結果は以下の様になりました。

スタートレックというキーワードが「スター」と「レック」の2単語で認識されてしまったようです。

この辺は、辞書を登録するか、辞書に NEologd を使うことで解決できるでしょう。

ソースコード

クラスのソースコードは次の通りです。

まとめ

今回はワードクラウドのライブラリ wordclowd のインストール方法、使い方、そしてこれを使った自作クラスの説明、ソースコードについて紹介しました。

このクラスを使うと、簡単にワードクラウドが作成できますので、とりあえずワードクラウドがしたいという型は、コピペしてお使いください。

実際にワードクラウドを書くと、不要な単語が目に付くと思いますが、その時は 除外単語リストに記述してもらえれば除外可能です。

今は名詞だけですが、extract_words メソッドの中で動詞を含めることも可能です。

フォントを変更してみたり、色々とお試しください。

この記事が皆様のお役に立てれば幸いです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次