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

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

$
0
0
お疲れ様です。たなしょです。 今日はテンプレートの返答をさせるためのテンプレート返答用のテキストと辞書クラスにテンプレート用の処理を追加していきます。 テンプレートテキストを作成する %noun%を置換することでテンプレートの言葉として登録します。 この%noun%の数が後ほど学習部分で役に立ちます。 下記がテキストの中身ね。左が%noun%の出現回数です。 1\t%noun%なのね 1\t%noun%がいいんだ 1\t%noun%はやだ! 1\t%noun%が問題だね 1\t%noun%が! テンプレート辞書を作成する テンプレート辞書を作成します。 1.テンプレート辞書をオープンします string[] t_lines = File.ReadAllLines( @"dics\template.txt", System.Text.Encoding.UTF8 ); 2.一行ずつを加工します(改行をとりのぞく) List<string> new_lines = new(); foreach (string line in t_lines) { string str = line.Replace("\n", ""); if (line != "") { new_lines.Add(str); } } 3.\tでキーと文字列を分けて%noun%の出現回数のキーが存在する確認します。 foreach (string line in new_lines) { // add code // line replace \\t -> \t string rep_line = line.Replace("\\t", "\t"); string[] carveLine = rep_line.Split(new Char[] { '\t' }); if (!_templateDictionary.ContainsKey(carveLine[0])) { _templateDictionary.Add(carveLine[0], new List<string> { }); } _templateDictionary[carveLine[0]].Add(carveLine[1]); } 4.学習メソッドにテンプレート学習メソッド追加します。 StudyTemplate(parts); 5.ユーザーの発言をテンプレート学習して、テンプレート辞書に登録します。 5-1.形態素と品詞情報に分けて名詞(一般|固有名詞|サ変接続|形容動詞語幹)にマッチングするか調べます。 foreach (string[] morpheme in parts) { if (Analyzer.KeyWordCheck(morpheme[1]).Success) 5-2.形態素を%noun%に書き換えてcount+1します。 morpheme[0] = "%noun%"; count++; 5-3.%noun%が存在して、%noun%の出現回数がテンプレート辞書はキー値である出現回数を追加します。 if (count > 0) { string num = Convert.ToString(count); if (!_templateDictionary.ContainsKey(num)) { _templateDictionary.Add(num, new List<string>()); } 5-4.テンプレート辞書の中にテンプレート文字列が存在しない場合、リストに追加します。 if (!_templateDictionary[num].Contains(tempStr)) { _templateDictionary[num].Add(tempStr); } 6.テンプレートの連想配列を1行ずつキー値と文字列を取り出して\tでつなげてリストに格納してソートで%noun%の出現回数順にソートをかけてファイルに書き込みます。 List<string> templateLine = new(); foreach (var dic in _templateDictionary) { foreach (var temp in dic.Value) { templateLine.Add(dic.Key + "\\t" + temp); } templateLine.Sort(); File.WriteAllLines( @"dics\template.txt", templateLine, System.Text.Encoding.UTF8 ); } 最後に 今回はテンプレートの会話をするための土台となるテンプレート辞書とその仕組みを作成しました。 明日はレスポンスを返す処理と一連の処理をフォームに反映させたいと思います。

Viewing all articles
Browse latest Browse all 9683

Trending Articles