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

More than 1 year has passed since last update.

posted at

updated at

Organization

結成20周年なのでPerfumeの歌詞をWordCloudで可視化してみた

perfume.png

この記事はestie Advent Calendar 2019の6日目の記事となります。
不動産ベンチャーestie.incでエンジニアやっています、まるしょうです。

はじめに

最近、こちらの記事が話題になっていましたね!
【Python】嵐の歌詞をWordCloudで可視化して、結成20年でファンに伝えたかったことを紐解いてみた

自分の好きなアイドルやアーティストが長年活躍して愛されていると、本当に嬉しい気持ちになりますよね。
ファンとして改めて彼らの言葉や、伝えたかったことを確かめたくなる気持ちがめっちゃわかります。

ところで、偶然にも同じく結成20周年を迎えたアーティストがいるんですよ

そうですみんな大好きPerfumeです。

ご存知の通りPerfumeはテクノロジーとの親和性が高く、Googleの機械学習を使ったライブ演出や5Gでのライブ配信してたりと、最先端の表現を発信し続けています。
Rhizomatiksさまさまですね。

ということで、自分も10年ほどPerfumeのライブに通っているファンの一人として
Perfumeの歌詞を形態素解析+WordCloud可視化をやってみようと思います。

環境

  • MacOS Mojave
  • Python3.8

やり方

先人達と同じく
歌詞の取得→形態素解析→WordCloud
でやっていきます。
詳しくは参考サイトをご覧ください

形態素解析ツール

あまりテキストマイニングをやったことがないので、形態素解析といったらMeCabと思っていたのですが、
調べてみるといろいろな形態素解析ツールがあるみたいです。

今回はその中から

こちらの3人組を試してみたいと思います。

MeCab

現Google日本語入力開発者の方が開発した定番の形態素解析ツールです。
環境を選ばず動作しますが、解析には別途辞書が必要です。
今回は公式に推奨されているIPA辞書+新語辞書を使いました

macab_.py
import MeCab

# 歌詞ファイルの読み込み
text_data = open("perfume.txt", "rb").read()
text = text_data.decode('utf-8')

# 形態素解析
mecab = MeCab.Tagger("-ochasen")
node = mecab.parseToNode(text)

perfume_list = []
tags = ["名詞","動詞", "副詞", "形容詞", "形容動詞"]

while node:
    #単語の抽出
    word = node.surface
    #品詞の抽出
    word_class = node.feature.split(",")[0]

    #特定の品詞のみ抽出
    if word_class in tags:
        perfume_list.append(word)

    node = node.next

print(perfume_list)

Janome

こちらもMeCabに次いでよく使われる解析ツールです。
MeCabより実行速度が劣りますが、辞書内包・依存ライブラリが少なく
pip install janome
のみでインストールが終わる手軽さが魅力です。
MeCabの前段の検証で用いられることが多いようです。

janome_.py
from janome.tokenizer import Tokenizer

# 歌詞ファイルの読み込み
text_data = open("perfume.txt", "rb").read()
text = text_data.decode('utf-8')

# 形態素解析
t = Tokenizer()
seps = t.tokenize(text)

perfume_list = []
tags = ["名詞","動詞", "副詞", "形容詞", "形容動詞"]

for _ in seps:
    #単語の抽出
    if _.base_form == '*':
        word = _.surface
    else:
        word = _.base_form

    #品詞の抽出
    ps = _.part_of_speech
    word_class = ps.split(',')[0]

    #特定の品詞のみ抽出
    if word_class in tags:
        perfume_list.append(word)

print(perfume_list)

Nagisa

こちらは比較的新しいツールです。Janomeと同様に環境構築が手軽で
pip install nagisa
でインストール完了です。
今回は歌詞なので活かせませんが、顔文字やURLに対して頑健な解析ができるようです。
品詞による出力単語のフィルタリングメソッドがあるので簡単に抽出できます。

nagisa_.py
import nagisa

# 歌詞ファイルの読み込み
text_data = open("perfume.txt", "rb").read()
text = text_data.decode('utf-8')

# 形態素解析・品詞を指定して単語抽出
tags = ["名詞","動詞", "副詞", "形容詞", "形容動詞"]
perfume_list = nagisa.extract(text, extract_postags=tags).words

print(perfume_list)

結果

  • Mecab
    mecab.png

  • Janome
    janome.png

  • Nagisa
    nagisa.png

同じ辞書を使っているMecabとJanomeは似たような結果になりましたね

おわりに

Pa Pa きっと今日もキミをloving youな気持ち ディスコディスコってところでしょうか
曲名を繰り返す楽曲も多数あるので、その影響も反映されてますね!

テキストマイニングのツールも豊富で手軽なものが増え、気軽にこのような視覚化ができるのは嬉しいです
みなさんもお好きなアーティストで試してみてはいかがでしょうか


ところで、現在私がジョインしているestieではオフィスデータを可視化することで
さまざまな不動産xテクノロジーのサービスを提供しています。
オフィス移転をお考えの方は、ぜひestieをご利用ください!
ほかにも不動産データ基盤estie proも提供してます

またestieではWebエンジニアを募集しています
Wantedly
お気軽にオフィスに遊びに来てくださいね!

参考サイト

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
4
Help us understand the problem. What are the problem?