5日と20日は歌詞と遊ぼう。

歌詞を読み、統計したりしています。

MeCabを使ってAKB48グループの1072曲の人称代名詞を調べてみた!

こんにちは。

わたしは音楽系のブログとかってほとんど見ないんですけど、ひとつ例外があります。
d.hatena.ne.jp
ここです!
根性マイニング系の記事がいつもめっちゃ楽しくて、かつ狂気です…。
年別の「桜」ソング集計とか、
2017-04-23
「現役女性アイドルグループの有料単独公演の最大キャパ」とか…どうなってるんだろう。
2017-04-21
これだけの情報量があるのに、集計に対する苦労話みたいなのがまったくないのがおかしいよね……!!

ところで今回、わたしが注目と思ったのはこれです。
d.hatena.ne.jp
AKB48グループの歌詞の人称確認」です。
めっちゃたのしくないですか?

曲ごとに主人公が男性目線か/女性目線かと、テーマがまとまってるんですけど、これ内容から察するに手作業のはずなんですよ!(どうなってるんだよ!)

でもこの記事は1年前のものです。あれから欅坂46は曲が少し増えたし、NGT48が新しくデビューしました♪

というわけで、わたしもこれをやってみることにしました。

わたしはテクノロジーを使うぞ! テクノロジーはとくいなんだ!!
(結局手作業と同じぐらい時間かかりました)

方針

わたしは今回、人称代名詞を一人称と二人称の両方で集計しようと思いました。代わりに曲のテーマには踏み込まないことにします。

対象は、AKBグループの曲のできるだけ多くとします。
数は以下の通りとなりました。合計は1072曲です。

グループ名
AKB48 554
SKE48 180
NMB48 133
HKT48 57
NGT48 9
乃木坂46 127
欅坂46 13

人称代名詞は、Wikipediaの項目から当たりをつけたあとで、MeCabを使って自動的に探り出すことにします。
Wikipediaの項目は以下の通り。
日本語の一人称代名詞 - Wikipedia
「日本語の一人称代名詞」の中の「一人称単数代名詞の一覧」から抽出。
日本語の二人称代名詞 - Wikipedia
「日本語の二人称代名詞」の中の「二人称単数代名詞」から抽出。ただし、一人称と重複するもの(僕、我、じぶん(自分)を除外*1)。

ここから、ipadicと重複するものだけを今回の対象としました。MeCabを使って自動的に探り出します。ipadicを使い、間違いは手動で修正しません。「mecab -D」すると「version: 102」と表示されました。

その結果、下記の人称代名詞がみごと当選しました! この記事では前者を一人称代名詞、後者を二人称代名詞として接しようと思います。よろしくお願いします!

    fpp = {'オイラ', '吾輩', 'あたい', 'ボク', 'あたし', '私', 'おら', 'こちら', 'オレ', 'わがはい', 'わし', 'ぼく', '小生', 'われわれ', '余', 'わい', '僕', 'わたくし', '我々', 'おれ', 'おいら', 'あちき', '俺', 'わたし', 'われ'}
    spp = {'あなた', 'わい', 'キミ', 'きみ', 'おのれ', 'あんた', 'お前', '君', 'てめぇ', 'そち'}

集計する!

というわけで、やってみます。
歌詞はそれぞれ個別のテキストファイルに書き出して、グループごとに分けて保存しました。

本来であればDBを使う(SQLiteがいいのかな?)か、データ記述言語(JSONとか)にするほうがいいような感じがするんですが、ファイルがあるとあんしんするんだよな…。ちゃんと勉強しよ…。

さてこれに対して処理を進めてみます。

歌詞から人称代名詞を検出するコードを書きました。ハードコーディングよくないって聞いたことがあるけどじっさいどうすればいいのかわからないです!

def detectpp(lyric):
    import MeCab
    # import jaconv
    # Wikiediaの該当項目の中から、ipadicに入っているものを採用しました。
    fpp = {'オイラ', '吾輩', 'あたい', 'ボク', 'あたし', '私', 'おら', 'こちら', 'オレ', 'わがはい', 'わし', 'ぼく', '小生', 'われわれ', '余', 'わい', '僕', 'わたくし', '我々', 'おれ', 'おいら', 'あちき', '俺', 'わたし', 'われ'}
    spp = {'あなた', 'わい', 'キミ', 'きみ', 'おのれ', 'あんた', 'お前', '君', 'てめぇ', 'そち'}

    results = MeCab.Tagger ("-Ochasen").parse (lyric)
    words = {result.split('\t')[0] for result in results.split('\n')}
    # words, fpp, sppはそれぞれsetなので、&を使うと共通項を抜き出せる。
    # returnするのはsetをvalueにしたdict。
    return {"fpp": words & fpp, "spp":words & spp}

テキストファイルのひとつひとつに対して、このdetectppを適用していきます。

import os
from collections import defaultdict

songs = []
# 数を数えて集計した結果は、defaultdictに収める。
ppcount = defaultdict(int)

for entry in os.scandir('./lyric/AKB48/'):
    if not entry.name.startswith('.') and entry.is_file():
        with open(entry.path ,'r') as fin:
            lyric = fin.read()
            pp = detectpp(lyric)
            print([entry.name, pp])
            if pp['fpp'] == set():
                pp['fpp'] = ['なし']
            if pp['spp'] == set():
                pp['spp'] = ['なし']           
            songs.append(list(pp['fpp'])[0]+'、'+list(pp['spp'])[0])
for song in songs:
    s = str(song)
    ppcount[s] += 1

print(dict(ppcount))

これを表にまとめます。
すると、こうなりました。

