はじめに
大学で2年後期にテキストマイニング
という講義があり、その講義でWordCloud
を作成する機会があり、面白いと感じたので個人的に作ってみました。
使用するデータ
最近よく聴いているマルシィ
というバンドの人気曲5曲の歌詞を使用します。
※個人的に特に好きな曲を選びました。
メモ帳に自身で歌詞を入力し、.txt
形式でテキストデータを作成しました。
使用した曲
・ラブソング
・幸せの花束を
・ミックス
・凪
・プレゼント
著作権について
歌詞を引用してQiitaの記事に載せると著作権侵害になる恐れがあるため、分析結果のみ載せることにします。
短いフレーズでは著作権侵害にならないという情報もありましたが、今回は歌詞および作成したテキストデータは載せない方針で進めます。
WordCloud
は歌詞が単語単位で表示されるため問題無いと判断しました。
著作権違反の可能性がある場合はご指摘いただけると幸いです。
環境
Google Colabratory
Python 3.11.11
参考サイト
WordCloud
を作成するコードを書く際に参考にしました。
作成するWordCloud
の文字の色を変更する際に参考にしました。
コード
ここからは使用したコードを紹介していきます。
詳細な説明は省略します。
Googledriveに接続する
まずはGooglecolabratoryとGoogledriveを接続します。
以下のコードを実行すればGoogledrive内にあるファイルをGooglecolabratoryで使用できる状態になります。
from google.colab import drive
drive.mount('/content/drive')
必要なライブラリやクラスを準備する
続いてWordCloud
を作成するにあたって必要なライブラリ、クラスをインストールしておきます。
import pandas as pd
import matplotlib.pyplot as plt
!pip install janome
from janome.tokenizer import Tokenizer
!pip install wordcloud
from wordcloud import WordCloud
!apt-get update -y
!apt-get install -y fonts-noto-cjk
font_path = "/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc"
matplotlib
はWordCloud
をGooglecolabratory
内で画像として描画(可視化)するために必要です。
janome
は形態素解析をするためのライブラリです。
日本語の文章を単語に分割してくれます。
wordcloud
はWordCloud
を作成し描画するために必要です。
最後の3行は日本語を正しくWordCloud
で表示するために必要です。
この日本語フォントをインストールせず実行したら文字化けを起こしました。
形態素解析・WordCloudの作成
ここから実際に形態素解析、WordCloud
の作成を行っていきます。
まず、GoogledriveのMydrive内にあるmarcy.txt
というテキストデータを読み込みます。
with open('/content/drive/My Drive/marcy.txt', 'r', encoding='UTF-8') as f :
text = f.read()
次に形態素解析を行い、名詞のみを抽出します。
t = Tokenizer()
s = []
for token in t.tokenize(text):
p = token.part_of_speech.split(",")
if "名詞" in p:
s.append(token.surface)
最後に、抽出した単語を用いてWordCloud
を作成するための設定を行います。
・width
とheight
はWordCloud
の画像サイズの指定
・background_color
は画像の背景色の指定(blackとwhiteが選択可能)
・colormap
は文字の色の指定(上記の参考サイトから選べます)
・stopwords
は画像に表示しない文字の指定
※ です
の
が
など単体で意味をなさないものを除外するため
・font_path
は文字のフォントの指定
wc = WordCloud(width=640, height=480,background_color="white",colormap = "Set2",
stopwords={"よう","こと","みたい","ん","の"},
font_path = font_path
)
wc.generate(" ".join(s))
stopwords
は1度設定無しで画像を作成してから頻出している意味の無い単語や文字を指定すると手間が省けると思います。
WordCloud
の描画
最後に作成したWordCloud
を表示します。
事前にインストールしておいたmatplotlib
の機能を使います。
plt.figure(figsize=(10, 5))
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()
実行をすると以下のような画像が表示されます。
「君」「僕」「幸せ」「大好き」といった単語が頻出であることが分かります!
最後に
今回は曲の歌詞から名詞を抽出してWordCloud
を作成してみました。
本来はTF-IDF
も含めて分析を行うことが望ましいですが、WordCloud
を作成することが主旨であったため省きました。
最後まで読んでいただきありがとうございました。