Edited at

ドラゴンボールの孫悟空の言葉に変換する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

こちらの記事のやり方も実践していきたいです。根本的な手法が異なるので構想を練り直すのも一つの手です。

機械学習は素材が必要なので、孫悟空の素材が十分あれば作れそうですね。