AKB48 SKE48 NMB48 HKT48 NGT48 乃木坂46 欅坂46
554 180 133 57 8 127 13
なし、おのれ         1    
なし、あなた 24 4 8 4   3  
なし、あんた 1 1 1        
なし、なし 67 17 12 11 1 19 1
なし、君 26 9 2 1   10 1
あたし、あんた 1   2        
あたし、なし 2            
こちら、あなた   1          
こちら、なし 1            
おれ、なし     1        
わい、あなた 1            
わたくし、なし     1        
わたし、あなた 1            
わたし、君 1            
われ、君 1            
俺、あなた 2   1     1  
俺、あんた 1       1    
俺、なし 11 2 2 3   2  
俺、君 1            
私、あなた 141 50 25 11   23 3
私、あんた 6         1  
私、なし 87 26 17 7   22 3
私、君 11 3 3 1   1 1
僕、あなた 5         1  
僕、なし 29 14 7 2   8  
僕、君 134 53 51 17 5 36 4

Excelで条件付きの書式を適用させてみるとはっきりします。

f:id:hacosato:20170506105542p:plain

秋元さん! グループ間の違い、ほとんどないじゃないですか!!

多いのは「僕、君」(男性目線)や「私、あなた」(女性目線)の組み合わせ。次に多いのは「私、なし」や「なし、なし(人称代名詞は出てこない)」の組み合わせ。

だいたいどこもいっしょじゃん!! もっと使い分けてよ!!😡😡😡

という感じですが、よく見てみると、それでもわずかな違いがあることがわかります。

AKB48のみ、一番多いのが「私、あなた」の組み合わせで、二番が「僕、君」の組み合わせです。
それ以外のグループは「僕、君」が多くて、「私、あなた」はその次です。NMB48なんてダブルスコアで「僕、君」のほうが多いです。

AKB48だけが女性目線が多くて、残りのグループは男性目線が多いということですよ!

AKB48だと、たとえば『恋するフォーチュンクッキー』が「私、あなた」曲です。
www.uta-net.com

あなたのことが好きなのに
私にまるで興味ない
何度目かの失恋の準備
Yeah! Yeah! Yeah!

NMB48だと『僕らのユリイカ』が「僕、君」曲です。
www.uta-net.com

僕らのユリイカ
発見したんだ
ずっと近くにいたのに
初めての感情
夏の太陽に目を細めた時
君のことをキレイだと思った
www.youtube.com

なるほどね、NMBってちょっとボクっ娘多そうだもんね、とわたしは一瞬早合点しましたが、いやちょっとそうとも限らないか…。

乃木坂にも「僕」が一人称の曲が多いからです。

わたしの中では「僕」が似合う女子の共通点は「女子校っぽさ」だと思ったんですが、なんかよくわかんないです…(ちなみにリア友にボクっ娘いるけど、なぜかみんな不登校だよ…)。

ネットですこし調べてみると、こういうのはマジでニコニコ大百科に限ります。
dic.nicovideo.jp
わたしはサブカルチャーはマジで詳しくないんですが、そういう世界でのボクっ娘って一様にボーイッシュなんですかね??(よくわからない)


ところで特異な人称代名詞の曲がいくつかあったので、それぞれ歌詞を見てみました。

AKB48に「われ、君」の曲があったので、なんだよそれと思いながら追ってみると、
www.uta-net.com
これでした。歌詞の中に

今日からは、新しい
OH- われらがチームK
って書いてある! なるほど「われら」って人称はアリか!


さらに、NMB48に「わたくし、なし」の曲も合ってナゾだ…って思ってみたら、こんな曲でした。
www.uta-net.com
歌詞は、

ぼちぼち 水着のグラビア撮影は可愛い私を見てほしい~ですぅ!
どーもー わたくしNMB48渡辺麻友と申しますぅ(なんでやねん?)
という2つの人称代名詞があって、今回わたしはそれを「list(pp['fpp'])[0]」でむりやりひとつだけに収斂させてしまっているので「私」という一人称代名詞を見落としているという結果になっていることがわかりました!

でもこれ両方とも採用したとして、どう分析に生かせばいいのかわからない!

複数回答可の質問紙調査をするときには集計が難しいはずだから胸に手を当ててよく考えろよ、って統計調査の本に書いてあったよ。

あとMeCabさまは、この行から、

誰もが言うんや 可愛いコおらへんやろ?
一人称代名詞「おら」を見いだしているらしいです。関西弁苦手なのだな……。


おしまい。

今回はこのブログで初めてMeCabをそれなりに実用的に使えたので、もうわたしゃ満足だよ……👼👼👼

本当なら別の人称代名詞(今回は「うちら」とかを除外してる)も対象にしたい気持ちがあったんですが、辞書を整備し出すと公平じゃなくなっちゃうから難しいです…。UniDicならいいのかな…。環境構築は闇すぎてやりたくない……。

さて次回予告です。

今回はMeCabを使ってたくさんの曲を統計調査してみたけど、次回はできればテーマを絞って数曲を国語の授業のように掘り下げてみたいと思っています。

そのためには米津玄師『ピースサイン』の歌詞を早く知りたいのだが…。これってダウンロードしても歌詞は入ってないよね? どうしたらいいの??(アルバム発表まで待ち??)
https://itunes.apple.com/jp/album/%E3%83%94%E3%83%BC%E3%82%B9%E3%82%B5%E3%82%A4%E3%83%B3-tv-edit/id1226327253?i=1226327413&uo=4&at=10lrtS

*1:一人称と二人称を同じ言葉でまかなおうとするとか主客未分すぎませんか! もうっ!!