【形態素解析】ゲスの極み乙女。の歌詞で最も使われる単語を調べてみる【Python】
最近川谷絵音さんの歌をよく聞きます。「ゲスの極み乙女。」や「ジェニーハイ」などを特に聞いています。色々騒動続きな人ではありますが、ミュージシャンという表現者は、これくらいヤンチャなほうがいいとどこかの誰かが言っていました。
それは置いておいて、川谷絵音さんの歌詞は非常に特徴的です。他のアーティストにはない感性だと思います。世の中の悶々としたなんとなく感じる空気をうまく言語化していると思います。
そこで気になったのが、どんな単語が多く使われているのかということです。これを解析したら、川谷絵音っぽい歌詞
ちょうどpython3とjanomeを使って、それを解析するコードを作成していたので今回は川谷絵音さんの歌詞を調べてみようと思います。
ゲスの極み乙女。の歌詞で最も出てくる単語は何か形態素解析する
早速解析していきますが、はじめに川谷絵音さんについて少し書いておきます。
川谷絵音さんについて
「ゲスの極み乙女。」の作詞作曲ボーカルを務める。ギターも担当しており、名実ともにゲスの極み乙女。を引っ張る存在であります。
最近では楽曲提供をしながらも、3つのグループに所属している。
とにかく作詞作曲する速度がすごく、1時間未満で楽曲を作成してしまうという離れ業を持っています。(早いといえば中田ヤスタカさんも早いです。あの人の場合5分の曲を5分で作るという更にとんでも技ですが・・・。)
最近テレビで生作曲をして見せているので、そればかり目が行きがちですが、歌詞の内容も非常に特徴的です。
人が隠している感情を歌い切るのが上手だなと思って私は聞いています。
自分が隠している感情なのに、自分で言語化するより、川谷絵音が言語化するほうがしっくりくる気がします。
心の中を見透かされているような歌詞に、女性なんかはドキッときてしまうようです。
話がそれましたが、そんな魅力的な彼の歌詞にはどんな言葉が何回使われているのかを今回集計してみようということです。
解析に使うために歌詞のテキスト情報を取得する
さて、早速解析といきたいですが、まず歌詞のテキスト情報を取得しなければなりません。これについてはソフトに頼ります。
Lyrics Masterというソフトを使って歌詞を取得します。(スクレイピングをしてもいいですが、歌詞情報サイトはスクレイピング対策をおこなっているところが大半です)
ソフトを起動してアーティスト検索します。
今回は「ゲスの極み乙女。」の楽曲に絞って解析していこうと思います。
ダウンロードは右クリックから全てダウンロードで一括取得できます。
操作する前に環境設定で「ダウンロード時に自動で保存」にチェックをいれておかないとダウンロードしてくれないので注意です。
さて、これで手元に必要なテキストファイルが揃いました。
それではこのファイルの歌詞に対して、形態素解析をかけていきます。
ゲスの極み乙女。の歌詞を形態素解析して、最も使われている単語を調べてみる
↑結果はこんな感じになりました。少し下にテキストで結果を記載しています。
単語の隣の数字は出現回数です。
調査に用いた楽曲数は85曲。
ちなみに上位に川谷絵音や、作詞作曲というのが入っているのは取得したテキストファイルのはじめに曲名と作詞作曲者が入っているためです。それは除外してみてもらえればと思います。
結果を見ていくと、「僕」という単語と、「あなた」という単語が上位に入っているのがわかります。
オトコとオンナのことを歌い上げることが多いですが、一人称は「僕」、相手を「あなた」と表現すると川谷絵音さんっぽくなる・・・のかな。
他にも注目できるのは「目」「人」「心」「声」「夢」という単語でしょうか。
これらの単語は2曲に1回は使われている計算になります。
川谷絵音の曲によく出てくる単語上位100個
- ん(211)
- 音(159)
- 絵(142)
- 川谷(140)
- 僕(138)
- 何(131)
- の(126)
- あなた(121)
- ゲス(106)
- 私(98)
- 乙女(90)
- 極み(86)
- 作詞(85)
- 作曲(85)
- こと(83)
- 歌手(81)
- 今日(59)
- 誰(58)
- それ(54)
- さ(51)
- よう(51)
- 俺(50)
- 目(48)
- 人(47)
- 君(46)
- 心(46)
- 前(43)
- 声(42)
- そう(39)
- 夢(39)
- 言葉(39)
- 僕ら(37)
- 自分(36)
- もん(36)
- 最後(36)
- 夜(35)
- これ(32)
- 時(30)
- 顔(29)
- 雨(29)
- みたい(29)
- はず(28)
- 明日(28)
- 中(28)
- 嘘(27)
- 好き(25)
- 気(23)
- 理想(23)
- 回(22)
- みんな(22)
- 的(21)
- ハイファイ(21)
- 今(20)
- 話(20)
- 両成敗(20)
- 度(18)
- 大人(18)
- もの(18)
- 幸せ(18)
- つもり(18)
- 涙(17)
- 一(17)
- ワルツ(17)
- 愛(17)
- 気持ち(16)
- 歌(16)
- 簡単(16)
- 世界(16)
- アイツ(16)
- やつ(16)
- 日(15)
- 方(15)
- まま(15)
- ー(15)
- せい(15)
- 一緒(15)
- ふり(15)
- 東京(15)
- どこ(15)
- 頭(14)
- 意味(14)
- 嫌(14)
- 記憶(13)
- 感情(13)
- 後(13)
- 関係(13)
- 本当(13)
- 日々(13)
- 先生(13)
- 街(12)
- 結局(12)
- さん(12)
- 家(12)
- 表情(12)
- 馬鹿(12)
- わけ(12)
- 内(12)
- あんた(12)
- よ(12)
- 恋(12)
川谷絵音はやっぱり凄い。他のアーティストでも試してみて比較すると面白いかも
単語を集計するにあたって、川谷絵音さんの歌詞を改めて読みました。
権利の色々があるので、掲載はできませんが人の本音を言い当てるというか、うまく言語化する感性が鋭いなと思いました。
最初はゲスの極み乙女。という言葉とビジュアルで少し敬遠していたのですが、今では毎日聞いています。ほないこかさんも休日課長もちゃんMARIも魅力的だし、なにより演奏技術の高さにいつも魅了されています。
今回ゲスの極み乙女。で試してみましたが、他のアーティストでも同じような集計をしてみて、比較すると面白いかもです。
複数のテキストファイルから文字を抽出して形態素解析をかけるpythonのスクリプト
ここからは、どうやって単語の数を集計したかの手段の説明になります。もしかすると難しい話になってしまうかもしれませんので、興味がある人だけ見ていってください。
以下ソースコードです。
import glob import codecs import re import time from janome.tokenizer import Tokenizer def re_def(self,filepass): with codecs.open(filepass, 'r', encoding='utf-8', errors='ignore')as f: #with open(filepass, 'r')as f: l = "" re_half = re.compile(r'[!-~]') # 半角記号,数字,英字 re_full = re.compile(r'[︰-@]') # 全角記号 re_full2 = re.compile(r'[、・’〜:<>_|「」{}【】『』〈〉“”○〔〕…――――◇]') # 全角で取り除けなかったやつ re_comma = re.compile(r'[。]') # 読点のみ re_url = re.compile(r'https?://[\w/:%#\\?\(\)~\.=\+\-…]+') re_tag = re.compile(r"<[^>]*?>") #HTMLタグ re_n = re.compile(r'\n') # 改行文字 re_space = re.compile(r'[\s+]') #1以上の空白文字 re_num = re.compile(r"[0-9]") start_time = time.time() for line in f: line = re_half.sub("", line) line = re_full.sub("", line) line = re_url.sub("", line) line = re_tag.sub("",line) line = re_n.sub("", line) line = re_space.sub("", line) line = re_full2.sub(" ", line) line = re_comma.sub("\n",line) #読点で改行しておく l += line end_time = time.time() - start_time print("無駄処理時間",end_time) return l def mining_txt(txt_string): text = Tokenizer()# 形態素解析用オブジェクトの生成 txt = txt_string print("読み込み完了--------------------") # txtから読み込んだデータを形態素解析 lines = txt.split("\r\n") for i in lines: #print(i) # print("\n") text_c = text.tokenize(i) # for j in text_c: # print(j) print("text.tokenize完了--------------------") # テキストを一行ごとに処理 word_dic = {} lines_1 = txt.split("\r\n") #print(lines_1) #print("\n") #1行ごとに解析開始 for line in lines_1: malist = text.tokenize(line) for w in malist: word = w.surface ps = w.part_of_speech # 品詞 if ps.find("名詞") < 0: continue # 名詞だけをカウント if not word in word_dic: word_dic[word] = 0 word_dic[word] += 1 print("解析完了--------------------") # よく使われる単語を表示 - 8 keys = sorted(word_dic.items(), key=lambda x:x[1], reverse=True) for word, cnt in keys[:100]: #print("{0}({1}) ".format(word,cnt), end="") print("{0}({1}) ".format(word,cnt)) list=glob.glob('./gesu/*') string='' for name in list: print(name) string_kashi=re_def(string,name) #file = open(name, 'r',encoding="utf-8_sig") #読み込みモードでオープン #string_kashi = file.read() #readですべて読み込む string+=string_kashi mining_txt(string)
実行環境
言語はpython3を使っています。形態素解析のためのライブラリはjanomeですね。
改めてになってしまいますが、ここでpythonの使い方やインストール方法は割愛させていただきますが、やり方を説明してくれているサイトはたくさんありますので、ご興味がある方はぜひお試しください。
使い方
作成したpyファイルと同じ場所にフォルダを用意します。
そこに歌詞のテキストをいれておきます。サンプルコードではgesuというフォルダ名になっています。
あとはコマンドプロンプトなりで作成したpyファイルを実行すると、結果がコマンドプロンプト上に表示されます。
開発環境
- Windows10
- Python 3.6.5
pip
- glob
- codecs
- re
- time
- janome(形態素解析用ライブラリ)
参考サイト
以下のサイト様を参考にさせていただきました。
形態素解析を使って色々なものの単語の出現回数を調べられてる人が多くいることがわかりました。
やり方も丁寧に説明してくださっており大変参考になります。
今回作成したスクリプトは無数のテキストファイルを1つにして、形態素解析をかけられるものなので、汎用性が高いかもと思っています。
ご自由にご活用ください。
最後に
今回作成したスクリプトは形態素解析系であれば割と使い勝手がいいかなと思います。
歌詞を抽出する部分も自動化されているので、どのアーティストでもこの検証をおこなうことができるようになりました。
どういう切り口で分析をするか考えてみましたが、例えば年代別でヒットチャートを分析してみると、どういった傾向が見られるかを集計してみるのも面白いかなと思いました。
「恋」とか「愛」とかのワードは普遍的にでてくると思いますが、もしかしたらその時代をうつすような単語が見えてくるかもしれません。
またおこなったら記事にしてみたいと思います。