2021/09/18 編集:モジュール名修正しました。(matlotlib -> matplotlib)
Webサイトなんかのページ内にどんな単語がよく使われているのか?
発生頻度に応じて単語を視覚化したのがWordCloud(ワードクラウド)です。
表にして出すよりも直感的にわかるので、歌詞をワードクラウド化していたり、サイトをワードクラウド化したり、twitterをワードクラウド化していたりする方がいますね。
テキスト貼り付けるとワードクラウド作成してくれるWEBサービスもあるので結構簡単に作れます。
今回はPythonのモジュール使ってワードクラウド作ってみようと思います。
Webスクレイピングと合わせて、サイトのページのワードクラウドを自由に作れるようにしたいなぁ。
wordcloudに使うモジュールをinstall
“wordcloud”と”matplotlib”を使うので、pip使ってインストールします。
1 |
pip install wordcloud |
1 |
pip install matplotlib |
参考にしたサイトではwordcloudモジュールだけ書かれていたのですが、実行時にエラーでmatplotlibが無いと怒られました・・・
テキストファイルからwordcloudを生成
今回はローカルに保存してあるテキストファイルの中身から、wordcloudを生成していきます。
手順は次の通りです。
- テキストファイルの中身を文字列として取得
- wordcloudの生成
- wordcloudを画像として保存
1 2 3 4 5 6 7 8 9 10 11 12 |
#使用するモジュールをimport import wordcloud, codecs #テキストファイルを読み込み file = codecs.open('speech.txt', 'r', 'utf-8', 'ignore') text = file.read() #テキストからwordcloudを生成 wordc = wordcloud.WordCloud(background_color='white', width=800, height=600).generate(text) #画像ファイルとして保存 wordc.to_file('wordcloud.png') |
とある方のスピーチ(英文)をspeech.txtとして保存してあります。
それを読み込んでwordcloud化させたコードです。
テキストファイル読み込み時にcodecsモジュールも使いましたが、utf-8以外の文字が混入している際に、標準モジュールではエラーが発生してしまったので、utf-8以外の文字読み込みをスキップさせるために使ってます。
できたワードクラウドがこちら。
誰のスピーチかわかります?
型に入れ込んでいこう
ここまでだと、webサービス使えばできちゃうことなんで、
好きな形になるように調整してみます。
ワードクラウドがキャラクターの形をしていたり、雲のような形をしているのを見たことがある方いますか?
wordcloudモジュールでは好きな形でワードクラウドの生成ができるんですよ!
今回はスピーチした人に合わせた形を作っていこうと思います。
PILモジュールのImageとnumpyモジュールを追加でimportします。
1 2 |
from PIL import Image import numpy as np |
形の元になるマスク画像を読み込み、三次元配列へ変換します。
1 |
mask = np.array(Image.open('mask.png')) |
wordcloud生成時のパラメーターにmask情報を追加します。
1 |
wordc = wordcloud.WordCloud(background_color='white', mask=mask, contour_width=3,contour_color='steelblue').generate(text) |
contour_width,contour_colorは型の境界線を描くかどうかの設定です。
んで、できたワードクラウドがこちら。
Appleの元CEOであり、ピクサーの元CEOでもある
スティーブ・ジョブズ氏がスタンフォード大学の卒業式に話した内容をワードクラウドにしました。
スピーチ文はこちらからお借りしてテキストファイルに保存しました。
はまった事・・・
Pythonでワードクラウドを作る。
マスク画像を使って好きな形でワードクラウドを作る。ってモジュールが用意されているし、短いコードでできちゃうのですが、
マスク画像を指定しても形にならなくて、えぇぇ・・・となりました。
左のマスク画像ではOKですが、右のマスク画像ではダメでした。
(スマホでは上の画像がOK、下の画像はダメ)
マスク画像は白(255,255,255)で4辺を囲まれていなければダメっぽいです。
ダメだった時のマスク画像は、左辺と下辺が黒色と接していました。
画像をちょっと削って、白になるようにマスク画像を変えてなんとかできました。
色んなサイトを調べても、原因と修正箇所が出てこなかったけど
皆こんなマスク画像使わないのでしょうかね?
次は日本語をワードクラウド化させてみようと思いまーす。
コメント