人工無脳の応答に入力に入っているキーワードから関連のありそうな文書を選択して返すという仕組みを作るのにハッシュテーブルを使ってみた。
C#では、Dictionaryクラスがあるけど、一つのキーに対して複数の値を関連付けるためにはNameValueCollectionクラスを使うらしい。
また、入力のバリエーションに対応するために、キーには正規表現を使った。 両方とも初めて使ってみたけど、まあ、特に問題なく使えた。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
using System; using System.Windows.Forms; using System.Collections.Specialized; using System.Text.RegularExpressions; namespace regexp { public partial class Form1 : Form { public Form1() { InitializeComponent(); } NameValueCollection nvc = new NameValueCollection(); Random rnd; private void button1_Click(object sender, EventArgs e) { string input = textBox1.Text; string[] key = nvc.AllKeys; string machkey = ""; foreach(string s in key) { if (Regex.IsMatch(input, s)) machkey = s; } string[] values = nvc.GetValues(machkey); label1.Text = values[rnd.Next(0, values.Length)]; } private void Form1_Load(object sender, EventArgs e) { nvc.Add("こんち(は|わ)$", "こんにちは"); nvc.Add("こんち(は|わ)$", "うぃーすっ"); nvc.Add("こんち(は|わ)$", "オッス"); nvc.Add("バイバイ|ばいばい", "ちゃおちゃお"); nvc.Add("バイバイ|ばいばい", "サイナラ"); rnd = new Random(); } } } |
ハッシュテーブルから文字列の配列をして取り出し、その中から乱数で一つのワードを選択するようにした。 正規表現をうまくすることで、結構バライティに飛んだ返答ができそう。