Python 人工智能实战|产生式规则推理系统:动物识别系统、智能客服系统

一、动物识别系统

1.1:前言

产生式系统是基于产生式规则的推理系统,它以产生式规则为基础,利用规则匹配的推理机制来进行推断和解决问题。下图是产生式系统的组成,请从“动物识别系统”程序代码中分别找出规则库、综合数据库和推理机部分,并分析系统实现流程,以及三个部分的所使用的数据存储结构和基本语法。
在这里插入图片描述

在这里插入图片描述

1.2:核心思路

  • 如何保存规则->规则库: 使用feature列表存储特征,rule数组表示即将待匹配的规则前提(根据feature列表中特征相应的序号)
  • 如何存储用户输入&中间结果->综合数据库: 以一个数组/列表变量存储用户输入的相应特征以及推理过程产生的中间前提
  • 匹配流程->推理机: 将综合数据库中的特征信息和rule规则前提依次进行匹配(注意:其实就是前提匹配),并且将得到的中间结论添加到综合数据库,依次完规则匹配,得到最终结果。
    在这里插入图片描述

1.3:代码实现

 # -*- coding: utf-8 -*-
import sys

# 存储规则中所有的feature
features = ["", "有奶", "有毛发", "有羽毛", "会飞", "会下蛋",  \
            "吃肉", "有犬齿", "有爪","眼盯前方", "有蹄", "嚼反刍",\
            "黄褐色", "身上有暗斑点", "身上有黑色条纹", "有长脖子", \
            "有长腿", "不会飞", "会游泳", "有黑白二色", "善飞",\
            "哺乳动物", "鸟", "食肉动物", "蹄类动物", "金钱豹", "虎",\
            "长颈鹿", "斑马", "鸵鸟", "企鹅", "信天翁"]

print('以下是一些动物的特征:')
print('\n')

i = 1
while i < len(features):
    print('%d' %i +'.'+ features[i]+ '  ', end='')
    i = i+1
    if i % 4 == 1:
        print('\n')

print('\n')



answer = input('请选择动物的特征编号,用英文逗号分开,回车结束输入:')
# 接收到的answer是一个字符串
try:
    answer = list(answer.split(','))
    new_answer = [int(x) for x in answer]
    print(new_answer)
except Exception:
    print('您输入的是数字么?或者,逗号不是英文的?')
    sys.exit()

# rule只保存了前提(方便后面进行匹配,因为匹配是匹配前提!!!)
rule1 = [2]   # if 动物有毛发  then  动物是哺乳动物
rule2 = [1]   # if 动物有奶  then  动物是哺乳动物

rule3 = [3]   # if 动物有羽毛  then  动物是鸟
rule4 = [4, 5]  # f 动物会飞  and  会生蛋 then  动物是鸟

rule5 = [6]  # if 动物吃肉 then 动物是食肉动物
rule6 = [7, 8, 9]  # if 动物有犀利牙齿 and 有爪 and 眼向前方 then 动物是食肉动物

rule7 = [21, 10]  # if 动物是哺乳动物and有蹄then动物是有蹄类动物
rule8 = [21, 11]  # if 动物是哺乳动物and反刍then动物是有蹄类动物

rule9 = [21, 23, 12, 13]  # if 动物是哺乳动物and是食肉动物and有黄褐色 and 有暗斑点 then 动物是豹
rule10 = [21, 23, 12, 14]  # if 动物是哺乳动物 and是食肉动物and有黄褐色 and 有黑色条纹 then 动物是虎
rule11 = [24, 15, 16, 13]  # if动物是有蹄类动物  and 有长脖子and有长腿and有暗斑点 then 动物是长颈鹿
rule12 = [24, 14]  # if 动物是有蹄类动物 and有黑色条纹 then 动物是斑马
rule13 = [22, 17, 16, 15, 19]  # if 动物是鸟and不会飞 and有长脖子and有长腿 and有黑白二色 then 动物是鸵鸟
rule14 = [22, 17, 18, 19]  # if 动物是鸟 and不会飞 and会游泳 and有黑白二色 then  动物是企鹅
rule15 = [22, 4]  # if 动物是鸟 and善飞 then 动物是信天翁

