Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9699

C#でカノジョをつくる(24日目)

$
0
0
お疲れ様です。たなしょです。 今日は昨日に引き続きテンプレート用の返信する処理を作成していきます。 テンプレート返信用クラスを作成する 1.ParseItemオブジェクトを1つずつ取り出して、ユーザーの発言にキーワードが含まれていた場合リストに追加します。 public override string Response(string input, int mood, List<string[]> parts) { List<string> keywords = new(); foreach (string[] morpheme in parts) { if (Analyzer.KeyWordCheck(morpheme[1]).Success) { keywords.Add(morpheme[0]); } } 2.キーワードの単語が1個以上あり、テンプレート辞書にcountと同じキー値が存在する場合、処理に入ります。 if ((count > 0) && (Cdictionary.Template.ContainsKey(Convert.ToString(count)))) 3-1.count変数と同じ数の%noun%をもつ、テンプレート文字列のリストを取得します。 var templates = Cdictionary.Template[Convert.ToString(count)]; 3-2.取得したリストからランダムに1個のテンプレートを抽出します。 string temp = templates[rdm.Next(0, templates.Count)]; 3-3.正規表現として%noun%を登録します。 Regex re = new("%noun%"); 4.キーワードのリストからキーワードを取り出して、テンプレートの%noun%をキーワードに置き換えます。 foreach (string word in keywords) { temp = re.Replace(temp, word, 1); } return temp; 5.キーワードの単語が0、またはキーワード認定の単語の数が合わない場合はランダム辞書からフレーズを抽出します。 return Cdictionary.Random[rdm.Next(0, Cdictionary.Random.Count)]; 各返信用モジュールに形態素解析の結果を取得するパラメーターを追加する 今まで作成してきた返信クラスの引数に形態素解析用のパラメータを追加します。下記はスーパークラスに追加したときのものです。 public virtual string Response(string input, int mood, List<string[]> parts) 本体クラスにテンプレート返信用のオブジェクトを実装する private TemplateResponder _res_template; 応答フレーズにもテンプレート返答を追加します。 else if (num < 7)  _responder = _res_template; 実行してみるとカノジョの文言のバリエーションがさらに増えて、会話らしい会話ができるようになりました! ダイアログを見てみるとそこそこ会話できるようになっています。 最後に テンプレート辞書を用いた会話ができました。 これで少しは楽しく会話できそうです! 明日は最終日なので今までの総括をします。

Viewing all articles
Browse latest Browse all 9699

Trending Articles