python 3 - Clipspy模块使用

news2025/1/13 7:52:33

一、clipspy安装:

Clipspy底层是基于clips规则引擎开发、支持python3的一个模块,在python3的工程中,可以通过调用clipsy的API接口实现clips规则引擎。

在线安装:

pip install clipspy

当出现Successfully installed字样时,表示安装成功。

离线安装:

手动去pypi官网下载clipspy模块的whl包:

网址:clipspy · PyPI

根据自己的python版本及平台选择对应的文件进行下载:

然后执行以下命令:

后面clipspy-1.0.0-cp39-cp39-win_amd64.whl需根据自己下载的whl包修改。

pip install clipspy-1.0.0-cp39-cp39-win_amd64.whl

二、官方文档:

官方网站:CLIPS Python bindings — clipspy 1.0.0 documentation

clips规则引擎手册:https://clipsrules.sourceforge.io/documentation/v640/apg.pdf

clipspyAPI手册:CLIPS — clipspy 1.0.0 documentation

三、实践:

字符串编写规则,浅试一手:

# !/usr/bin/python3.9
# -*- coding: utf-8 -*-
# @Time: 2022/9/15 10:32
# @Author: [作者名]
# @E-mail: [邮箱]
# @FileName: test.py
# @Software: PyCharm

import clips


def send_msg(msg):
    print("send_msg " + msg)
    pass


myclips = clips.Environment()

# 清除规则
myclips.clear()

# 注册函数  Define the Python function within the CLIPS environment.
myclips.define_function(send_msg)

# 建立规则:通过?实现取参和传参,具体匹配后的操作可在send_msg函数里进行设置
# 也可以将规则都写入一个clp文件中,通过myclips.load("文件名")来加载
conditionstr = """
(defrule my-rule
  (my-fact ?first-slot)
  =>
  (send_msg  ?first-slot))
"""

# 建立规则
myclips.build(conditionstr)

# 清空事实列表
myclips.reset()

# 断言事实
myclips.assert_string("(my-fact test)")
# class clips.facts.Template assert_fact

# 执行引擎,返回激活的次数,int,可以通过比较该返回的int值,来确定匹配到了几条规则,规则是否具有唯一性
myclips.run()

文件编写规则:

rule.clp文件:

(defrule one-rule
  (my-fact 打电话)
  =>
  (send_msg  你想打给谁?)
)

(defrule two-rule
  (my-fact 打给)
  (who ?who)
  =>
  (send_msg  好的,现在拨号给 ?who)
)

(defrule three-rule
  (my-fact 谁最可爱)
  =>
  (send_msg  当然是你呀)
)

(defrule four-rule
  (my-fact 谢谢)
  =>
  (send_msg  不用客气!)
)

主程序:

# !/usr/bin/python3.9
# -*- coding: utf-8 -*-
# @Time: 2022/9/15 10:32
# @Author: [作者名]
# @E-mail: [邮箱]
# @FileName: test.py
# @Software: PyCharm
# 在CLIPS里,以"=>"符号为分界,分别叫Left-hand side (LHS),right-hand side(RHS)。可以叫左端,右端。

import clips

def send_msg(*msgs):
    result = ''
    for msg in msgs:
        result = ''.join([result, msg])
    print("sirin:" + result)
    pass

myclips = clips.Environment()

# 清除规则
myclips.clear()

# 注册函数  Define the Python function within the CLIPS environment.
myclips.define_function(send_msg)
# 也可以将规则都写入一个clp文件中,通过myclips.load("文件名")来加载

# 建立规则
myclips.load("rule.clp")

s = input("siri:请问有什么可以帮到你呢?\n我:")

while True:
    # 清空事实列表
    myclips.reset()
    # 用户输入问题

    if "打给" in s:
        myclips.assert_string("(my-fact 打给)")
        myclips.assert_string("(who %s)" % s[2:])
    else:
        myclips.assert_string("(my-fact %s)" % s)
    # class clips.facts.Template assert_fact

    # 执行引擎,返回激活的次数,int,可以通过比较该返回的int值,来确定匹配到了几条规则,规则是否具有唯一性
    result = myclips.run()

    if result == 0:
        print("siri:抱歉,我听不懂你在说什么。")

    s = input("我:")

执行结果:

clp规则文件中是根据clips要求的规则语法来书写的,如果想要让业务人员能够更加看懂以及自行添加规则,可以开发一套新的规则文件的书写语法,然后在程序中进行转换。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从零开始的深度学习之旅(3)

目录神经网络的损失函数1.损失函数的引入2.损失函数3.回归:误差平方和SSE3.1 MSE的使用3.2 二分类交叉熵损失函数3.3 极大似然估计推导二分类交叉熵损失3.4 用tensor实现二分类交叉熵损失4.多分类交叉熵损失函数4.1 实现多分类交叉熵损失神经网络的损失函数 1.损失…

Excel - 获取帮助信息,查找Sheet中和VBA里的可用函数

Excel获取帮助信息 在使用Excel时,可以点击菜单的Help,可以获取帮助信息或Training。 点击Help帮助信息: 如果你觉得查看不方便,开可以使用浏览器,访问官网线上支持文档: Excel help & learning 而点击…

【微服务】GateWay概念与使用

一、API 网关功能: 路由到指定位置:后台管理系统经常给各个服务发送请求,某一个服务掉线了,我们不可能手动去修改端口号,让它去其他机器找。因此,需要 API 网关,让其帮助我们将请求路由到正确位…

【华为OD机试真题 python】竖直四子棋【2022 Q4 | 200分】

■ 题目描述 【竖直四子棋】 竖直四子棋的棋盘是竖立起来的,双方轮流选择棋盘的一列下子,棋子因重力落到棋盘底部或者其他棋子之上,当一列的棋子放满时,无法再在这列上下子。 一方的4个棋子横、竖或者斜方向连成一线时获胜。 现给定一个棋盘和红蓝对弈双方的下子步骤,…

