0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

狩歌でどの曲が盛り上がるのかスコア理論値を調査する方法

Posted at

そもそも狩歌とは

簡単に説明すると、音楽を聴いて聞こえた歌詞の札を取り合うボードゲームです。

# 採点方法 カードごとにポイントが割り振られており、1点、2点、5点の札があります。 1点の札を3枚集めると10点になるルールもあり、シンプルながらも奥深いゲームです。

作成経緯

ネットを検索するとすでにおすすめの曲って結構紹介されてるんですよね。
その曲で遊ぶのもいいけど、自分の好きなアーティストでプレイしたいじゃないですか。
例えば私はアニオタなので「ラブライブ!」のμ’sの楽曲でやったらどうなるのかな?
と思うわけですが、どうせ遊ぶならたくさんワードが出てくる曲で遊びたいということで、調査することにしました。
遊んでから「この曲は多かったねぇ」などやっている時間は社会人にはないのです。

調査方法検討

  • 歌詞の取得
    一番ハードルが高いであろう「歌詞」をどこから取得するか。
    こちらは↓ブログさんを参考にさせていただいて、歌詞ネットから取得させていただくことにします。
    http://hacosato.hatenablog.com/entry/20170805/caruuta

  • 使用言語
    Powershellを利用します。
    私がインフラエンジニアゆえの選択です。

  • 開発環境
    Visual Studio Codeを使用します。
    めっちゃ書きやすい

  • 簡単なロジック
    1.ワード、点数の定義ファイルを用意
    2.Powershellで定義ファイルを読み込み
    3.対象の歌詞を読み込み
    4.ワードと一致する場合、点数を計上

実装

1.定義ファイルの作成
↓こんな感じのCSVファイルを用意します。

KeyWords,Point
毎日,5
長い,4
自分,2
優しい,3
ふたり,4
きっと,2
今日,2
本当,5
大人,5
みんな,4
心,1
全て,4

2.定義ファイルの読み込み
以下コマンドでCSVファイルを読み込みます。

$KeyWords = Import-Csv -Path .\KeyWord.csv

3.歌詞の取得
以下コマンドを使用して指定したURLの情報を取得します。

$Contents = Invoke-WebRequest -Uri $URL

取得した情報から歌詞の部分のみを取得する処理に関しては、
HTMLをパースし、getElementbyIDメソッドを使用して抽出します。
アーティスト名や
曲名も同様です。
詳しい情報は以下URLを参考いただければ。
本当にためになる情報盛りだくさんで勉強になりました。
http://winscript.jp/powershell/305

$Lyrics = ($Contents.ParsedHtml.getElementById("***")).textContent

4.点数の計算
点数の計算についてはめちゃくちゃシンプルですが、
CSVで読み込んだファイル内のキーワードが取得した歌詞と一致した場合、
ポイントとして計算する仕組みになっています。
ただし、ここでは1ポイントは計算せず、1ポイントが何回出てきたかのみ集計します。

    foreach($keyword in $KeyWords){
        if($Lyrics -match $keyword.KeyWords){
            #1ポイント以外は集計
            if($keyword.Point -ne 1){
                [int]$KaruUtaScore = [int]$KaruUtaScore + [int]$KeyWord.Point
            }
            
            #1ポイント用の処理
            if($KeyWord.Point -eq 1){
                $ExPointCount ++
            }

        }
    }

1ポイント用の処理はForEachの処理完了後に処理します。

# 1ポイントが3枚だと10点になるルールの処理
    $ExPoint = [system.math]::Floor($ExPointCount / 3)
    $ExPoint = $ExPoint * 10
    #あまりの値を追加
    $ExPoint = $ExPoint + ($ExPointCount % 3)

    #総合スコアを計算
    $KaruUtaScore = $KaruUtaScore + $ExPoint

EX

1曲なら上記でいいんですが、何曲もやる場合は、関数化してしまったほうが楽です。
関数化後の集計処理については、リターンとして受け取ったアーティスト名,曲名,スコアを連想配列に格納します。

# 集計用配列の初期化。一番最初にやっとく
$SongDB = @()

# URLリストを読み込む
foreach($URL in $URLList){
    $Result = ChkScore($URL.URL)
    
    #$Result
    #配列に格納
    $SongDB += @{
        Artist = $Result[0]
        Song = $Result[1]
        Score = $Result[2]
    }
}

また、以下処理で、処理結果をCSVとして吐き出します。
そのほうが見やすいですしね。

# CSVファイルとして吐き出す
$SongDB[0].Keys -join "," >> .\Result.csv
ForEach($A in $SongDB){
    $A.values -join "," >> .\Result.csv
}

結果

実際の処理結果が以下です。
Wonderful Rush強いですねぇ!

