鈍足ランナーのIT日記

走るのが好きな5流のITエンジニアのブログ。

趣味の範囲は広いけど、どれも中途半端なクソブロガー楽しめるWebアプリを作ってあっと言わせたい。サーバーサイドPerl(Mojolicious)、クライアントサイドVue.js。Arduinoにも触手を伸ばす予定。

今流行のAIではない俳句ジェネレーター。「俳人さん」のアルゴリズムの全貌

https://haijinsan.dokechin.com/

適当なアルゴリズムの全貌を紹介。

上五

現在月から適当に季語のリストの中からランダムに選ぶ。

function getKami(){
    var date = new Date();
    var month = date.getMonth();
    var kamis = [];

    if (month == 0 ) {
        kamis.push("新年の", "寒月の");
    } else if ( month == 1) {
        kamis.push("梅が香に", "寒明し");
    } else if ( month == 2) {
        kamis.push("暖かき", "啓蟄の");
    } else if ( month == 3) {
        kamis.push("清明の", "春眠の");
    } else if ( month == 4) {
        kamis.push("薫風の", "夏めくや");
    } else if ( month == 5) {
        kamis.push("夏至の日に", "六月の");
    } else if ( month == 6) {
        kamis.push("七月の", "梅雨明けや");
    } else if ( month == 7) {
        kamis.push("八月の", "真夏日の");
    } else if ( month == 8) {
        kamis.push("長月の", "夏彼岸");
    } else if ( month == 9) {
        kamis.push("十月の", "秋の日の");
    } else if ( month == 10) {
        kamis.push("霜月の", "落ち葉降る");
    } else if ( month == 11) {
        kamis.push("数え日の", "十二月");
    }   
    index = Math.floor(Math.random() * 2)
    return kamis[index];
}

中七

Azure Vision APIに画像を投げて、画像を要約した日本語を取得。Yahoo 形態素APIに投げて、
形容詞+名詞の部分を抽出して中7とする。形容詞だったら1、名詞だったら7とマッピングしておいて正規表現17でサーチをかけるようにした。

「白い新聞」のように7文字なら、そのまま。
「白い水菜」のように6文字なら、「よ」を後ろに足して、「白い水菜よ」にして7文字とする。
「白いシャツ」のように5文字なら、「その」を前に足して、「その白いシャツ」にして7文字とする。
「白い酢」のように4文字なら、「その」を前に足して、「や」を後ろに足して、「その白い酢や」にして7文字とする。

形容詞+名詞がなかったら、「今日思い入る」と入れる。
形容詞+名詞が複数あったら、ランダムで選択する。

座五

Azure Vision APIの結果で、タグが配列で帰るので、Yahoo形態素APIに配列を文字列に展開して、呼び出し。
形容詞だけにフィルタリング。「若い」のように末尾の「い」を「さ」に変える。

3文字だったら「かな」を足して、5文字にする。例。「若さかな」
5文字だったら。そのまま代入。「美しい」→「美しい」

形容詞がなかったら、「朝ぼらけかな」にする。
形容詞が複数あったら、ランダムで選択する。

async await

Azure Vision APIとYahoo形態素APIは共にAxiosで呼び出し。promise baseなAPIとなっている。
Yahoo形態素APIの結果はxmlが帰ってくる、xmlだと扱いが面倒なので、jsonへ変換。
変換部分はxml-to-json-promiseモジュールを利用。これもpromise baseなAPIとなっている。
全部promisebaseに寄せれば、async awaitを利用できて、スッキリ書ける。
async functionも非同期なので、promiseベースなんだなぁと発見した。