Googleスプレッドシートでマルコフ連鎖:嵐っぽい歌詞を作ってみよう


Posted on Oct 20



初めて圧縮新聞を見たとき、なんて面白いものだろうと驚いた覚えがあります。その頃から、大好きなGoogleスプレッドシートで、いつかマルコフ連鎖をしてみたいと考えていました。そこで、マルコフ連鎖の関数を作成し、実際に活用して、嵐っぽい歌詞を作ってみることにしました。参考にした書籍は、『JS+Node-jsによるWebクローラー/ネットエージェント開発テクニック』です。Google Apps Scriptを少しずつ勉強していることもあり、JavaScriptで試してみようと思い至りました。

JS+Node.jsによるWebクローラー/ネットエージェント開発テクニック


関数の説明

Googleスプレッドシートのスクリプトで、TinySegmenterとマルコフ連鎖の関数を作成しています。TinySegmenterで分かち書きした語をマルコフ連鎖用の辞書に登録し、利用する形です。また、今回は歌詞を対象としたため、1文が句点で区切られない問題がありました。そのため、行区切りを「◯」として工夫しました。

// マルコフ連鎖で1文を要約する
function markov(cell) {
var segmenter = new TinySegmenter(); // インスタンス生成
var segs = segmenter.segment(cell); // 単語の配列が返る
var dic = makeDic(segs);
return makeSentence(dic);
}
// マルコフ連鎖で複数文を要約する
function markov_array(cells) {
var text = cells.join("");
var segmenter = new TinySegmenter(); // インスタンス生成
var segs = segmenter.segment(text); // 単語の配列が返る
var dic = makeDic(segs);
return makeSentence(dic);
}
// マルコフ連鎖用辞書の作成 ----- (※2)
function makeDic(words) {
var tmp = ["@"];
var dic = {};
…以下、『JS+Node-jsによるWebクローラー/ネットエージェント開発テクニック』参照
view raw markov.gs hosted with ❤ by GitHub


使い方の例

yuka shiratsuchiさん(@yuca_y)が投稿した写真 -


嵐っぽい歌詞

災難だって言っちゃってる、ってA・RA・SHIのリズムで再生されてしまって面白いですね。

すれ違いに傷ついた夜それでも
今宵の闇へ君を"ここ"に感じてる
嘆くそばで
僕がきっとその手に握らせてるよ
災難だって言っちゃってる
(JustOne)君を連れ出す
深いいとおしさは嵐
信じることがすべて
たとえ僅かな光生まれても明日は見えなくて時には素直になれずに
完璧なんて気にしなくて心を抱いて
たぶんピンチに強い
Daybyday退屈よりも強い自分になってゆけるから
上手く行く事を想像すればいつの日か変わる時がくる
願いは透明なままではじけりゃYea!素直になれずに
怒りをヤワな自分
Areyouready?
思い出重なりあう
夢の中の未来だけど決して見失わないよ
傷をいやしてく
体中に風を集めて巻きおこせ
Everyday!Everybody!



2014 shirayuca.github.io