GMOアドマーケティングのT.Oです。
今回は日本語テキストをワードクラウドで可視化します。
開発環境として、Google Colaboratory(以下、Colabと略)を利用します。
またワードクラウドを生成するためのPythonライブラリであるWordCloudを使用します。
0.ワードクラウドとは?
ワードクラウドはテキストに含まれるキーワードの出現頻度にあわせて文字の大きさを変えて視覚化したものです。どのような単語がよく使われているか視覚的にとらえやすくなります。
1.MeCabのインストール
Colabに日本語を形態素解析するためのツールであるMeCabをインストールします。
1 2 3 4 5 6 7 |
!apt-get -y install mecab libmecab-dev mecab-ipadic mecab-ipadic-utf8 !git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git !sudo apt install file !yes yes | mecab-ipadic-neologd/bin/install-mecab-ipadic-neologd -n -a !pip install mecab-python3 > /dev/null !pip install unidic-lite !apt -y install fonts-ipafont-gothic |
2.テキストファイルアップロード処理
テキストファイルをローカル環境からColab環境にアップロードする処理を実装します。
1 2 3 4 5 6 7 8 |
from google.colab import files import chardet uploaded = files.upload() file_name = next(iter(uploaded)) with open(file_name, 'rb') as f: file_encoding = chardet.detect(f.read())["encoding"] with open(file_name, encoding=file_encoding) as f: text = f.read() |
3.形態素解析処理
アップロードされたテキストファイルを形態素解析し、WordCloudを利用するための文字列に変換します。
*) この部分を実行すると変数word_chainに文字列が設定されます。
視覚的な確認はできないのですが、次の「4.ワードクラウド表示」を実行すれば結果を確認できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import MeCab from wordcloud import WordCloud import matplotlib.pyplot as plt tagger = MeCab.Tagger() tagger.parse('') node = tagger.parseToNode(text) # 名詞のみ取り出す word_list = [] while node: word_type = node.feature.split(',')[0] if word_type in ["名詞"]: word_list.append(node.surface) node = node.next # word_listを文字列に変換する word_chain = ' '.join(word_list) |
4.ワードクラウド表示
形態素解析した結果をWordCloudを利用して表示します。
1 2 3 4 5 6 7 |
# ワードクラウド表示 font_path_gothic = '/usr/share/fonts/opentype/ipafont-gothic/ipagp.ttf' result = WordCloud(width=800, height=600, background_color='white', font_path=font_path_gothic).generate(word_chain) plt.figure(figsize=(12,10)) plt.imshow(result) plt.axis('off') plt.show() |
5.実行例
5.1.可視化するテキストを用意する
今回は青空文庫の「吾輩は猫である」のページからテキストファイル(ルビあり)のzipファイルをダウンロードし、それを解凍してローカルPCに保存します。
5.2.プログラムの実行
「1.MeCabのインストール」〜「2.テキストファイルアップロード処理」を順に実行します。
「ファイル選択」ボタンが表示されますので、5.1.でローカルPCに保存したテキストファイル(wagahaiwa_nekodearu.txt)を指定します。
続いて「3.形態素解析処理」〜「ワードクラウド表示」を実行します。
実行結果は以下のようになりました。
6.表示の調整
「5.実行例」ではワードクラウド表示に「吾輩」、「猫」が含まれていませんでした。
「吾輩」は代名詞で「3.形態素解析処理」で「名詞」のみ取り出したため含まれなかったようです。
また「猫」についてはWordCloudがデフォルトでは1文字のみの単語を表示しない仕様となっているために含まれませんでした。
そこで以下のように変更します
6.1.形態素解析処理の変更
「3.形態素解析処理」で形態素解析処理で名詞にくわえて代名詞を取り出すように変更します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import MeCab from wordcloud import WordCloud import matplotlib.pyplot as plt tagger = MeCab.Tagger() tagger.parse('') node = tagger.parseToNode(text) # 名詞,代名詞のみ取り出す word_list = [] while node: word_type = node.feature.split(',')[0] if word_type in ["名詞", "代名詞"]: word_list.append(node.surface) node = node.next # word_listを文字列に変換する word_chain = ' '.join(word_list) |
6.2.ワードクラウド表示の変更
「4.ワードクラウド表示」で1文字の単語を含み表示するための指定(regexp=r”[\w’]+”)を追加します。また表示結果に含まれてほしくない単語を取り除くための指定(stopwords)を追加します。
1 2 3 4 5 6 7 8 |
# ワードクラウド表示 font_path_gothic = '/usr/share/fonts/opentype/ipafont-gothic/ipagp.ttf' words = ["私","わたし","僕","あなた","みんな","ただ","ほか","それ", "もの", "これ", "ところ","ため","うち","ここ","そう","どこ", "つもり", "いつ","あと","もん","はず","こと","そこ","あれ","なに","傍点","まま","事","人","方","何","時","一","二","三","四","五","六","七","八","九","十"] result = WordCloud(width=800, height=600, background_color='white', font_path=font_path_gothic, regexp=r"[\w']+", stopwords=words).generate(word_chain) plt.figure(figsize=(12,10)) plt.imshow(result) plt.axis('off') plt.show() |
6.3.表示調整後の実行例
変更後、「3.形態素解析処理」〜「4.ワードクラウド表示」をColabで再実行します。
実行結果は以下のようになりました。吾輩や猫が含まれています。
7.まとめ
日本語テキストをワードクラウドで可視化する手順をご紹介しました。アップロードするテキストファイルを変更することで様々な分析が可能です。今回の内容が皆さんのお役に立てれば幸いです。