1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

曲の歌詞からWordCloudを作成する

Last updated at Posted at 2025-02-12

はじめに

大学で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"

matplotlibWordCloudGooglecolabratory内で画像として描画(可視化)するために必要です。

janomeは形態素解析をするためのライブラリです。
日本語の文章を単語に分割してくれます。

wordcloudWordCloudを作成し描画するために必要です。

最後の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を作成するための設定を行います。
widthheightWordCloudの画像サイズの指定
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()

実行をすると以下のような画像が表示されます。

image.png

「君」「僕」「幸せ」「大好き」といった単語が頻出であることが分かります!

最後に

今回は曲の歌詞から名詞を抽出してWordCloudを作成してみました。
本来はTF-IDFも含めて分析を行うことが望ましいですが、WordCloudを作成することが主旨であったため省きました。
最後まで読んでいただきありがとうございました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?