学会问问题

推荐文档:学会问问题; 目录 三句话原则 你就是孙子 问问题过程 第一步—学会问好 示例如下 第二步—有屁快放 问问题需要加上的前缀或者后缀: 示例如下 第三步—介绍自己的框架 示例如下 第四步—介绍自己的解决思路 示例如下 …

spring cache (Redis方式)

目录前置pom: jar配置文件: application.ymlMyCacheConfig.java效果图前置 会演示springcache的使用方式 项目地址: https://gitee.com/xmaxm/test-code/blob/master/chaim-cache/chaim-spring-cache/chaim-spring-cache-redis/README.md 前置配置 本篇文章是基于上篇文章进行…

Flutter 使用FFI+CustomPainter实现全平台渲染视频

Flutter视频渲染系列 第一章 Android使用Texture渲染视频 第二章 Windows使用Texture渲染视频 第三章 Linux使用Texture渲染视频 第四章 全平台FFICustomPainter渲染视频(本章) 文章目录Flutter视频渲染系列前言一、如何实现1、C/C实现视频采集&#xf…

3. 使用PyTorch深度学习库训练第一个卷积神经网络CNN

这篇博客将介绍如何使用PyTorch深度学习库训练第一个卷积神经网络(CNN)。训练CNN使用 KMNIST 数据集(MNIST digits数据集的替代品,内置在PyTorch中)识别手写平假名字符(handwritten Hiragana characters&am…

图的二种遍历-广度优先遍历和深度优先遍历

图的广度优先遍历 1.树的广度优先遍历 这样一个图中,是如何实现广度优先遍历的呢,首先,从1遍历完成之后,在去遍历2,3,4,最后遍历5 ,6 , 7 , 8。这也就是为什么叫做广度优先遍历,是一层一层的往…

36个数据分析方法与模型

目录一、战略与组织二、质量与生产三、营销服务四、财务管理五、人力资源六、互联网运营好的数据分析师不仅熟练地掌握了分析工具,还掌握了大量的数据分析方法和模型。这样得出的结论不仅具备条理性和逻辑性,而且还更具备结构化和体系化,并保…

Python连接MYSQL、SQL Server、Oracle数据入库一网打尽

描述: Python众所周知用来数据提取,通俗说用来抓数据,将拿到的数据进行数据清洗、加工,分析等等。而其中最重要的部分就是数据爬取、数据入库这两部分了,至于数据分析那就特别考察你的SQL能力,如果是自己设计页面&…

马齿苋多糖偶联顺铂复合物/黄连素偶联顺铂化合物/载顺铂mPEg-PGA纳米微球制备方法

小编今天整理了马齿苋多糖偶联顺铂复合物/黄连素偶联顺铂化合物/载顺铂mPEg-PGA纳米微球制备方法,一起来看! 黄连素偶联顺铂化合物制备方法: 以A549/DDP细胞为研究对象,分别加入12 μg/mL的顺铂,浓度为20 μmol/L,40 μmol/L,80 μmol/L的黄连素12 μg/…

艾美捷EndoGrade卵清蛋白重组示例说明

卵清蛋白是一种优质蛋白质,占蛋清蛋白总量的 54%-69%,卵清蛋白是典型的球蛋白,分子量为 44.5k Da,属含磷糖蛋白,含有四个自由巯基、385 个氨基酸残基。这些氨基酸残基相互缠绕折叠形成具有高度二级结构的球型结构&…

spring cache (默认方式)

目录前置pom配置示列代码效果图部分源码关键类流程代码描述 (此类无用, 只是备注源码的逻辑)前置 什么是springcache: 通过注解就能实现缓存功能, 简化在业务中去操作缓存 Spring Cache只是提供了一层抽象, 底层可以切换不同的cache实现. 通过CacheManager接口来统一不同的缓存…

大数据培训课程MapTask工作机制

MapTask工作机制 MapTask工作机制如图4-12所示。 图4-12 MapTask工作机制 (1)Read阶段:MapTask通过用户编写的RecordReader,从输入InputSplit中解析出一个个key/value。 (2)Map阶段:该节点主要…

java面试强基(9)

字符串拼接用“” 还是 StringBuilder? ​ Java 语言本身并不支持运算符重载,“”和“”是专门为 String 类重载过的运算符,也是 Java 中仅有的两个重载过的运算符。 ​ 字符串对象通过“”的字符串拼接方式,实际上是通过 StringBuilder 调…

【MFC】一个最简单的MFC程序(9)

了解完MFC程序的流程后,会有 “果然不需要了解这些东西,直接用就可以了” 的感觉。这应该是MFC的初衷吧——按照框架来,集中精力做应用。但是没有了解呢? 最简单的MFC程序 步骤: 1、创建WIN32应用程序,空…

GoWeb 的 MVC 入门实战案例,基于 Iris 框架实现(附案例全代码)

1、什么是 MVC M 即 Model 模型是指模型表示业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个…

1531_AURIX_TriCore内核架构_任务以及函数

全部学习汇总: GreyZhang/g_tricore_architecture: some learning note about tricore architecture. (github.com) 继续前面的内核架构学习,这次看一下任务以及函数的描述。 1. 在嵌入式系统中,内核以及函数的设计其实是有一定的模型或者说是…

day33 文件上传中间件解析漏洞编辑器安全

前言 先判断中间件,是否有解析漏洞,字典扫描拿到上传点,或者会员中心,有可能存在文件上传的地方,而后测试绕过/验证,根据实际情况判断是白名单、黑名单还是内容其他的绕过,绕过/验证和中间件的…