Pattern Responderのことを書こうと思ってソースを見ていたら、だいぶおかしかったので修正した。
Pattern Responderは入力文から名詞を抽出してkeyとし、入力文をvalueとしてDictionaryを作成しておき、keyからvalueを取り出して返答文にする。
辞書を学習する部分のソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
private void studyPattern(string input, List<string> output) { for (var i = 0; i < output.Count; i++) { if(_pattern.ContainsKey(output[i])) { var value = _pattern[output[i]]; if (!value.Contains(input)) value.Add(input); } else { var value = new List<string>() { input }; _pattern.Add(output[i], value); } } } |
2番目の引数は、keyのリスト。
文章を作成する部分のソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public override string response(string input) { var output = ""; foreach (string key in _pattern.Keys) { if (key == input) { var pat = _pattern[key]; output = _utils.randomList(pat); } } if (output == "") { if(_random.Count > 0) output = _utils.randomList(_random); } return output; } |
keyが登録されていない場合はrandom辞書から文章を選択する。
入力文に含まれる名詞に関連した文をそのまま返してくるので、日本語として変な文にはならないし入力に関連した文書なので頓珍漢な返答になることも少ないと思う。
(つづく)