読者です 読者をやめる 読者になる 読者になる

a faint gleam of light

その時思ったことを書き残す場所

V6の歌詞を解析してみた

どうもお久しぶりです。

 

今回はAdvent Calendar*1に参加する記事なので少し技術的な話も入ってくるかもしれませんが、おつきあいください。

 

Adventerから来た皆さん、過去記事は出来るだけ見ないでください。(ヲタ丸出しなので)

 

今回書くのは7月ころにやっていた歌詞解析の話です。

歌詞解析といっても歌詞を単語で分けて抽出し、最も多く使われている単語や特定の単語の使用回数を比較するなどごくごく簡単なものです。

 

わりと他の方がブログでやっている話題だったのでその時はブログには書かず、お蔵入りとなっていたのですが、

解析にSQL文を少し使っていて、来年度からデータベースを研究することになったのでこの機会に蔵出ししようかなあと思いました。

 

目次

 

歌詞解析の準備

 今回使用したソフトはこの2つです。

Lyrics Master - iPhone / iTunes / iPod で歌詞を楽しもう!

KH Coder Index Page

lyrics mastarは歌詞のデータを持ってくるため。khcoderは字句解析をするために使います。

 

まずlyrics mastarで解析をしたい楽曲の歌詞をごっそり持ってきます。今回はV6の楽曲314曲を対象にしました。曲数が多いほどおもしろい結果が出てきます。

 

そしてそれらをまとめてひとつのExelファイルにポォイするのですが300曲以上をいちいちコピペするのはめんどくさいので、

(windowsの場合)microsoftのExelを開いてAlt+F11キーで立ち上がる「Microsoft Visual Basic for Applications」を使って下のプログラムを入力します。

 

Sub Sample()
Dim myWd As String, cnt As Long
Dim myWd2 As Variant, i As Long, myFile As String
Const myF As String = "ほげほげ" '<---ここに歌詞が入ってるフォルダのアドレスを入力。

myFile = Dir(myF & "*.txt")
Do While myFile <> ""
Open myF & myFile For Input As #1
Do Until EOF(1)
Line Input #1, myWd
myWd2 = Split(myWd, " ")
cnt = cnt + 1
For i = 0 To UBound(myWd2)
Cells(cnt, i + 1) = myWd2(i)
Next i
Loop
Close #1
myFile = Dir()
Loop
End Sub

これネットから拾ってきたプログラムなので何やってるかは完全に理解できていませんが(汗)、これを入力してAlt+F8キーで実行すると

 

f:id:gleam1084:20161126172958p:plain

こんな感じで指定したフォルダ内の.txtの中身を半角スペースごとに区切って出力してくれます。

 

あとはこのファイルをkh coderで解析します。

 

基本的な解析方法

まずkh coderを立ち上げたら[プロジェクト]→[新規]→[参照]でさっき作ったexelファイルを開いてOKを押し、前処理の実行をすると

f:id:gleam1084:20161126173634p:plain

データベースの情報が表示されます。このまま[ツール]→[抽出語]→[抽出語リスト]を選択し、頻出語150語でExelファイルを吐き出させると

f:id:gleam1084:20161126174546p:plain

こんな感じで頻出単語が多い順に出力されます。この結果からV6の歌詞には「君」「僕」「今」「夢」「未来」という単語が多く登場していることが分かります。

 

SQL文を使ってみる

さあここからです。

このkh coderはSQL文でプログラムが書けるのでSQL文を使った解析の例をひとつ紹介します。(とは言ってもそんなに大層な文は書いてない)

 

アイドルといえばラブソングなので「愛」が含まれている単語がどれくらい使われているのか調べてみました。

SQL文は

SELECT genkei.name as 'words', genkei.num, khhinshi.name
FROM genkei LEFT JOIN khhinshi ON genkei.khhinshi_id = khhinshi.id
WHERE genkei.name LIKE '%愛%'
ORDER BY genkei.num DESC

 こんな感じです。簡単に説明すると”genkei”と"khhinshi"という2つのテーブルを結合させて"genkei"の中に入っている「愛」が含まれる単語とその登場回数、そして"khhinshi"に入っているその単語の品詞名を表示させるようにしてます。これを実行すると

単語     回数 品詞名

愛              153    名詞C
愛しい        31    形容詞
愛す            30     動詞
愛し合う     11     動詞
愛せる         6      動詞
恋愛             6  サ変名詞
愛情             5     名詞
親愛             4     名詞
愛し合える  2      動詞
愛する         2      動詞
愛憎             2     名詞
愛想            1      名詞
可愛い        1     形容詞
他愛           1    ナイ形容 

 こんな結果が出てきます。でもこれだと「愛」が含まれている単語が合計何個あるのか分かりづらい…なので

SELECT SUM(num) FROM genkei WHERE name LIKE '%愛%'

 と入力すると

SUM(num) = 255

と出てきます。こんな感じでより柔軟な字句解析が可能になります。

 

実際にいろいろとやってみた。

1.春夏秋冬の中で一番歌詞に登場する季節は?

春:2 夏:43 秋:3 冬:5

この結果から圧倒的に夏が多いことが分かります。「常夏VIBRATION」で連呼してるのもあると思いますが、夏曲は実際多いですよね。

 

2.過去、今、未来に関する歌詞の登場回数は?

f:id:gleam1084:20161206130051p:plain

「今」と「未来」に関する歌詞が多いことが分かります。この結果から前向きな曲が多いことが伺えます。

 

3.頻出英単語は?

これはkhcoderだとあまりいい感じに出せなかったので全歌詞が入っているExelから英単語のみを抽出し、Exel上でカウントしました。すごくめんどくさい方法でやってしまったのでやり方は紹介しないでおきます。

f:id:gleam1084:20161206132147p:plain

Beや接続詞などの1つで意味をなさない単語を省いたTOP50がこれです。やはりLOVEが多いですね。あとDANCEも上位にいるのがV6らしいなあと思います。あと1人称の"I"よりも2人称の"YOU"の方が圧倒的に多く出現しているのも面白いです。

 

とまあ、こんな感じで他にも調べられる話題、出来ることたくさんあると思うので気軽にやってみてほしいと思います。

*1:Advent Calendarは本来、12月1日から24日までクリスマスを待つまでに1日に1つ、穴が空けられるようになっているカレンダーです。WebでのAdvent Calendarは、その風習に習い、12月1日から25日まで1日に1つ、みんなで記事を投稿していくというイベントです。--Adventerトップページより引用