#推理过程如下:
#dict=[]
if set(rule1)<=set(new_answer): # 规则库前提内容 < 综合库内容,说明肯定能从规则库推理出新结论(也就是“匹配”)
    print('2->21')
    print('这个动物是')
    print(features[21])
    new_answer.append(21)  # 将推理的中间结果加入综合库
if set(rule2)<=set(new_answer):
    print('1->21')
    print('这个动物是')
    print(features[21])
    new_answer.append(21)
if set(rule3)<=set(new_answer):
    print('3->22')
    new_answer.append(22)
if set(rule4)<=set(new_answer):
    print('4+5->22')
    new_answer.append(22)
if set(rule5)<=set(new_answer):
    print('6->23')
    new_answer.append(23)
if set(rule6)<=set(new_answer):
    print('7+8+9->23')
    new_answer.append(23)
if set(rule7)<=set(new_answer):
    print('21+10->24')
    new_answer.append(24)
if set(rule8)<=set(new_answer):
    print('21+11->24')
    new_answer.append(24)
#最后判断是什么动物
if set(rule9)<=set(new_answer):
    print(features[25])
elif set(rule10)<=set(new_answer):
    print(features[26])
elif set(rule11)<=set(new_answer):
    print(features[27])
elif set(rule12)<=set(new_answer):
    print(features[28])
elif set(rule13)<=set(new_answer):
    print(features[29])
elif set(rule14)<=set(new_answer):
    print(features[30])
elif set(rule15)<=set(new_answer):
    print(features[31])
else:print('识别失败!')


二、简单的自动问答系统

2.1:前言

实现一个简单的自动问答系统。要求系统能够实现如下功能:
如果用户"询问产品",则显示"了解您想了解的产品信息,请问您具体对哪些产品感兴趣?
如果用户"询问价格",则显示"您可以在我们的官方网站上查询到最新的产品价格信息。
如果用户"询问库存",则显示"您所感兴趣的产品目前还有货,您可以直接在官网进行购买。
如果用户"投诉",则显示"非常抱歉给您带来不便,请您提供您的订单号,我们会尽快为您解决问题。
如果用户"退货",则显示"如果您对购买的产品不满意,可以在15天内提出退货申请,我们会尽快为您处理。
如果用户"取消订单",则显示"请您提供订单号,我们将为您取消订单并处理相关退款。
如果用户"咨询售后服务",则显示"您可以在我们的官方网站上查询到售后服务的联系方式,我们会尽快为您提供帮助。
分析算法基本流程,并编程实现。程序实现时需思考如下几点:
1、规则库如何存储?
2、规则与用户输入如何匹配?
提示:如果a和b都是字符串,则语法If a in b可判断b是否包含a

2.2:核心思路

这个自动问答系统本质上和动物识别系统一样,都是产生式规则推理系统,而且比上面的动物识别系统要简单很多,因为不会产生中间结果!如此一来,我们可以直接把前提和结论作为一个规则以元组或map的形式存起来就好,所有的规则还是以列表存储。

  • 如何保存规则->规则库: 同样还是采用列表存储,但这次是把前提和结论一起存起来
  • 如何存储用户输入&中间结果->综合数据库: 直接用一个变量存储
  • 匹配流程->推理机: 将综合数据库中的特征信息和rule规则前提依次进行匹配,依次完规则匹配,得到最终结果。

2.3:代码实现

import sys

# 定义智能客服系统规则库
rules = [
    (["询问产品"], ["了解您想了解的产品信息,请问您具体对哪些产品感兴趣?"]),
    (["询问价格"], ["您可以在我们的官方网站上查询到最新的产品价格信息。"]),
    (["询问库存"], ["您所感兴趣的产品目前还有货,您可以直接在官网进行购买。"]),
    (["投诉"], ["非常抱歉给您带来不便,请您提供您的订单号,我们会尽快为您解决问题。"]),
    (["退货"], ["如果您对购买的产品不满意,可以在15天内提出退货申请,我们会尽快为您处理。"]),
    (["取消订单"], ["请您提供订单号,我们将为您取消订单并处理相关退款。"]),
    (["咨询售后服务"], ["您可以在我们的官方网站上查询到售后服务的联系方式,我们会尽快为您提供帮助。"])
]