Artist Song Score
μ's Wonderful Rush 88
園田海未(三森すずこ) 私たちは未来の花 84
μ's MOMENT RING 78
μ's LOVELESS WORLD 77
μ's 嵐のなかの恋だから 74
μ's Super LOVE=Super LIVE! 74
μ's ミはμ'sicのミ 74
μ's KiRa-KiRa Sensation! 72
μ's それは僕たちの奇跡 70
μ's 僕たちはひとつの光 70
μ's Music S.T.A.R.T!! 69
南ことり(内田彩)
小泉花陽(久保ユリカ)
告白日和、です! 69
μ's WILD STARS 69
μ's Shangri-La Shower 68
μ's LONELIEST BABY 67
μ's 愛してるばんざーい! 65
高坂穂乃果(新田恵海)
南ことり(内田彩)
園田海未(三森すずこ)
ススメ→トゥモロウ 63
lily white 微熱からMystery 63
BiBi 冬がくれた予感 63
高坂穂乃果(新田恵海) Someday of my life 62
μ's "夏色えがおで1,2,Jump!" 62
μ's Angelic Angel 62
μ's 僕らのLIVE 君とのLIFE 61
μ's さようならへさよなら! 61
μ's 僕らは今のなかで 60
lily white 知らないLove*教えてLove 58
Printemps 永遠フレンズ 58
μ's きっと青春が聞こえる 57
lily white 思い出以上になりたくて 57
Printemps NO EXIT ORION 57
μ's Dancing stars on me! 56
南ことり(内田彩) スピカテリブル 55
BiBi 夏、終わらないで。 55
μ's "Oh,Love&Peace!" 54
Printemps sweet&sweet holiday 54
BiBi ラブノベルス 54
μ's SENTIMENTAL StepS 54
高坂穂乃果(新田恵海) 愛は太陽じゃない? 53
lily white あ・の・ね・が・ん・ば・れ! 53
μ's Happy maker! 53
μ's HEART to HEART! 53
μ's ユメノトビラ 53
BiBi 錯覚CROSSROADS 53
lily white 秋のあなたの空遠く 52
Printemps 小夜啼鳥恋詩 52
小泉花陽(久保ユリカ) なわとび 50
絢瀬絵里(南條愛乃)
東條希(楠田亜衣奈)
硝子の花園 48
BiBi Cutie Panther 48
μ's Snow halation 48
μ's そして最後のページには 48
lily white ふたりハピネス 47
小泉花陽(久保ユリカ) 孤独なHeaven 46
高坂穂乃果(新田恵海)
南ことり(内田彩)
園田海未(三森すずこ)
START:DASH!! 46
μ's START:DASH!! 46
南ことり(内田彩)
園田海未(三森すずこ)
Anemone heart 45
μ's 輝夜の城で踊りたい 44
μ's Mermaid festa vol.1 44
絢瀬絵里(南條愛乃) ありふれた悲しみの果て 43
Printemps UNBALANCED LOVE 42
Printemps Love marginal 42
μ's タカラモノズ 42
μ's どんなときもずっと 42
μ's だってだって噫無情 41
高坂穂乃果(新田恵海)
星空凛(飯田里穂)
Mermaid festa vol.2 ~Passionate~ 40
高坂穂乃果(新田恵海)
南ことり(内田彩)
園田海未(三森すずこ)
星空凛(飯田里穂)
西木野真姫(Pile)
小泉花陽(久保ユリカ)
矢澤にこ(徳井青空)
これからのSomeday 39
Printemps Pure girls project 39
μ's もぎゅっと“love”で接近中! 39
BiBi ダイヤモンドプリンセスの憂鬱 38
園田海未(三森すずこ) 勇気のReason 37
μ's SUNNY DAY SONG 37
μ's baby maybe 恋のボタン 36
高坂穂乃果(新田恵海) もうひとりじゃないよ 36
μ's 友情ノーチェンジ 36
星空凛(飯田里穂)
西木野真姫(Pile)
Beat in Angel 35
lily white 春情ロマンティック 34
A-RISE Private Wars 33
高坂穂乃果(新田恵海) 夢なき夢は夢じゃない 33
μ's Paradise Live 33
西木野真姫(Pile) Daring!! 32
μ's るてしキスキしてる 32
矢澤にこ(徳井青空)
東條希(楠田亜衣奈)
乙女式れんあい塾 31
東條希(楠田亜衣奈) 純愛レンズ 31
Printemps WAO-WAO Powerful day! 30
μ's COLORFUL VOICE 28
BiBi Trouble Busters 28
lily white キミのくせに! 27
星空凛(飯田里穂) 恋のシグナルRin rin rin 26
西木野真姫(Pile)
園田海未(三森すずこ)
絢瀬絵里(南條愛乃)
soldier game 26
μ's No brand girls 26
μ's Wonder zone 25
矢澤にこ(徳井青空) まほうつかいはじめました! 22
矢澤にこ(徳井青空) にこぷり 女子道 19
BiBi PSYCHIC FIRE 19
南ことり(内田彩) ぶる~べりぃ とれいん 16
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?