• 让QQ机器人聪明点,再聪明点


    话说当日,靠着机器人(http://www.cnblogs.com/sukyboor/archive/2007/01/03/610451.html)准备去我师兄那刮几顿吃的。这不,程序作好了,还没认真测,就把它给挂上去了。
    一切安装完毕,机器人老老实实,按步就搬的执行传话筒的工作。这会问题来了,群里的人没见过这个qq号,一下子就都问了:qq机器人是谁?
    重复回答N多次以后,我决定让机器人再多干点活,毕竟要花很多银子来养它滴(得24小时专门开一台电脑来对付它),只干传话筒的活也太那个啥了。
    简单分析了需求,现在已经完成的东西是:
    1, 从窗口获取聊天记录
    2, 对聊天记录进行了简单的识别,然后放在QQmsg里面,包含了发送者,发送时间,消息内容
    3, 把消息整合后,将转换后的内容放入输入框,模拟按按纽操作,把消息发送出去
    现在我能想到可以增加的功能(我这人4肢不甚灵活,头脑也超级简单,所以你要想到什么,一定要告诉我):
    1, 从消息内容里提取有效信息,存储起来
    2, 做个定时任务功能,发个通知啥的。
    3, 自动应答,回答一些已经知道的信息
    功能2 很简单吧,这里就不详细去说,说了也没个啥劲。功能1和3应该是一个任务,但核心不在这上面,而是怎么去教机器人去识别。
    当然,考虑到这是一个非商业性项目,所以不能无限制的扩大,毕竟还得花点精力考虑怎么从老板那里赚点卖力钱。复杂的问题要简单做!但又不能做的太过于简单。至少我是不能忍受做出来的机器人IQ值比我的还低。
    下面就简单介绍我的技术实现了。方案是用一个xml文件来教qq机器人怎么识别,识别规则是采用正则表达式的方法实现的,并储存相应结果,在对话中出现可以回答的问题时,由机器人作出应答。
     1<doc>
     2  <neurite>
     3    <questionList>
     4      <question>\s*(?&lt;name&gt;.*?)是谁?</question>
     5    </questionList>
     6    <identifyQuaList>
     7      <identifyQua>我[叫是](?&lt;name&gt;.*?)</identifyQua>
     8    </identifyQuaList>
     9    <identify key="name">
    10      <name>我[叫是](?&lt;name&gt;.*?)[\s,,]</name>
    11      <sex>(?&lt;sex&gt;[男女])</sex>
    12      <old>(?&lt;old&gt;\d+)岁</old>
    13      <phone>电话[::,,]*?(?&lt;phone&gt;\d{5,12})</phone>
    14      <remark>其它[::,,]*?(?&lt;remark&gt;.*)</remark>
    15    </identify>
    16    <resultList>
    17    </resultList>
    18    <responsion>[name],[sex],[old]岁,联系方式:[phone],[remark]</responsion>
    19</neurite>
    20<doc>


    其中:
    Neurite节代表一类问题的识别方案。
    IdentifyQuaList节代表该类问题识别规则。(是否如果符合正则表达式)
    Identify 列出关键数据识别的表达式。
    ResultList节用于存储识别出来的信息。(其实存储在数据库里好点)
    QuestionList 节表示否可以用该类方案来回答问题。
    Responsion 节表示问题的回答方法,即组织一下语言。

    我这里有一个已经做好简单示例:

    Title笨笨 2007-1-3 22:51:54说:吴小苏是谁?
    QQ机器人 2007-1-3 22:51:54回答:不知道!
    笨笨 2007-1-3 22:52:58说:我是吴小苏,今年16岁,男的,联系电话:13148873000,其它:暂时在科技圆工作
    笨笨 2007-1-3 22:53:03说:吴小苏是谁?
    QQ机器人 2007-1-3 22:53:03回答:吴小苏,男,16岁,联系方式:13148873000,:暂时在科技圆工作
    笨笨 2007-1-3 22:53:38说:吴小苏是哪里人?
    QQ机器人 2007-1-3 22:53:38回答:不知道!
    笨笨 2007-1-3 22:53:49说:吴小苏是福建的
    笨笨 2007-1-3 22:53:55说:吴小苏是哪里人?
    QQ机器人 2007-1-3 22:53:55回答:吴小苏是福建来的
    笨笨 2007-1-3 22:55:17说:QQ机器人是谁?
    QQ机器人 2007-1-3 22:55:17回答:不知道!
    笨笨 2007-1-7 15:18:37说:我叫qq机器人,联系电话:无,女的,0岁,。其它:是小苏开发的群消息转发的电脑程序
    笨笨 2007-1-7 15:18:41说:qq机器人是谁?
    QQ机器人 2007-1-7 15:18:41回答:qq机器人,女,0岁,联系方式:,:是小苏开发的群消息转发的电脑程序
       从对话中可以看出,对于可以识别的信息,我们只提取了关键数据。并且设置一个key去作为约束条件。
       对比一下这个xml文件在交谈之前和之后的变化,会更直观一些。
    对话之前:

    对话之后:

    这样做的特点是可配置性高,扩充性好。如果你有兴趣,也可以教它更多的学习方法。
    当然,这个绝对算不上是什么完美方案。没有把talker以及talkTime放进去是一大垢病。另外一个就是还没有想到让机器人主动学习识别规则的方法。(什么?你有好的方法,那赶紧说啊!)

    程序下载:/Files/sukyboor/SmartQQ.rar
  • 相关阅读:
    关于用户、用户组及文件权限的试题
    lvm-简介
    项目中用到的jar包简介(1)
    Centos7开启SSH服务
    2.docker架构,原理,安装及简单应用
    如何平滑将注册中心从Eureka迁移到Nacos?
    8.k8s连载--重新生成k8s token(kubeadm join报错及解决)
    7. 复制k8s Node节点 并重新初始化k8s-nodes2节点 (k8s连载)
    6. k8s + jenkins 实现持续集成(完)
    5.k8s基本命令汇总
  • 原文地址:https://www.cnblogs.com/sukyboor/p/614553.html
Copyright © 2020-2023  润新知