【はっきり出た】ラルクと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回以上登場する単語をプロットしました。
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回以上登場する単語をプロットしました。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ではやり方が同じなので、ラルクでのやり方だけ書いておきます。
合わせて、コーディングする際に困ったことがあったので補足もしておきます。
①『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にして、出現数が高い順に色を指定しています