26
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

【備忘録】日本語のワードクラウドを作る

日本語のワードクラウドを作るにはフォントのインストールが必要で少し手間がかかったのでメモ。

実行環境

Ubuntu 16.04
Python 3.6.2

ワードクラウドのライブラリ

amuellerさんが公開しているword_cloud ライブラリを使用

READMEに書いてあるとおりpip でインストール。


$ pip install wordcloud

日本語フォントのインストール

デフォルトのフォントでは日本語の表示ができないのでフォントを入れる。
こちらの記事 を参考にさせていただきました。

フォントの入手

特にこだわりはないので
Noto Sans CJK JP をリンク先のサイトで探してダウンロードしてくる。

フォントのインストール

公式サイトの通りインストールする。
シングルユーザとシステムワイドにインストールする方法があるけど、とりあえずシングルユーザにインストールする。

$ unzip NotoSansCJKjp-hinted.zip
$ mkdir -p ~/.fonts
$ cp *otf ~/.fonts
$ fc-cache -f -v # optional

ワードクラウドを作る

入力データの準備

スペース区切りのテキストを与える方法や単語と出現頻度の辞書から作る方法などがある。
今回はMeCabを使って日本語をスペース区切りのテキストにする。


from MeCab import Tagger
t = Tagger()
text = """
任意のテキストを入れる。
"""
splitted = " ".join([x.split("\t")[0] for x in t.parse(text).splitlines()[:-1]])

WordCloudの作成

引数 font_path に先程インストールしたフォントを指定する。
また、デフォルトだと2文字以上の単語しか抽出してこないため、regexpを少し変えて1文字以上の語をすべて抽出するようにした。ただし、長い文になると助詞が大量に拾えてしまうため、品詞のフィルタリングと合わせて使った方が良い。

import matplotlib.pyplot as plt
from wordcloud import WordCloud
wc = WordCloud(font_path="/home/TkrUdagawa/.fonts/NotoSansCJKjp-Regular.otf", regexp="[\w']+")
wc.generate(splitted)
plt.imshow(wc)
plt.show()

test.png

以上でワードクラウドが作れた。
ちなみにYahooニュースのトップにあったノーベル賞受賞の記事から作ったワードクラウドが下記(助詞, 助動詞は除いた)。


splitted = " ".join([x.split("\t")[0] for x in t.parse(text).splitlines()[:-1] if x.split("\t")[1].split(",")[0] not in ["助詞", "助動詞"]])

nobel.png

京都大の教授ががん治療に関するなにかをしたっぽいことがわかる。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
26
Help us understand the problem. What are the problem?