be365体育在线投注_365BET能赢钱吗_手机365体育投注客户端C#和Access的智能聊天机器人

Kanagawa

发布日期: 2019-10-20 11:44:53 浏览量: 138
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

一、软件说明

1.1 功能说明

一个可以自动回复的聊天机器人.

1.2 解决什么样的实际问题

用于娱乐,解闷。

1.3 性能说明

软件还存在一定的BUG,有待改进。

1.4 程序类型说明

娱乐性应用程序。

二、软件设计

2.1 软件整体结构图及模块划分

软件的结构只有一个聊天界面,分别有输入框,显示聊天信息框,发送按钮和退出按钮,导入词库按钮和调教按钮。

2.2 在VS的“解决方案资源管理器”中的文件说明

解决方案中,有5个类,其中:

  • ”聊天机器人”类是主类,窗口显示类

  • ”DataBase”是连接数据的类,本程序用到的是access数据库

  • “Iostreams”类是文件操作类,主要是读取一个txt文件,用于导入词库

  • ”Regugar”类是正则表达式品配类,用于品配聊天的问题

  • ”Robot”类是一个机器人对象

Resources文件是用于存放图片文件。

2.3 各模块对应的主要对象和方法

2.3.1 ”聊天机器人”类

主要属性

  1. private Robot A; //机器人对象
  2. private string Ask; //发送信息
  3. private string Answer; //返回信息
  4. private int isTeaching; //调教模式
  5. private Point mouseOff; //鼠标移动位置变量
  6. private bool leftFlag; //标签是否为左键
  7. private string FileName; //txt文件路径
  8. private Thread T1; //创建一个线程

主要方法

  1. /////发送按扭
  2. private void button_sent_Click(object sender, EventArgs e)
  3. {
  4. ///正常聊天状态
  5. if (isTeaching == 0)
  6. {
  7. Ask = this.richTextBox_sent.Text;
  8. //设置为右对齐
  9. this.richTextBox1_accept.SelectionAlignment = HorizontalAlignment.Right;
  10. this.richTextBox1_accept.AppendText(Ask + ":主人 \n");
  11. Answer = A.answer(Ask);
  12. //设置为左对齐
  13. this.richTextBox1_accept.SelectionAlignment = HorizontalAlignment.Left;
  14. this.richTextBox1_accept.AppendText(" "+ A.name + ":" + Answer + "\n");
  15. }
  16. ///////调教机器人状态
  17. else if (isTeaching == 1)
  18. {
  19. Ask = this.richTextBox_sent.Text;
  20. this.richTextBox1_accept.SelectionAlignment = HorizontalAlignment.Right;
  21. this.richTextBox1_accept.AppendText(Ask + ":主人 \n");
  22. isTeaching = 2;
  23. }
  24. else
  25. {
  26. Answer = this.richTextBox_sent.Text;
  27. this.richTextBox1_accept.SelectionAlignment = HorizontalAlignment.Left;
  28. this.richTextBox1_accept.AppendText(" "+A.name+":" + Answer + "\n");
  29. A.learn(Ask,Answer);
  30. isTeaching = 1;
  31. }
  32. //自动滚动到插入位置
  33. this.richTextBox1_accept.ScrollToCaret();
  34. //清空发送框
  35. this.richTextBox_sent.Clear();
  36. }
  37. ///导入词库
  38. private void Openfile()
  39. {
  40. //导入词库
  41. Iostreams.Import(FileName);
  42. T1.Abort();
  43. }

2.3.2 ”DataBase”类

  1. //根据接收到的字符串返回数据
  2. public static List search(string sql)
  3. {
  4. List answer = new List();
  5. conversation con = null;
  6. OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|ChatRobot.mdb");
  7. ///连接数据库
  8. conn.Open();
  9. //执行sql查询
  10. OleDbCommand com = new OleDbCommand(sql, conn);
  11. OleDbDataReader reader = com.ExecuteReader();
  12. //读取查询结果
  13. while (reader.Read())
  14. {
  15. con = new conversation(reader.GetString(0), reader.GetString(1));
  16. answer.Add(con);
  17. }
  18. conn.Close();
  19. return answer;
  20. }

2.3.3 “Iostreams”类

  1. public static void Import(string File_Name)
  2. {
  3. using (StreamReader sr = new StreamReader(File_Name, Encoding.Default))
  4. {
  5. string line1,line2;
  6. //按行读取
  7. while((line1=sr.ReadLine())!= null)
  8. {
  9. line2 = sr.ReadLine();
  10. DataBase.Insert(line1, line2);
  11. sr.ReadLine();
  12. }
  13. }
  14. }

2.3.4 ”Regugar”类

  1. //正则表达式品配
  2. public static bool match(string a, string ask)
  3. {
  4. //简单的正则表达式
  5. Regex re = new Regex(@"[\s\S]*" + a + @"[\s\S]*");
  6. //品配成功则返回true,否则返回false
  7. return re.IsMatch(ask);
  8. }

2.3.5 ”Robot”类

  1. //问答函数
  2. public string answer(string ask)
  3. {
  4. List answers = new List();
  5. string answer=null,a=null;
  6. ///sql语句品所有字符的模糊搜索
  7. a = "SELECT ask,answer FROM [chatwords] WHERE (ask LIKE'%[" + ask + "]%') ORDER BY ask DESC";
  8. answers = DataBase.search(a);
  9. if (answers.Count != 0)
  10. {
  11. for (int i = 0; i < answers.Count; i++)
  12. {
  13. if (Regular.match(answers[i].ask,ask ))
  14. return answers[i].answer;
  15. }
  16. }
  17. answer = "听不懂";
  18. //返回包括有输入的任一字的ask和answer
  19. return answer;
  20. }

2.4 数据库设计或数据文件说明

数据库设计,只创建一个chatwords表,用于储存ask语句和answer语句。

数据文件.txt文件。问和答不空行,每个问答之间要空一行,必须要按这样的格式才能正确导入词库。

三、测试

测试用例列表地和软件运行截图

智能聊天机器人的词库是存在数据库中的,当我输入信息如”你好”,点击发送按钮后,程序获取输入信息,然后通过输入信息把据库中包含有输入信息的任一字符的”ask”的所有问答数据找出来,再通过正则表达式,反过来,用查找到的”ask”品配输入信息,一旦品配成功,则返回对应的answer。

通过penFileDialog按键,打开对话框,默认为打开txt文件。

四、附录

机器人的词库是用酷Q免费提供的词库。

主要用到的控件有:

  • richTextBox

  • pictureBox

  • Botton

  • Label等等

上传的附件 cloud_download be365体育在线投注_365BET能赢钱吗_手机365体育投注客户端C#和Access的智能聊天机器人.7z ( 2.20mb,?2次下载 )
error_outline 下载需要15点积分
eject