# 收集投诉信息的函数
def collect_complaint_info():
    order_number = input("请提供您的订单号:")
    complaint_details = input("请简要描述您的投诉内容:")
    return order_number, complaint_details

print("欢迎使用智能客服系统!")
user_input = input("请输入您的问题或需求:")

# 初始化解决方案为空
solution = None

# 遍历规则库,寻找匹配的规则
for rule in rules:
      item= rule[0][0]
      if item in user_input:
          solution = rule[1][0]
          break

# 根据匹配到的解决方案输出结果
if solution:
    print("解决方案:", solution)
else:
    print("对不起,无法识别您的问题或需求。")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/506875.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Golang | Leetcode Golang题解之第4题寻找两个正序数组的中位数

题目&#xff1a; 题解&#xff1a; func findMedianSortedArrays(nums1 []int, nums2 []int) float64 {if len(nums1) > len(nums2) {return findMedianSortedArrays(nums2, nums1)}m, n : len(nums1), len(nums2)left, right : 0, mmedian1, median2 : 0, 0for left <…

IPD推行成功的核心要素(二)如何选择咨询公司或是自己推行?

大家都知道华为公司在引入了IBM的IPD研发管理体系后&#xff0c;营收不断创新高。随着企业的发展壮大&#xff0c;越来越多的企业发现&#xff0c;在产品管理与开发过程中&#xff0c;出现一些难以解决的困难。这也刺激了相当多一部分公司跟风引入IPD体系。IPD是以市场需求为导…

C++第十四弹---模板初阶

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、泛型编程 2、函数模板 2.1、函数模板的概念 2.2、函数模板的格式 2.3、函数模板的原理 2.4、函数模板的实例化 2.5、模板参数的匹配原则 …

三、强一致性介绍

这里写自定义目录标题 三、强一致性介绍3.1 基本理解3.2 DTP模型3.3 落地协议XA3.4 ⼆阶段提交模型3.5 ⼆阶段提交的问题3.6 navicat操作xa 三、强一致性介绍 3.1 基本理解 相关特点 强⼀致性解决⽅案要求在任何时间点&#xff0c;任何时刻查询&#xff0c;参与全局事务的各个…

B树、B+树、哈夫曼树

目录 1. B树2. B树3. 哈夫曼树 1. B树 特点&#xff1a;一个节点当中可以有多个值&#xff0c;节点内部key 值是有序的&#xff0c;节点内部存储的是key-value类型的数据 磁盘中文件存储用B树。 4阶B树一个节点最多三个key值 5阶B树一个节点最多四个key值 B树有很多的分支&…

抽象类和接口(2)(接口部分)

❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; hellohello~&#xff0c;大家好&#x1f495;&#x1f495;&#xff0c;这里是E绵绵呀✋✋ &#xff0c;如果觉得这篇文章还不错的话还请点赞❤️❤️收藏&#x1f49e; &#x1f49e; 关注&#x1f4a5;&a…

Go的数据结构与实现【Ring Buffer】

介绍 在本文中&#xff0c;我们将用Go实现环形缓冲区&#xff08;Ring Buffer&#xff09; Ring Buffer 环形缓冲区&#xff08;或循环缓冲区&#xff09;是一种有界循环数据结构&#xff0c;用于在两个或多个线程之间缓冲数据。当我们继续写入环形缓冲区时&#xff0c;它会…

JavaScript 入门指南(三)BOM 对象和 DOM 对象

BOM 对象 BOM 简介 BOM&#xff08;browser Object Model&#xff09;即浏览器对象模型BOM 由一系列对象组成&#xff0c;是访问、控制、修改浏览器的属性的方法BOM 没有统一的标准&#xff08;每种客户端都可以自定标准&#xff09;。BOM 的顶层是 window 对象 window 对象 …

深入解析Hadoop生态核心组件:HDFS、MapReduce和YARN

这里写目录标题 01HDFS02Yarn03Hive04HBase1&#xff0e;特点2&#xff0e;存储 05Spark及Spark Streaming关于作者&#xff1a;推荐理由&#xff1a;作者直播推荐&#xff1a; 一篇讲明白 Hadoop 生态的三大部件 进入大数据阶段就意味着进入NoSQL阶段&#xff0c;更多的是面向…

