JavaScript
自然言語処理
Line
linebot
dialogflow

ドラゴンボールの孫悟空の言葉に変換するLineBotをつくってみた

はじめに

孫悟空の言葉遣いって独特ですよね。
そんな悟空の言葉に変換するLINEBotを作りました。
悟空になりたいときに使ってみてください。

以下のサイトで孫悟空のしゃべり方(野沢けぇ)について解説しています。今回はこちらをDialogFlowに実装します。
http://junk.hatenablog.jp/entry/2018/02/15/034507

ほんじゃ、いっちょやってみっかぁ!

開発言語

・Javascript

準備

アカウントを用意します。
・Dialogflow Console
https://console.dialogflow.com/

・LINE Developers(プロバイダーリスト)
https://developers.line.biz/console/

LINEとDialogflowの連携

こちらの記事を参考にしました。
https://qiita.com/poruruba/items/09563e251adef1e1e8af
DialogFlowのFulfillmentに悟空語(野沢けぇ)を実装します。

DialogFlowのFulfillmentの中身

全探索で、条件を満たす場合に変換します。もっと賢い方法があれば教えてください。

gokuu.js
function nozawa(agent) {
    let temp;
    let list = [];
    let i = 0;
    let j = 0;
//Lineから受け取ったパラメータをeventに保存する
    let event = agent.parameters['any'];
//string型からstr型を要素とする配列へ変換する
    for(i = 0; i < event.length; i++){
        temp = event.substr(i, 1);
        list.push(temp);
    }
//for文を回すときにout of rangeを防ぐために'ん'を追加する
    list.push('ん');

    let a1 = [['あ', 'ア'], ['か', 'カ'], ['さ', 'サ'], ['た', 'タ'], ['な', 'ナ'], ['は', 'ハ'], ['ま', 'マ'], ['ら', 'ラ'],
            ['が', 'ガ'], ['ざ', 'ザ'], ['だ', 'ダ'], ['ば', 'バ'], ['ぱ', 'パ']];
    let a2 = [['や', 'ヤ'], ['わ', 'ワ']];
    let ie = ['い', 'え', 'イ', 'エ'];
    let e = [['え', 'エ'], ['け', 'ケ'], ['せ', 'セ'], ['て', 'テ'], ['ね', 'ネ'], ['へ', 'へ'], ['め', 'メ'], ['れ', 'レ'], 
            ['げ', 'ゲ'], ['ぜ', 'ゼ'], ['で', 'デ'], ['べ', 'ベ'], ['ぺ', 'ペ']];

//for文で探索し、条件を満たすときに野沢けぇへ変換する
    for(i = 0; i < list.length; i++){
        for(j = 0; j < a1.length; j++){
            if((list[i] == a1[j][0] || list[i] == a1[j][1]) && (list[i+1] == ie[0] || list[i+1] == ie[1] || list[i+1] == ie[2] || list[i+1] == ie[3])){
            list[i] = e[j][0];
            list[i+1] = 'ぇ';
            }
        }
        for(j = 0; j < a2.length; j++){
            if((list[i] == a2[j][0] || list[i] == a2[j][1]) && (list[i+1] == ie[0] || list[i+1] == ie[1] || list[i+1] == ie[2] || list[i+1] == ie[3])){
            list[i] = e[j][0];
            list[i+1] = 'ぇ';
            }
        }
        for(j = 0; j < e.length; j++){
            if((list[i] == e[j][0] || list[i] == e[j][1]) && (list[i+1] == ie[0] || list[i+1] == ie[1] || list[i+1] == ie[2] || list[i+1] == ie[3])){
            list[i+1] = 'ぇ';
            }
        }
        for(j = 0; j < e.length; j++){
            if((list[i] == e[j][0] || list[i] == e[j][1]) && list[i+1] == 'ー'){
            list[i+1] = 'ぇ';
            }
        }
    }
//'ん'を削除する
    list.pop();
//str型の配列からstring型へ結合する
    let list_changed = list.join('');
//Lineへ出力する
    agent.add(list_changed);
}

使い方

ひらがなとカタカナに対応しています。漢字は変換できません。今後の課題です。
LINEで「孫悟空Bot」と検索してみてください。孫悟空Botが追加できます。

デモ

47994.jpg

まとめ

まだまだプロトタイプです。例えるならば、亀仙人のもとで修行を積んでいる頃の悟空でしょうか。
https://qiita.com/kotauchisunsun/items/8334728ab66b3cc3e55f
こちらの記事のやり方も実践していきたいです。根本的な手法が異なるので構想を練り直すのも一つの手です。
機械学習は素材が必要なので、孫悟空の素材が十分あれば作れそうですね。