python3.doc_72
最終投稿日:2022年6月18日
【WordCloud】とは
文章中で出現頻度が高い単語を複数選び出し、その頻度に応じた大きさで図示する手法です。
以下の2つのモジュールを利用します。
・Matplotlib
・MeCab
○ WordCloudのインストール
pipコマンドを叩きます
pip install wordcloud
⇒wordcloud==1.5.0
import sys
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from wordcloud import WordCloud
import requests
import MeCab as mc
print("*** 開始 ***\n")
sentence = '欅坂46が最近好きかもしれない。本当だよ~!!!'
save_img = 'can.png'
wordlist = []
anz = mc.Tagger('-Ochasen')
# メソッドチェーンにしない事
anz.parse('')
node = anz.parseToNode(sentence)
output = []
while node:
# ヘッダとフッタを除外
if node.surface != "":
word_type = node.feature.split(",")[0]
if word_type in ["形容詞", "動詞","名詞", "副詞"]:
output.append(node.surface)
node = node.next
if node is None:
break
stop_words = ['']
fpath = ('C:\Windows\WinSxS\amd64_microsoft-windows-font-truetype-msgothic'
+ '_31bf3856ad364e35_10.0.18362.113_none_2ea2fb821038eb2b\msgothic.ttc')
wordcloud = WordCloud(background_color="black",font_path=fpath,
width=600, height=400,stopwords=set(stop_words)).generate(" ".join(output))
plt.figure(figsize=(6,6))
# 描画範囲の余白をなくす
plt.subplots_adjust(left=0, right=1, bottom=0, top=1)
plt.imshow(wordcloud)
plt.axis("off")
plt.savefig(save_img)
print("\n*** 終了 ***\n")
● background_color
背景色
background_color = 'black' または、background_color = 'white'
● font_path
フォントパス
フォントの絶対パスを設定
font_path='/system/Library/Fonts/ヒラキ?ノ角コ?シック W4.ttc'
● collocations
同じ単語が2つ表示されるのを防ぐ
collocations = False
● stopwords
非表示文字列
stopwords = ['ほげ','ふ~']
● colormap
文字色の指定
参考:https://karupoimou.hatenablog.com/entry/2019/05/17/153207
inferno オレンジ、青系
magma 紫系
viridis 紫、青系
Blues 青系
BuGn 緑系
Greys グレー系
OrRd 赤、オレンジ系
PuRd 赤、紫系
YlOrBr オレンジ系
spring 黄、オレンジ、紫系
prism ごちゃごちゃ系
● width、height
サイズの指定
width=600,height=400
● scale
スケール
(width * scale, height * scale) が最終的に出力される画像サイズとなる
● font_step
文字の密集度合い。1以上の float で指定する。大きい値ほどレイアウトは疎になる
● max_words
描画する単語数の最大値
● mode
'RGB' または 'RGBA' を指定する
● relative_scaling
単語の出現数とフォントサイズの関係。[0, 1] の float で指定する
● color_func
色を返すコールバック関数
● regexp
入力の文字列を分割する際の区切り文字
● colormap
カラーマップ
● collocations
連語を1語ずつ扱うかどうか
● normalize_plurals
複数形はすべて単数形に直して扱う
● repeat
同じ単語を複数回描画するかどうか
● prefer_horizontal
文字を横方向に表示する割合。1に近いほど横方向、0に近いほど縦方向の文字の割合が増える
● mask
マスク
[255, 255, 255] でない画素にのみ文字を描画する
これを指定した場合、width, height の値は無視される
numpyを使うと便利
例)
from PIL import Image
import numpy as np
hoge = np.array(Image.open('cat.png'))
hoge = np.where(mask == 0, 0, 255)
※mask = hoge で設定
● contour_width
マスクの輪郭を描画する際の幅。0の場合、輪郭を描画しない
● contour_color
輪郭を描画する際の色