代码随想录阅读笔记-二叉树【二叉树的所有路径】

题目 给定一个二叉树&#xff0c;返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 思路 这道题目要求从根节点到叶子的路径&#xff0c;所以需要前序遍历&#xff0c;这样才方便让父节点指向孩子节点&#xff0c;找到对应的路径。 在这道…

【CSS】基础选择器

目录 标签选择器 id选择器 类选择器 CSS的编写地点&#xff1a; 标签选择器 说明&#xff1a;标签选择器实际上就是HTML标签元素&#xff08;可以是任何HTML元素&#xff09;&#xff0c;用来改变一个指定标签的样式 示例&#xff1a; <style type"text/css"…

QQ邮箱SMTP发送邮件时要注意哪些安全设置?

QQ邮箱SMTP发送邮件的步骤&#xff1f;如何配置QQ邮箱服务器&#xff1f; 在使用QQ邮箱SMTP发送邮件时&#xff0c;安全设置是至关重要的一环。不当的安全设置不仅可能导致邮件发送失败&#xff0c;还可能使你的账户面临安全风险。下面&#xff0c;AokSend就来详细探讨一下QQ邮…

基于单片机16位智能抢答器设计

**单片机设计介绍&#xff0c;基于单片机16位智能抢答器设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机16位智能抢答器设计是一个结合了单片机技术、显示技术、按键输入技术以及声音提示技术的综合性项目。其设计…

脑机辅助推导算法

目录 一&#xff0c;背景 二&#xff0c;华容道中道 1&#xff0c;问题 2&#xff0c;告诉脑机如何编码一个正方形格子 3&#xff0c;让脑机汇总信息 4&#xff0c;观察图&#xff0c;得到启发式算法 5&#xff0c;根据启发式算法求出具体解 6&#xff0c;可视化 一&am…

苹果App审核大揭秘

苹果上架要求是苹果公司对于提交应用程序到苹果商店上架的要求和规定。这些要求主要是为了保证用户体验、应用程序的质量和安全性。以下是苹果上架要求的详细介绍&#xff1a;1. 应用程序的内容和功能必须符合苹果公司的规 苹果上架要求是苹果公司对于提交应用程序到苹果商店上…

u盘不显示盘符怎么办,u盘不显示盘符

我们经常使用电脑,难免会遇到各种问题,其中U盘不显示盘盘符也是常见的一种。用u盘插入电脑usb接口后,却识别不出u盘,而且更换usb接口以后还是没有u盘盘符,这可怎么用呢?针对此问题,极客狗整理了两个处理方法,接下来带小伙伴一起看看u盘不显示盘符怎么办。遇到同样问题的…

Python数据结构实验 查找实验(一)

一、实验目的 1&#xff0e;熟悉查找的基本概念&#xff0c;包括静态查找表和动态查找表、内查找和外查找之间的差异以及平均查找长度等&#xff1b; 2&#xff0e;掌握线性表上的各种查找算法&#xff0c;包括顺序查找、折半查找和分块查找的基本思路、算法实现和查找效率等…

游戏引擎中的声音系统

一、声音基础 1.1 音量 声音振幅的大小 压强p&#xff1a;由声音引起的与环境大气压的局部偏差 1.2 音调 1.3 音色 1.4 降噪 1.5 人的听觉范围 1.6 电子音乐 将自然界中连续的音乐转换成离散的信号记录到内存中 采样 - 量化 - 编码 香农定理&#xff1a;采样频率是信…

云原生技术精选:探索腾讯云容器与函数计算的最佳实践

文章目录 写在前面《2023腾讯云容器和函数计算技术实践精选集》深度解读案例集特色&#xff1a;腾讯云的创新实践与技术突破精选案例分析——Stable Diffusion云原生部署的最佳实践精选集实用建议分享总结 写在前面 在数字化转型的浪潮下&#xff0c;云计算技术已成为企业运营…

shell脚本发布docker-nginx vue2 项目示例

docker、git、node.js安装略过。 使git pull或者git push不需要输入密码操作方法 nginx安装在docker容器里面&#xff0c;参见&#xff1a;https://blog.csdn.net/HSJ0170/article/details/128631155 姊妹篇&#xff08;宿主机nginx&#xff0c;非docker-nginx&#xff09;&am…