はじめに
孫悟空の言葉遣いって独特ですよね。
そんな悟空の言葉に変換する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の中身
全探索で、条件を満たす場合に変換します。もっと賢い方法があれば教えてください。
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が追加できます。
デモ
まとめ
まだまだプロトタイプです。例えるならば、亀仙人のもとで修行を積んでいる頃の悟空でしょうか。
https://qiita.com/kotauchisunsun/items/8334728ab66b3cc3e55f
こちらの記事のやり方も実践していきたいです。根本的な手法が異なるので構想を練り直すのも一つの手です。
機械学習は素材が必要なので、孫悟空の素材が十分あれば作れそうですね。