kome_niku_sio's blog

アニメの話をします。ツインテールとピンク髪が大好きです。

こめにくしおが書いてます。

【解説編】鈴木このみ曲、歌詞中の単語数が最も多いの「蒼の彼方」説 -python自然言語処理ライブラリを用いた検証-

1 はじめに

前記事
kome-niku-sio.hatenablog.com
今記事では、前記事で数え上げのためのプログラム及びその他のデータについて解説する。


鈴木このみニューアルバムShake up !
本日発売!!!!


貸します。お声かけください。


2 楽曲一覧

CHOIR JAIL
DAYS of DASH
夢の続き
ワタモテ
AVENGE WORLD
世界は疵を抱きしめる
This game
銀閃の風
Abolute Soul
Beat Your Heart
Redo
Love is MY RAIL
カオスシンドローム
Blow out
歌えば君がそこにいるから
蒼の彼方

CHOIR JAIL〜蒼の彼方までのシングル表題曲全てを対象とする。全曲対象とした検証はまたの機会に。

3 janomeとは

mocobeta.github.io
 今回の歌詞内の単語を分割するために用いたツールである。依存ライブラリなしに簡単にインストール可能である。文章を単語に分割して品詞を割り当ててくれる。

4 ソースコード

# -*- coding: utf-8 -*-
#janomeのTokenizerをインポート
from janome.tokenizer import Tokenizer

#トークナイザーを呼び出し
t = Tokenizer()
konominList = []
#歌詞を解析
beyondTheBlue = t.tokenize("世界の果ての色が 何色かわかったよ ")

"""その他歌詞入力部"""

konominList = [choirJail,daysOfDash,cOfDream,watamote,avengeWorld,embraceTheWound,thisGame,silverWind,absoluteSoul,beatYourHeart,redo,loveIsMyRail,chaosSyndrome,blowOut,songForYou,beyondTheBlue]

countList = []
for list in konominList:
    count = 0
    for n in list:
        #tokenをstrに変換
        str_inf = str(n.part_of_speech)
        #strを分割
        partOfSpeech = str_inf.split(",")[0]

        if partOfSpeech != "記号":
            count = count+1

        #print(n.surface + ":" + partOfSpeech)

    countList.append(count)

f = open('konomin.txt')
lines2 = f.readlines() # 1行毎にファイル終端まで全て読む(改行文字も含まれる)
f.close()
# lines2: リスト。要素は1行の文字列データ
i = 0
for line in lines2:
    print(countList[i])
    print(line)
    i = i+1

5 解説

プログラムの概要

まずjanomeトークナイザーを呼び出し、その後曲ごとに歌詞を単語分割したデータを格納するリストを作成する。ソースコード中の変数beyondTheBlueがその例である。次に前処理で作成した各曲の単語分割リストにおいて、記号以外の単語をカウントする。その後、事前作成した各曲名txtファイルに合わせて出力する

出力の例

244
CHOIR JAIL

261
DAYS of DASH

213
夢の続き

各処理の解説

beyondTheBlue = t.tokenize("世界の果ての色が 何色かわかったよ ")

文章を単語に分割して、各単語情報をリストに格納する処理である。リストの要素は分割後の各単語である。

#tokenをstrに変換
str_inf = str(n.part_of_speech)
#strを分割
partOfSpeech = str_inf.split(",")[0]
if partOfSpeech != "記号":
            count = count+1

まず、n.part_of_speechから説明する。nとは各リストに格納された個々の単語情報である。n.part_of_speechは、単語の品詞情報が格納されたオブジェクトである。「蒼」という単語の場合「名詞,一般,*,*」がn.part_of?speechに格納されている。単語の分類のため、この情報をstrに変換した後、「,」で分割している。その後、「記号」以外の語は単語数の数え上げの対象として数え上げている。

6 参考サイト

arakan-pgm-ai.hatenablog.com
すごくわかりやすい記事でした。ありがとうございました。

7 おわりに

 鈴木このみさんは現在Asia Tour「hake up!」を開催中。現在は海外公演を終え、東京、岡山、博多、仙台、北海道でのライブが予定されています。参加して、単語数が本当に合っているのか確かめよう!