1. 利用pyqt5来设计专家系统的界面。

如下图一:

图一 起始界面

相应的运行过程的界面,如图二:

图二 相应的运行过程界面

2. 设置规则文本 guizhe.txt

有毛发 哺乳动物

有奶 哺乳动物

有羽毛 鸟

会飞 下蛋 鸟

吃肉 食肉动物

有犬齿 有爪 眼盯前方 食肉动物

哺乳动物 有蹄 有蹄类动物

哺乳动物 嚼反刍动物 有蹄类动物

哺乳动物 食肉动物 黄褐色 暗斑点 金钱豹

哺乳动物 食肉动物 黄褐色 黑色条纹 虎

有蹄类动物 长脖子 长腿 暗斑点 长颈鹿

有蹄类动物 黑色条纹 斑马

鸟 长脖子 长腿 黑白二色 不飞 鸵鸟

鸟 会游泳 不飞 黑白二色 企鹅

鸟 善飞 信天翁

3. 编写思路

1)首先将规则库里面的规则进行相应的排序和数据处理,以便之后的推理信息的匹配,在这里我们将规则信息进行相应的拓扑排序,代码如下:

inn=[]foriinP:sum=0forxini:ifQ.count(x)>0:# 能找到,那么sum+=Q.count(x)inn.append(sum)while(1):x=0ifinn.count(-1)==inn.__len__():breakforiininn:ifi==0:str=' '.join(P[x])# print("%s %s" %(str, Q[x]))ans=ans+str+" "+Q[x]+"\n"# 写入结果# print("%s -- %s" %(P[x],Q[x]))inn[x]= -1# 更新入度y=0forjinP:ifj.count(Q[x])==1:inn[y]-=1y+=1x+=1

2)整理好规则库之后,我们开始进行推理功能的编写,在这里我们根据相应的规则匹配模式,对用户输入的需要推理的信息进行相应的判断,然后一步步的询问用户相关的规则信息,进行进一步的推理,直到完全匹配出推理信息。代码如下:

defgo(self,flag=True):self.Q=[]self.P=[]fo=open('guizhe.txt','r',encoding='utf-8')forlineinfo:line=line.strip('\n')ifline=='':continueline=line.split(' ')self.Q.append(line[line.__len__()-1])del(line[line.__len__()-1])self.P.append(line)fo.close()print("go按钮按下")self.lines=self.textEdit.toPlainText()self.lines=self.lines.split('\n')# 分割成组self.DB=set(self.lines)print(self.DB)self.str=""print(self.str)flag= Truetemp=""forxinself.P:# 对于每条产生式规则ifListInSet(x,self.DB):# 如果所有前提条件都在规则库中self.DB.add(self.Q[self.P.index(x)])temp=self.Q[self.P.index(x)]flag= False# 至少能推出一个结论# print("%s --> %s" %(x, self.Q[self.P.index(x)]))self.str+="%s --> %s\n"%(x,self.Q[self.P.index(x)])ifflag:# 一个结论都推不出print("一个结论都推不出")forxinself.P:# 对于每条产生式ifListOneInSet(x,self.DB):# 事实是否满足部分前提flag1= False# 默认提问时否认前提foriinx:# 对于前提中所有元素ifinot inself.DB:# 对于不满足的那部分btn=s.quest("是否"+i)ifbtn==QtWidgets.QMessageBox.Ok:self.textEdit.setText(self.textEdit.toPlainText()+"\n"+i)# 确定则增加到textEditself.DB.add(i)# 确定则增加到规则库中flag1= True# 肯定前提# self.go(self)ifflag1:# 如果肯定前提,则重新推导self.go()returnself.textEdit_2.setPlainText(self.str)print("----------------------")print(self.str)ifflag:btn=s.alert("啥也推不出来!!!")# if btn == QtWidgets.QMessageBox.Ok:  # 点击确定#     self.textEdit.setText(self.textEdit.toPlainText() + "\n确定")else:self.lineEdit.setText(temp)

3)询问用户补充的推理信息进行进一步推理,代码如下:

defquest(self,info):QtWidgets.QMessageBox.move(self,200,200)button=QtWidgets.QMessageBox.question(self,"Question",self.tr(info),QtWidgets.QMessageBox.Ok|QtWidgets.QMessageBox.Cancel,QtWidgets.QMessageBox.Cancel)returnbutton

4. 代码的优化处理

在编写的过程中,我们参考了相关的文献资料,思考是否可以通过更新规则库来扩展系统可识别的动物的数量,从而使得系统更加完善。于是在原基础上,通过参考大牛的代码,增添了“修改规则库”和“整理规则库”两个功能。代码如下:

classSecondWindow(QtWidgets.QWidget):def__init__(self,parent=None):super(SecondWindow,self).__init__(parent)self.setWindowTitle("修改规则库")self.setGeometry(725,200,300,300)self.textEdit=QtWidgets.QTextEdit(self)self.textEdit.setGeometry(8,2,284,286)

实验过程中遇到的问题如何解决的?

1. 遇到的问题

在本次实验中最大的问题就是第一步对于规则库的信息的整理和之后如何在匹配这些规则,开始使用了元组和集合,但是都难以进行多次匹配,于是想到了Python本身的字典的“键值对”属性,并且参考了相关文献,对信息做了拓扑排序。

2. 如何解决

首先,对规则信息通过字典的格式存入相应的“guizhe.txt”文件中,然后对当中的信息进行相应的拓扑排序。

本次实验的体会(结论)

1. 结论

