赞
踩
能搜到这个文章的,估计你就是为了想找篇现成的系统抄抄了,我也废话不多说好叭。
下面这些是我们当时的要求和加分项:
1.建立一个动物识别系统的规则库,用以识别虎、豹、斑马、长颈鹿、企鹅、鸵鸟、信天翁等7种动物 (至少7种动物和15条规则,规则和动物种类可增加)。
还有诸如,调换规则库顺序后要求输出依旧正确等要求。我不介绍了,你有无法被我满足的需求你自己改代码吧。
除了冲突消解我懒得搞了,其他的都实现了!
这个是主要的交互界面
界面上的功能都能实现。
好了,该放代码了,1
- import sys
- from tkinter import messagebox
-
- from PyQt5 import QtWidgets
- from PyQt5.QtWidgets import QMessageBox
-
- import MAIN
- import alert
- import bye
-
-
- def get_rules():
- # 获取规则库 并将结论和前提分开存储
- RD = open("RD.txt", 'r')
- P = []
- Q = []
- for line in RD:
- line = line.strip('\n') # 删除开头或是结尾的回车字符
- if line == '': # 处理空行 跳过
- continue
- line = line.split(' ') # 切片
- Q.append(line[line.__len__() - 1]) # 分开存储,Q存放每条推理结论
- del (line[line.__len__() - 1])
- P.append(line) # P存放每条推理条件
- RD.close() # 关闭文件
- return P, Q
-
-
- # 判断list中所有元素是否都在集合set中
- def ListInSet(li, se):
- for i in li:
- if i not in se:
- return False
- return True
-
-
- # 设置退出页面
- class bye_ui(QtWidgets.QMainWindow, bye.Ui_MainWindow):
- def __init__(self):
- QtWidgets.QMainWindow.__init__(self) # 创建主界面对象
- bye.Ui_MainWindow.__init__(self) # 主界面对象初始化
- self.setupUi(self) # 配置主界面对象
-
-
- # 设置提示界面
- class alert_ui(QtWidgets.QMainWindow, alert.Ui_MainWindow):
- def __init__(self):
- QtWidgets.QMainWindow.__init__(self) # 创建主界面对象
- alert.Ui_MainWindow.__init__(self) # 主界面对象初始化
- self.setupUi(self) # 配置主界面对象
-
-
- # 设置主界面
- class MAIN_ui(QtWidgets.QMainWindow, MAIN.Ui_MainWindow):
- def __init__(self):
- QtWidgets.QMainWindow.__init__(self) # 创建主界面对象
- MAIN.Ui_MainWindow.__init__(self) # 主界面对象初始化
- self.setupUi(self) # 配置主界面对象
- self.pushButton.clicked.connect(self.add_rule) # 添加规则
- self.pushButton_3.clicked.connect(self.del_rule) # 添加规则
- self.pushButton_4.clicked.connect(self.find_rule) # 查询规则
- self.pushButton_2.clicked.connect(self.inference)
- self.alert_window = alert_ui()
- for line in open('RD.txt'): # 将规则库放入显示框
- self.textBrowser.append(line)
-
- def add_rule(self):
- # 添加新规则
- new_rule = self.lineEdit.text()
- if new_rule != " ":
- self.textBrowser.append(new_rule)
- RD = open('RD.txt', 'a')
- RD.write(new_rule)
- RD.write('\n')
-
- def del_rule(self):
- # 删除规则
- new_rule = self.lineEdit.text()
- if new_rule != " ":
- lines = [l for l in open("RD.txt", "r") if l.find(new_rule) != 0]
- fd = open("RD.txt", "w")
- fd.writelines(lines)
- fd.close()
- self.textBrowser.clear()
- for line in open('RD.txt'): # 将规则库放入显示框
- self.textBrowser.append(line)
-
- def find_rule(self):
- # 查询规则
- new_rule = self.lineEdit.text()
- if new_rule != " ":
- for line in open('RD.txt'):
- a = line.find(new_rule)
- if a == -1:
- msg_box = QMessageBox(QMessageBox.Question, '查询结果', '没找到!!!!!!!!!')
- else:
- msg_box = QMessageBox(QMessageBox.Question, '查询结果', '找到了!!!!!!!!')
- msg_box.exec_() # 执行弹出框
-
- def no(self):
- self.bye_window = bye_ui()
- self.bye_window.show()
- self.alert_window.close()
- self.close()
-
- def inference(self):
- # 推理
- input = self.textEdit.toPlainText() # 获取输入的事实
- input = input.split('\n')
- DB = set(input) # 将综合数据库以集合的形式存放
- [P, Q] = get_rules() # 获取规则库
- self.process = '' # 用于存储推理过程
- self.animal = '' # 存储结论
- DB_list = []
- strr = []
- for p in input:
- DB_list.append(p)
- strr.append(p)
- # 下面开始正式推理
- flag = 0
-
- n = 3 # 遍历两遍
- while n != 0:
- for premise in P: # 对前提条件进行遍历
- if ListInSet(premise, DB) and Q[P.index(premise)] not in DB:
- # 能够找到一个前提条件全部存在于数据库
- DB.add(Q[P.index(premise)]) # 把结论放入综合数据库
- self.animal = Q[P.index(premise)] # 更新结论
- self.process += "%s --> %s\n" % (premise, Q[P.index(premise)])
- flag = 1 # 至少有一个能够推出来的结论
-
- DB_list.append(Q[P.index(premise)]) # 用于数据库的显示
- for i in DB_list:
- self.textEdit_3.insertPlainText(i)
- self.textEdit_3.insertPlainText(" ")
- self.textEdit_3.insertPlainText("\n")
- # print(DB_list)
- # print(Q[P.index(premise)])
- n -= 1
-
- if flag == 0:
- # 一个结论也推不出来,询问用户是否进行补充
- self.alert_window.show()
- self.alert_window.pushButton.clicked.connect(self.alert_window.close)
- self.alert_window.pushButton_2.clicked.connect(self.no)
- else: # flag!=0说明有结论生成
- # 显示出推理过程
- self.textEdit_2.setText(self.process)
- # 显示出结论
- self.lineEdit_2.setText(self.animal)
- strrr = ""
- strrr += "之所以得到的结论是" + self.animal + "是因为具有"
- strrr += " ".join(map(str, strr))
- self.textEdit_4.setText(strrr)
-
-
- app = QtWidgets.QApplication(sys.argv) # 新建窗体
- MAIN_window = MAIN_ui() # 创建主菜单的窗口对象
- MAIN_window.show() # 显示主菜单
- sys.exit(app.exec_()) # 保持显示
这个是主要的py,其他的文件我都打包放在CSDN上了,欢迎下载!地址我到时候放在评论区里
另外!!!本文件参考了
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:基于Python/PYQT5的动物识别专家系统(人工智能实验)_xiaotang_sama的博客-CSDN博客z
这篇文章。如果原作者看到这篇文章不爽或者觉得侵权,请一定要联系我,我马上删!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。