趣旨
Pythonを勉強してたらmecabに興味を惹かれたので、試してみました。
mecabを利用して乃木坂、欅坂、日向坂(櫻坂は曲数が極端に少ないので除く)の全ての曲の歌詞を解析しました。(内訳:乃木坂 207曲, 欅坂60曲, 日向坂34曲, けやき31曲の計332曲)。
留意すべき点として、これらの楽曲は全て秋元康先生が作詞していることが挙げられます。
利用した歌詞
https://j-lyric.net/ に掲載されている歌詞を手動でテキスト化しました。
別のサイトで、APIを利用して歌詞を取得する方法もあるようなのですが、有料APIだったのと、歌詞の表記揺れが気になったので、歌詞を目視で確認しつつ手動でテキスト化しました。
案の定、同じ歌詞サイトにも関わらず歌詞の中に表記揺れが散見されました。
例1:難しい漢字にカッコでルビが振ってある場合と無い場合がある(辿々(だとだと)しい)
例2:サビの部分の繰り返しを「※サビ1をもう一回」的な省略
歌詞の精度を上げることに労力を割きたくなったので、今回は許容しています。
結果(乃木坂+欅坂+日向坂+けやき坂 頻出名詞Top20)
- こと : 651
- WOW : 354
- 今 : 302
- 自分 : 276
- 愛 : 242
- 恋 : 240
- もの : 235
- 人 : 211
- 夢 : 196
- 心 : 179
- 日 : 173
- まま : 170
- Oh : 166
- 一 : 163
- 度 : 150
- 空 : 142
- 世界 : 137
- 風 : 136
- 時 : 136
20 前 : 130
坂道グループはウォウウォウ言ってるイメージだったのですが、どうやらその通りのようです。
他の名詞は、アイドルっぽい名詞が並びました。特に、愛や恋、夢などが目立ちました。
夢見るシャンソン人形ではないですが、恋をすることが出来ないアイドルが恋について歌っているのは、idol(偶像)の運命なのかなと思ったり。。。
※各グループ別の頻出名詞については僕のブログに記載してます。
コード
import MeCab
import collections
import sys
def mecab_list(text):
tagger = MeCab.Tagger("-Owakati")
tagger.parse('')
node = tagger.parseToNode(text)
word_class = []
while node:
word = node.surface
wclass = node.feature.split(',')
if wclass[0] != u'BOS/EOS' and node.feature.split(',')[0] == u"名詞":
word_class.append((word))
node = node.next
return word_class
# 対象ファイルを開く
file_path = sys.argv
with open(file_path[1], 'r') as ly:
lyrics_string = ly.read()
# 改行を削除し、全角スペースを半角スペースに変更する
lyrics_string = lyrics_string.replace('\n', '').replace(' ',' ')
result = mecab_list(lyrics_string)
# counterで出現数を数え、多い順に出力する。
cnt = collections.Counter(result).most_common()
for k, v in cnt:
print(f"{k} : {v}")
歌詞側のファイルは著作権の都合上、ここには記載しませんが、各グループの歌詞を一つのテキストファイルにまとめたものとなっています。
結構ザルな感じがあるコードのわりには、それっぽい名詞を抜き出せたかなと思います。
今後について&思ったこと
- 秋元康先生は「川の流れのように」(1989)のような名曲も作詞されています。坂道やAKB以外で作詞された曲の歌詞を集めて頻出名詞を抜き出すと、また違った雰囲気になりそうなので試してみたいです。
- 今回対象となった歌詞は、日本語の文章とは少しかけ離れた文法なので、フォークソングのような、語りかけるような曲だと精度が上がるかもしれません。
- コードもまだまだ未熟な部分が多いので、修正していきたいです。