お金と数字と温泉を考えるブログ

お金と数字と温泉を考えています。

【はっきり出た】ラルクとGLAYの歌詞の違いをRMeCabとWord Cloudで確かめる

ラルクGLAYの歌詞の違いをテキストマイニングして確かめる
前回の記事で、ラルクサブスクリプションサービスを開始し、その記念としてラルクGLAYの違いを(個人的印象)を1つの記事にまとめました。
umejiro330.hatenablog.com
ただ、かなり個人的見解・感覚的見解が入ってしまっていたので、今回はRのパッケージである『RMeCab』と『Word Cloud』を用いてテキストマイニングし、頻度順で登場単語の頻度を見ることで比較してみようと思います。まあ、ラルク vs GLAY というよりも hyde vs TAKUROといったところなのですが。



目次

検証編

検証前に、登場単語の予想を

テキストマイニングして結果を見る前に、登場単語を予想してみます。
ラルク
ラルクって、デビュー以来の一貫した歌詞のテーマって無いと思っているんです。メンバー4人が作曲者であるから故に、曲のテイストもバラバラなので…
ただ、あえて選ぶなら
『虹』…それでも思う 貴方のことを
HONEY』…乾いた風をからませ あなたを連れてくのさ
NEO UNIVERSE』…あなたは 風のように…
あなた
これらから、あなたが多く出ていると予想します。

GLAY
GLAYの曲で多く出てくる単語は結構明解かと思います。
『HOWEVER』…絶え間なく注ぐの名を… 
Way Of Difference』…を探し、に迷い、を知り…
『春を愛する人
アルバム『LOVE IS BEAUTIFUL
というように、愛に関して記載することが多いので、が多いであろうと予想。

準備

テキストマイニングするための手順は、
ラルクGLAYの歌詞をスクレイピングして取得する
②『RMeCab』で歌詞を名詞や動詞・形容詞・副詞など、品詞に分解する
③『Word Press』で頻度上位の単語を可視化する
という流れです。下記サイトを参考にさせていただきました。

www.randpy.tokyo
実際に用いたコードについては、別途記載いたします。

検証

ラルク
『Word Cloud』を用いて、名詞・形容詞・動詞のうち、20回以上登場する単語をプロットしました。

f:id:umejiro330:20191214104319j:plain
ラルクの歌詞 登場頻度20回以上単語
Word Cloudを用いずに頻度順トップ20に並べたのが下記です。

順位 単語 頻度
1 ' 255
2 the 250
3 195
4 I 161
5 you 160
6 , 153
7 ? 137
8 to 114
9 102
10 ! 98
11 . 96
12 in 94
13 your 94
14 91
15 90
16 is 81
17 of 91
18 あなた 80
19 me 79
20 it 75

『君』や『I』といった人称代名詞が上位に並び、ようやく14位に『夢』、15位に『今』という一般名詞が出てきます。ちなみに『あなた』は18位でした。
うーん、そこまで特徴が表れていないです。英単語が多いくらいですかね。

GLAY
ラルク同様、『Word Cloud』を用いて、名詞・形容詞・動詞のうち、20回以上登場する単語をプロットしました。

f:id:umejiro330:20191214110100j:plain
GLAYの歌詞 登場頻度20回以上単語
Word Cloudを用いずに頻度順トップ20に並べたのが下記です。

順位 単語 頻度
1 ' 239
2 あなた 215
3 ! 207
4 187
5 176
6 168
7 151
8 150
9 145
10 143
11 137
12 111
13 , 106
14 104
15 104
16 ? 99
17 95
18 93
19 I 83
20 79

『愛』については予想とピタリ賞でした。それ以後にも『夢』『今』『心』といった一般名詞が続きました。

考察

ラルクGLAYで歌詞の単語頻出度で比較してみましたが、これらを受けての個人的見解は下記の通りです。
ラルクの歌詞はGLAYに比べて一般名詞の登場回数が多い単語が少ない。また、英単語が多い。
⇒一般名詞の登場回数が多い単語が少ないということは、ある単語を別の表現で言い換えていることや、指示語が多いことなどが理由に考えられますが、私は『曲それぞれでテーマが画一ではないため』説を挙げたいと思います。
以前にも書きましたが、ラルクはメンバー全員が作曲を行うため、必然的に曲にバリエーションが生まれます。それに合わせてhydeは歌詞を書くのでテーマがばらつく、という想定です。「お菓子の詰め合わせセット」の中にポテチもグミもガムも入っていて、気づかずに全部食べちゃえるような*1、バラエティの豊かさがラルクの特徴です。

