서던 vs TUBE 진정한 여름 노래 왕은 어느 쪽이다!? MeCab에서 가사 분석을 해 보았다

소개



그런데, 알아차리면 올해도 8월 20일.
여름이 방금 시작되었다고 생각한다면 이제 끝을 말하려고합니다 ...
음, 직장인이기 때문에 여름 휴가와 상관 없습니다.

여름이라고 하면, 역시 여름 우타. 여름 노래를 듣고, 적어도 기분만으로도 여름방학 기분을 맛보고 싶네요…
도완고 씨의 이 기사에 의하면, 바다의 어울리는 아티스트의 투표로, 1위 서던 올 스타즈 2위 TUBE와, 3위를 크게 떼어내어 벌집의 데드히트를 펼치고 있는 모양입니다.
서던은 「TSUNAMI」 「한여름의 과실」, TUBE는 「시즌 인 더 선」 「아 여름 휴가」와 양자 모두 명곡 갖추어져, 이것은 둘 다 우열을 두기 어려운 느낌입니다.

그래서 이번에는 Python+Mecab에서 가사의 형태소 해석을 실시하고, 여름 워드 의 출현 횟수를 비교함으로써, 진정한 여름 노래 왕을 결정하고 싶습니다.

규칙


  • 전곡의 여름 워드("바다", "비치"등)의 출현 횟수의 합계를 곡수로 나누고, 1곡당의 여름 워드 출현 횟수로 승패를 결정한다.

  • (TUBE가 약 450곡, 서던이 약 270곡으로 열림이 있기 때문에, 곡당 비교로 하고 있습니다.)

    기법



    (어떤 방법을 사용하여) 가사 텍스트 파일 수집

    모든 가사 파일을 결합하여 문자열로 만듭니다.

    Mecab에서 형태소 분석

    단어의 출현 횟수를 집계

    출현 횟수 비교

    가사 파일의 취득에 대해서는, 센시티브인 부분이라고 생각하기 때문에, 이번은 자세한 것은 생략합니다.
    MeCab로 형태소 해석을 하면, 단어의 나누기 및에 단어의 품사를 취득할 수 있으므로, 이번은 품사가 명사의 것에 짜서 집계하고 있습니다.
    덧붙여 여름 워드에 대해서는, 완전히 나의 주관에 근거해 결정하고 있습니다.

    결과




    단어/가수
    TUBE
    남부


    여름
    462
    118

    바다
    187
    57

    웨이브
    124
    66

    summer
    114
    7

    태양
    110
    38

    beach
    80
    5


    43
    20

    한여름
    42
    17

    모래
    35
    30

    쇼난
    32
    8

    웨이브
    23
    11

    불꽃
    22
    6

    surfin
    21
    0

    썬샤인
    18
    15

    해변
    14
    11



    결과/가수
    TUBE
    남부


    합계
    1327년
    409

    노래 수
    454
    271

    곡당
    2.92
    1.51


    어떻게 봐도 TUBE가 더블 스코어로 압승입니다. 정말 고마워요.
    서던은 「피스와 하이라이트」와 같이, 사회 문제 등 비교적 여러가지 테마를 거론하고 있는 인상입니다만, TUBE는 여름에 스테이터스 전 흔들고 있기 때문에, 그 근처가 영향해 이만큼의 차이가 붙었다 라고 생각합니다.

    특징적인 부분으로서, TUBE는 「summer」 「beach」라고 하는 워드를 각각 100회 가까이 사용하고 있는 것에 대해, 서던은 10회도 사용하고 있지 않습니다. 서던은 직접적인 여름의 워드를 사용하지 않고, 여름의 정경이 떠오르는 가사를 쓰는 것이 좋을지도 모르겠네요.


    Congratulations!
    TUBE is king of summer.


    코드



    마지막으로 집계용 코드를 기재해 둡니다.
    import csv
    import MeCab
    import glob
    from collections import Counter
    
    def make_word_list(all_lyric):
      tagger = MeCab.Tagger('-Ochasen')
      node = tagger.parseToNode(all_lyric)
      word_list = []
      while node:
          if node.feature.split(",")[0] == "名詞":
                  word_list.append(node.surface.lower())
          node = node.next
      return word_list
    
    def dict_to_csv(artist,histogram):
        with open(artist + ".csv", "w") as csv_file:
            writer = csv.writer(csv_file, lineterminator='\n')
            header = ["単語", "回数"]
            writer.writerow(header)
            for key in histogram:
                row = [key,histogram[key]]
                writer.writerow(row)
            csv_file.close()
    
    if __name__ == "__main__":
        # download_lyrics()
        artists = ["サザン","TUBE"]
        for artist in artists:
          if artist == "サザン":
            artist_folder_name = "southern_lyrics"
          elif artist == "TUBE":
            artist_folder_name = "tube_lyrics"
    
          all_lyric = ""
          for lyric_path in glob.glob(artist_folder_name + "/*"):
              with open(lyric_path, "r",encoding="shift_jis") as f:
                  all_lyric += f.read()
    
          word_list = make_word_list(all_lyric)
          histogram = Counter(word_list)
          dict_to_csv(artist,histogram)
    

    좋은 웹페이지 즐겨찾기