Google Colab でWordCloudをつくる

Google Colaboratory を使ってWordCloudを作ってみた際の覚書。

まずはWordCloudを表示するためのフォントをインストールする。

!apt-get -y install fonts-ipafont-gothic

最小限必要なモジュールをインポートして、

from wordcloud import WordCloud
from google.colab import files
import codecs
import matplotlib.pyplot as plt

テキストファイルを読み込む。

r = files.upload()
list(r.keys())
path = list(r.keys())[0]
file = codecs.open(path,'r', 'utf-8', 'ignore')
text = file.read()
text

読み込んだファイル内容からWordCloudを作成する。

wordcloud = WordCloud(font_path = '/usr/share/fonts/truetype/fonts-japanese-mincho.ttf', background_color="white", width=1000,height=400).generate(text)
plt.figure(figsize=(15,12))
plt.imshow(wordcloud)
plt.axis("off")
plt.savefig("word_cloud1.png")

英文であれば、これだけでWordCloudが出来上がる。

とりあえず試す

オリジナルの文章としてボランティアで翻訳したアランケイの『あらゆる年齢の「子供たち」のためのパーソナルコンピュータ』の文章からWordCloudを作ることにする。

https://swikis.ddo.jp/abee/74

先程のコードに対して、上のサイト文章をテキストファイルにしたものを、そのまま流し込んでWordCloudを作成してみたら以下のようになった。

日本語訳なのに英単語が目立つ。参考文献中の英文がひろわれているので、本文の内容を反映しているとは言い難い。

形態素解析した結果からWordCloudを作る

日本語の場合は形態素に分解し、分かち書きしたものを流し込むとうまくいくらしい。そこでJanome を使って形態素解析してみた。まずはJanome のインストールから。

!pip install janome

Janome のTokenizer を使って一般名詞と固有名詞を抜き出す。

from janome.tokenizer import Tokenizer
token = Tokenizer().tokenize(text)

import re
words = []
for line in token:
  tmp = re.split('\t|,', str(line))
  if (tmp[1] in ["名詞"]) and (tmp[2] in ["一般", "固有名詞"]):
    words.append(tmp[0])
result = " " .join(words)
result

その結果からWordCloudを作る。

wordcloud = WordCloud(font_path = '/usr/share/fonts/truetype/fonts-japanese-mincho.ttf', background_color="white", width=1000,height=400).generate(result)
plt.figure(figsize=(15,12))
plt.imshow(wordcloud)
plt.axis("off")
plt.savefig("word_cloud2.png")

結果として以下のWordCloudが得られた。

今度はそれっぽい感じに出来上がった。よく見るとおかしな単語も混じっているので、ワードリストを調整したほうがいいかも。

Colab へのリンク

https://colab.research.google.com/drive/1y4EcbrPwQyzWJvPPwPOAnKus_M-6Wa4I?usp=sharing

参考

https://qiita.com/sugarcoder18/items/e66f6043fc17528f81ab

https://self-development.info/wordcloud%EF%BC%88%E3%83%AF%E3%83%BC%E3%83%89%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%EF%BC%89%E3%82%92%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%81%A7%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E3%80%90python%E3%80%91/