GLAYの歌詞は、『愛』『今』『人』など、ラルクに比べて一般名詞の登場回数が多い。
ラルクのところで上げた説を裏返せば、『曲のテーマが一貫している』ということになります。
具体的な曲を上げてみると、
『BELOVED』…トップ20の単語のうち、『あなた』『夢』『今』『恋』『胸』などの単語あり
Winter,Again』…トップ20の単語のうち、『あなた』『愛』『恋』『胸』などの単語あり
『とまどい』…トップ20の単語のうち、『愛』『今』『君』などの単語あり
というように、曲ごとの登場単語に重複が多いです。上記単語を見る限り人間関係をテーマにした曲が多いことが想定されます。先ほどのラルクの歌詞が「お菓子の詰め合わせセット」であればGLAYの歌詞は「色々な味が入ったキットカット」というところです。キットカットという、チョコレートであるという根底は変わらないものの、味は抹茶だったり、ビターチョコだったり、わさびだったり…それぞれがテイストを変えている、といったところでしょうか。*2

結論

「お菓子の詰め合わせセット」のラルクも、「色々な味が入ったキットカット」のGLAYも、どちらも好きです。

コード編

ラルクGLAYではやり方が同じなので、ラルクでのやり方だけ書いておきます。
合わせて、コーディングする際に困ったことがあったので補足もしておきます。
①『RMeCab』を使う前に『MeCab』をダウンロードする
多くのRMeCabについて記載のある記事ではいきなり

install.packages("RMeCab", repos = "http://rmecab.jp/R")

と記載があるのですが、そのまま進めるとRMeCabのプログラムを回そうとするとRが落ちます。RMeCabはMeCabをRで用いるためのパッケージのため、まずRMeCabをインストールしましょう。
MeCab: Yet Another Part-of-Speech and Morphological Analyzer
ワークスペースのobjectはなるべく削除しておく
①をクリアできても、Word Cloudを作る段階で改めてRが落ちました。私のパソコンのスペックが低いからかもしれませんが、Rのobjectはなるべく削除して進めましょう。サイズの大きいデータが残っていると処理が重くなる可能性もあります。

#それぞれ、インストールしていないパッケージがあれば別途インストール
library(rvest)
library(tsne)
library(magrittr)
library(stringr)
library(wordcloud)
library(wordVectors)
library(dplyr)

basic_url = "https://www.uta-net.com"
Larc_url = "https://www.uta-net.com/artist/536/"#ラルクの歌詞が記載されているURl
Larc_url_page = read_html(Larc_url)

url_list = Larc_url_page %>% 
  html_nodes(xpath = "//div[@id='artist']//table/tbody//td[@class='side td1']/a") %>%
  html_attr("href")
song_url_list = url_list[url_list %>% grep("/song/",.)]
lyrics = ""

for (i in 1:(song_url_list %>% length())){
  song_url = song_url_list[i]
  tmp_url = paste(basic_url, song_url_list[i], sep = "")
  
  tmp_lyrics = read_html(tmp_url) %>% 
    html_nodes(xpath = "//div[@id='kashi_area']") %>%
    html_text()
  
  lyrics = paste(lyrics, tmp_lyrics, sep = " ")
  Sys.sleep(2)
}
write.table(lyrics,"Larc_lyrics.txt",col.names = F,row.names = F,)

docDF_lyrics_Larc=docDF("Larc_lyrics.txt" ,type = 1)
docDF_lyrics_Larc_2 = docDF_lyrics_Larc %>% filter(POS1 %in% c("名詞"), POS2 != "非自立", TERM != ")", TERM != "(")

wordcloud(docDF_lyrics_Larc_2$TERM,docDF_lyrics_Larc_2$Larc_lyrics.txt,scale=c(3,1),min.freq=20, family ="JP1", random.color = FALSE,colors = brewer.pal(8,"Dark2"))#最低20回以上頻度がある単語、random.color:FALSEにして、出現数が高い順に色を指定しています

*1:語彙力が壊滅している

*2:例え切れていない