首页 > Python资料 博客日记
Python 人工智能实战|产生式规则推理系统:动物识别系统、智能客服系统
2024-10-03 14:00:06Python资料围观32次
文章Python 人工智能实战|产生式规则推理系统:动物识别系统、智能客服系统分享给大家,欢迎收藏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("对不起,无法识别您的问题或需求。")
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj