Mecab と WordCloud の使い方

Ubuntu 18.10 で Mecab と WordCloud を使うサンプルです。

Mecab のインストールはこちら
[ubuntu 18.10 に mecab をインストール](https://qiita.com/ekzemplaro/items/c98c7f6698f130b55d53)

次の記事を参考にしました。
[Python3.5でワードクラウドを描く](https://y-mattu.hatenablog.com/entry/2016/01/22/224419)

私が使った Python のバージョン

```text
$ python3 --version
Python 3.6.7
```

Ubuntu 18.10 にTakao フォントをインストールしました。

```bash
sudo apt install 'fonts-takao-*'
```

プログラム

```py:mecab_wordcloud.py
#! /usr/bin/python3
#
#	mecab_wordcloud.py
#
#							Apr/16/2019
# ------------------------------------------------------------------
import sys
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from wordcloud import WordCloud
import requests
import MeCab as mc

# ------------------------------------------------------------------
def file_to_str_proc(file_in):
	str_out = ""
	try:
		fp_in = open(file_in,encoding='utf-8')
		str_out = fp_in.read()
		fp_in.close()
	except Exception as ee:
		sys.stderr.write("*** error *** file_to_str_proc ***\n")
		sys.stderr.write(str (ee))
#
	return	str_out
# ------------------------------------------------------------------
def mecab_analysis(text):
	tt = mc.Tagger("-Ochasen -d /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd/")
	tt.parse('')
	node = tt.parseToNode(text) 
	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
	return output
#
# ------------------------------------------------------------------
def get_wordlist_from_file(file_in):
#
	text_aa = file_to_str_proc(file_in)
	text_bb = text_aa.replace('\n','').replace('\t','')
	rvalue = mecab_analysis(text_bb)
#
	return rvalue
#
# ------------------------------------------------------------------
def create_wordcloud(text,file_png):
	fpath = "/usr/share/fonts/truetype/takao-mincho/TakaoMincho.ttf"

	# ストップワードの設定
	stop_words = [ 'てる', 'いる', 'なる', 'れる', 'する', 'ある',  \
		'こと', 'これ', 'さん', 'して', \
		'くれる', 'やる', 'くださる', 'そう', 'せる', \
		 'した',  '思う',  \
		'それ', 'ここ', 'ちゃん', 'くん', '', \
		'て','に','を','は','の', 'が', 'と', 'た', 'し', 'で', \
		'ない', 'も', 'な', 'い', 'か', 'ので',  \
		'よう', '', 'れ','さ','なっ']

	wordcloud = WordCloud(background_color="black",font_path=fpath, \
		width=1024, height=1024, \
			  stopwords=set(stop_words)).generate(text)

	plt.figure(figsize=(6,6))
	plt.imshow(wordcloud)
	plt.axis("off")
#	plt.show()
	plt.savefig(file_png)
#	
# ------------------------------------------------------------------
sys.stderr.write("*** 開始 ***\n")
file_in = sys.argv[1]
file_png = sys.argv[2]
wordlist = []
try:
	wordlist = get_wordlist_from_file(file_in)
except Exception as ee:
		sys.stderr.write("*** error *** in get_wordlist_from_file ***\n")
		sys.stderr.write(str(ee) + "\n")
#
sys.stderr.write("*** check ccc ***\n")
sys.stderr.write("len(wordlist) = %d \n" % len(wordlist))
try:
	create_wordcloud(" ".join(wordlist),file_png)
except Exception as ee:
		sys.stderr.write("*** error *** in create_wordcloud ***\n")
		sys.stderr.write(str(ee) + "\n")
#
sys.stderr.write("*** 終了 ***\n")
# ------------------------------------------------------------------
```

実行方法

```bash
./mecab_wordcloud.py kozou.txt kozou.png
```

入力データ
こぞうさんの　おきょう　（新美南吉）

```text:kozou.txt
　やまでらの　おしょうさんが　びょうきに　なりましたので、かわりに　こぞうさんが　だんかへ　おきょうを　よみに　いきました。
　おきょうを　わすれないように、こぞうさんは　みちみち　よんで　いきました。

キミョ
ムリョ
ジュノ
ライ

　すると　なたねばたけの　なかに　うさぎが　いて、
「こぼうず　あおぼうず。」
と　よびました。
「なんだい。」
「あそんで　おいきよ。」
　そこで、こぞうさんは　うさぎと　あそびました。しばらく　すると、
「やっ　しまった。おきょうを　わすれちゃった。」
と　こぞうさんが　さけびました。
　すると　うさぎは、
「そんなら　おきょうの　かわりに、

むこうの　ほそみち
ぼたんが　さいた

と　おうたいよ。」
と　おしえました。
　こぞうさんは　だんかへ　いきました。そして、うさぎの　おしえて　くれたように、ほとけさまの　まえで、

むこうの　ほそみち
ぼたんが　さいた
さいた　さいた
ぼたんが　さいた

と　かわいい　こえで　うたいました。
　きいて　いた　ひとびとは　びっくり　して　目を　ぱちくり　させました。それから　くすくす　わらいだしました。こんな　かわいい　おきょうは　きいた　ことが　ありません。
　そこで、ごほうじが　すむと、だんかの　ごしゅじんは　すました　かおで、
「はい、ごくろうさま。」
と、おまんじゅうを　こぞうさんに　あげました。
「ごちそうさま。」
と　こぞうさんは　おまんじゅうを　いただいて　たもとに　いれました。
　こぞうさんは、かえりに　その　おまんじゅうを、さっきの　うさぎに　わけて　やる　ことを　わすれませんでした
```

実行結果
![kozou.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/07a83b3e-1288-4e41-b26a-080f88cfbc65.png)