What Responderは、入力文から複数の名詞を抽出し、その中からランダムに選択した名詞と、あらかじめ用意した文からランダムに選択した文を組み合わせ返答文を生成する。 あらかじめ用意した文から生成するので文法的な間違いは少ないが、名詞と文とは関連がない場合が多く意味不明な返答文になることが多い。
1 2 3 4 5 6 7 8 9 10 |
public override string response(string input) { var resp = ""; var list = _morph.analyze_noun(input); if (list.Count > 0) resp = _utils.randomList(list) + _utils.randomList(_whatsDic); else resp = input + "って何?"; return resp; } |
_morph.analyze_nounは、文字列を入力するとその文字列に含まれた名詞を抽出しリストとして返すメソッド。 _utils.randomListは、文字列リストからランダムに一語選択して返すメソッド。 入力文に名詞が一つも無ければ”入力文”+”って何?”を返す。
入力文から名詞を抽出する場合に全くランダムにするのでなく、ある程度規則性を持たせたり、記憶している文章の選択も、抽出した名詞とある程度関連ずける方法を検討すことが必要かもしれない。
ただ、ランダムに選択すると頓珍漢な返答文になりやすく、関連付けをしすぎると同じような返答文になりそうなので微妙なバランスが必要になりそう。
(つづく)