本次实验项目,通过pyqt5与Eric6自动生成用户交互页面,体现了Python在前台的优势,同时整体的代码量比起用C/C++而言,大大减少,体现了Python在编写专家系统的优势。

2. 体会与项目优化

在后期查看相应查看大量有关专家系统的文件中,个人认为可以结合知识图谱来构建一个大型的动物专家系统的识别,我们可以通过复旦大学的知识工厂的相应的知识库构建相应的知识图谱,结合MongoDB数据库以及知识图谱的数据库,来构建一个更智能更全面的的动物识别的专家系统。当然所花的时间和精力也是非常巨大的!

python编写的动物识别专家系统_基于Python的动物识别专家系统相关推荐

  1. python人脸识别库_基于Python的face_recognition库实现人脸识别

    Python Python开发 Python语言 基于Python的face_recognition库实现人脸识别 一.face_recognition库简介 face_recognition是Pyt ...

  2. 用python写脚本筛选原创微博_基于python编写的微博应用

    本文实例讲述了基于python编写的微博应用,分享给大家供大家参考.具体如下: 在编写自己的微博应用之前,先要到weibo开放平台申请应用的公钥和私钥. 下载python版的SDK,打开example ...

  3. python 图片识别服装_基于树莓派的服装识别系统及方法与流程

    本发明涉及一种基于树莓派的服装识别系统及方法. 背景技术: 随着人们生活水平的不断提高,人们对于服装的需求不再是传统意义上的生活必需品,服装已经成为人们生活中的一种时尚消费品,所以很大一部分的消费者家 ...

  4. python实现ocr识别算法_基于Python的OCR实现示例

    摘要: 近几天在做一个东西,其中需要对图像中的文字进行识别,看了前辈们的文章,找到两个较简单的方法:使用python的pytesseract库和调用百度AI平台接口.写下这篇文章做一个比较简短的记录和 ...

  5. python实现人脸识别系统设计_基于ROS的人脸识别系统设计与实现

    基于ROS的人脸识别系统设计与实现 文/胡思旺 李春杰 [摘 要]摘 要 [期刊名称]<电子技术与软件工程> [年(卷),期]2019(000)007 [总页数]3 [关键词][关键词]R ...

  6. python编写统计选票的程序_使用python编写微信公众号发稿统计程序

    近日为学校公众号统计发稿情况,需统计本年度各部门分别所发稿件标题.时间.作者等. 首先考虑查看公众号后台有无统计功能,看到的界面如下: 每页只显示7天的消息,且没有部门作者信息.再看另一界面: 只统计 ...

  7. python的图书管理项目教程_基于python图书馆管理系统设计实例详解

    写完这个项目后,导师说这个你完全可以当作毕业项目使用了,写的很全,很多的都设计考虑周全,但我的脚步绝不止于现在,我想要的是星辰大海!与君共勉! 这个项目不是我的作业, 只是无意中被拉进来了,然后就承担 ...

  8. python制作浏览器 脚本之家_基于Python打造账号共享浏览器功能

    本篇文章介绍的内容会涉及到以下知识: PyQt5的使用; Selenium的使用; 代理服务器的架设和使用: 一.账号限制之痛 在如今的互联网中,免费的信息和资源占据了很大一部分,各类互联网应用提供了 ...

  9. python中numpy数组的合并_基于Python中numpy数组的合并实例讲解

    基于Python中numpy数组的合并实例讲解 Python中numpy数组的合并有很多方法,如 - np.append() - np.concatenate() - np.stack() - np. ...

最新文章

  1. LVS+Keepalived+httpd安装及配置
  2. Intel Realsense D435 Tensorlfow-yolov3 测试摄像头识别坐标转换成实际空间坐标的准确程度
  3. 数据结构:线性数据结构(4)-列表(栈,队列,deques, 列表)
  4. android 加载网络bitmap图片 oom 简书_Android常见问题--ImageView加载图片OOM
  5. 卡尔曼滤波——16.新的均值和方差
  6. 2018-03-02 GNUtls 对 TPM1.2 的原生支持
  7. SQLite介绍及使用
  8. froala editor导出html,Froala editor 使用
  9. VBE2019的下载、安装和使用(最新版2019.5.30)
  10. 《胡雪岩·红顶商人》—— 读后总结
  11. 电脑开机就黑屏的几种原因以及解决方案
  12. 每日加瓦,终成栋房3
  13. 阿里亮相 SIGCOMM2017 调度系统NetO惊艳全场
  14. CentOS You need to be root to perform this command问题解决
  15. 游戏应用出海本地化策略,巴西篇
  16. Java原来还可以这么学:如何搞定面试中必考的集合类
  17. ESP8266开发之旅 应用篇① 局域网应用 ——炫酷RGB彩灯
  18. 分享paperpass
  19. 淘客app2019年如何玩的转
  20. 【信息收集】利用Wappalyzer进行cms指纹识别(十)

热门文章

  1. ORACLE 统计男女数量
  2. Navicat 连接阿里云上的数据库
  3. Youtube视频推荐算法:从10页论文到4页论文的变迁
  4. 学习 HTTP Referer
  5. python---关于集合
  6. 华为智慧屏 鸿蒙如何,抛开鸿蒙 华为智慧屏V65作为电视合格吗?
  7. JAVA之设置背景图片的几种方法
  8. 关于 trello 和 slack 的感想及使用经验
  9. Spire.Doc在Word中插入图片时,自适应宽度设置
  10. 转行学Java怎么样?Java培训机构有什么避雷的要点?