动物识别专家系统PYTHON

能搜到这个文章的,估计你就是为了想找篇现成的系统抄抄了,我也废话不多说好叭。

下面这些是我们当时的要求和加分项:

1.建立一个动物识别系统的规则库,用以识别虎、豹、斑马、长颈鹿、企鹅、鸵鸟、信天翁等7种动物 (至少7种动物和15条规则,规则和动物种类可增加)。

n 1. 具有人机交互界面
n 2. 提示 / 允许用户补充事实
n 3. 知识 库可进行增添、修改、删除新 的规则和动物种类
n 4. 冲突消解
n 5. 可以对得到的结论进行解释(比如:得到的结论是“信天翁”,程序可以解释之所以得到的结论是“信天翁”是因为具有“羽毛”和“善飞”这两个事实。)
n 6 综合数据库动态展示

还有诸如,调换规则库顺序后要求输出依旧正确等要求。我不介绍了,你有无法被我满足的需求你自己改代码吧。

除了冲突消解我懒得搞了,其他的都实现了!

这个是主要的交互界面

 

 界面上的功能都能实现。

好了,该放代码了,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

 这篇文章。如果原作者看到这篇文章不爽或者觉得侵权,请一定要联系我,我马上删!!!

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值