python轻量规则引擎rule-engine入门与应用实践

这篇具有很好参考价值的文章主要介绍了python轻量规则引擎rule-engine入门与应用实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

rule-engine是一种轻量级、可选类型的表达式语言,具有用于匹配任意 Python 对象的自定义语法,使用python语言开发。

规则引擎表达式用自己的语言编写,在 Python 中定义为字符串。其语法与 Python 最相似,但也受到 Ruby 的一些启发。这种语言的一些特性包括:

  • 可选类型提示
  • 用正则表达式匹配字符串
  • 日期时间数据类型
  • 复合数据类型(相当于 Python 字典、列表和集合类型)
  • 数据属性
  • 线程安全

参考文档可在 https://zeroSteiner.github.io/rule-engine/ 获取。

规则语法

创建规则的语法基于计算为 True(匹配)或 False(不匹配)的逻辑表达式。规则支持一小组数据类型,这些数据类型可以定义为文字或使用应用规则的 Python 对象进行解析。有关受支持类型的完整列表,请参阅数据类型表。

并非所有受支持的操作都适用于下表所示的所有数据类型。规则遵循标准的操作顺序。

语法

表达式语法支持多种操作,包括数值数据的基本算术和字符串的正则表达式。操作是类型感知的,并且在使用不兼容的类型时会引发异常。

支持的操作

下表概述了可在规则引擎表达式中使用的所有运算符。

算术运算符

python 规则引擎,Python,数据分析,软件开发技术,1024程序员节,python,规则引擎,rule-engine

比较运算符

python 规则引擎,Python,数据分析,软件开发技术,1024程序员节,python,规则引擎,rule-engine

算术比较运算符

python 规则引擎,Python,数据分析,软件开发技术,1024程序员节,python,规则引擎,rule-engine

逻辑运算符

python 规则引擎,Python,数据分析,软件开发技术,1024程序员节,python,规则引擎,rule-engine

  • 按位运算支持浮点值,但如果该值不是自然数,则会引发EvaluationError。

  • 算术比较运算符支持多种数据类型,但左值的数据类型必须与右值的数据类型相同。例如,一个 STRING 可以与另一个 STRING 进行比较,但不能与 FLOAT 进行比较。该技术与 Python 使用的基于字典顺序的序列比较技术相同。

  • 使用正则表达式操作时,左侧的表达式是要比较的字符串,右侧的表达式是用于匹配或搜索操作的正则表达式。

关于时间 DATETIME 值

DATETIME 文字必须以 ISO-8601 格式指定。底层解析逻辑由 dateutil.parser.isoparse() 提供。未指定时间的 DATETIME 值(例如 d"2019-09-23")将计算为指定日期的午夜整点的 DATETIME。

显示等效文字表达式的示例规则:

d"2019-09-23" == d"2019-09-23 00:00:00" (日期默认为午夜,除非指定时间)

安装

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple rule-engine

示例代码

示例1,官方示例

import rule_engine
# match a literal first name and applying a regex to the email
rule = rule_engine.Rule(
    'first_name == "Luke" and email =~ ".*@rebels.org$"'
) # => <Rule text='first_name == "Luke" and email =~ ".*@rebels.org$"' >
rule.matches({
    'first_name': 'Luke', 'last_name': 'Skywalker', 'email': 'luke@rebels.org'
}) # => True
rule.matches({
   'first_name': 'Darth', 'last_name': 'Vader', 'email': 'dvader@empire.net'
}) # => False

示例2,自定义

python 规则引擎,Python,数据分析,软件开发技术,1024程序员节,python,规则引擎,rule-engine

rule = rule_engine.Rule(
    'num >= 20000 and num<=30000'
)
rule.matches({
   'num': 2500
}) # True

rule = rule_engine.Rule(
    '(num >= 2000 and num<=3000) or type=="cars"'
)
rule.matches({
   'num': 1500,'type':'bus'
})  # False

示例3,过滤

改造此方法,可以实现示例2中,按条件获取得分值。

import datetime

comics = [
  {
    'title': 'Batman',
    'publisher': 'DC',
    'issue': 89,
    'released': datetime.date(2020, 4, 28)
  },
  {
    'title': 'Flash',
    'publisher': 'DC',
    'issue': 753,
    'released': datetime.date(2020, 5, 5)
  },
  {
    'title': 'Captain Marvel',
    'publisher': 'Marvel',
    'issue': 18,
    'released': datetime.date(2020, 5, 6)
  }
]
rule = rule_engine.Rule(
  # match books published by DC
  'publisher == "DC"'
)
for v in rule.filter(comics):
    print(v)
    print(v['title'])
	{'title': 'Batman', 'publisher': 'DC', 'issue': 89, 'released': datetime.date(2020, 4, 28)}
	Batman
	{'title': 'Flash', 'publisher': 'DC', 'issue': 753, 'released': datetime.date(2020, 5, 5)}
	Flash

示例4,另外一种方案

conditon=[['num >= 30000',40],
          ['num >= 20000 and num<30000',30],
          ['num >= 10000 and num<20000',20],
          ['num <10000',10]]
         
num = 13003
for v in conditon:
    rule=rule_engine.Rule(v[0])
    if rule.matches({'num':num}):
        print(v[1])
        break

总结

rule-engine做为一种轻量级规则引擎,在数据分析中做为条件规则使用,基本够用了。

参考:

Considerations for building a rules engine in Python. 2021.09
https://zerosteiner.github.io/rule-engine/index.html文章来源地址https://www.toymoban.com/news/detail-766270.html

到了这里,关于python轻量规则引擎rule-engine入门与应用实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 规则引擎架构-基于easy-rules

    规则引擎架构-基于easy-rules

    描述一个简单的处理: 基于一堆现实情况,运用规则引擎、经过处理得到对应的结果,然后再据此做后续的事情 。 fact: 事实,已有的现实情况,即输入信息 rules: 规则集合,由一系列规则组成,可能有不同的规则排列 rule: 规则,包含基本的判断条件和条件符合要做的动作。

    2024年02月08日
    浏览(12)
  • 低代码开发重要工具:jvs-rules 规则引擎功能介绍(三)

    低代码开发重要工具:jvs-rules 规则引擎功能介绍(三)

    规则引擎是由多个组件组成的,这些组件共同协作实现规则的管理、执行和决策流的构建。 决策流:决策流是由多个业务节点连接而成的流程,用于实现复杂的业务逻辑。决策流中的业务节点按照特定的顺序执行,每个节点根据输入数据和规则引擎的执行结果,决定下一个要

    2024年02月15日
    浏览(13)
  • Java源码规则引擎:jvs-rules 8月新增功能介绍

    Java源码规则引擎:jvs-rules 8月新增功能介绍

    JVS-rules是JAVA语言下开发的规则引擎,是jvs企业级数字化解决方案中的重要配置化工具,核心解决业务判断的配置化,常见的使用场景:金融信贷风控判断、商品优惠折扣计算、对员工考核评分等各种变化的规则判断情景。 8月是收获的季节,jvs-rules在这个季节到来之时做了大

    2024年02月14日
    浏览(11)
  • Java中轻量级规则引擎Groovy介绍

    假如在开发一个充值功能,需要支持经常变化的充值营销活动,产品提出了以下需求: 1、根据不同季节,不同节日做不同的充值送活动,以及不定期的优惠活动。 2、还需要根据用户的等级以及用户以往的充值历史做不同的营销活动。 3、能够灵活的配置营销活动 需求很简单

    2024年02月10日
    浏览(44)
  • jvs-rules(规则引擎)1.23功能更新说明,新增SQL变量、数据源等

    jvs-rules(规则引擎)1.23功能更新说明,新增SQL变量、数据源等

    1、新增SQL变量: SQL变量通常指的是在执行SQL查询时使用的动态变量。这些变量允许在查询中注入或更改某些值,以便根据不同的条件或输入执行不同的查询。 1.1 新增自定义SQL语言进行数据查询; 用户可以使用自定义的SQL语句来查询数据。通过这种方式,用户可以在规则中

    2024年01月25日
    浏览(9)
  • 数据挖掘——关联规则(Association Rule)Apriori算法和python代码实现

    数据挖掘——关联规则(Association Rule)Apriori算法和python代码实现

    关联规则(Association Rules)是反映一个事物与其他事物之间的相互依存性和关联性,是数据挖掘的一个重要技术,用于从大量数据中挖掘出有价值的数据项之间的相关关系。 用一些例子来说明一下: 当我们在超市进行购物时,超市中有琳琅满目的商品,在每一次购物结束之后,

    2024年02月04日
    浏览(44)
  • 【规则引擎】Drools急速入门

    【规则引擎】Drools急速入门

    1.Drools规则引擎简介 (1)什么是规则引擎 ​ 全称为业务规则管理系统,英⽂名为BRMS(即 Business Rule Management System)。规则引擎的主要思想是将应用程序中的业务决策部分分离出来,并使用预定义的语义模块编写业务决策(业务规则),由用户或开发者在需要时进行配置、管理

    2024年02月05日
    浏览(6)
  • LiteFlow规则引擎的入门

    LiteFlow规则引擎的入门

    1、LiteFlow简介 LiteFlow是一个非常强大的现代化的规则引擎框架,融合了编排特性和规则引擎的所有特性。 利用LiteFlow,你可以将瀑布流式的代码,转变成以组件为核心概念的代码结构,这种结构的好处是可以任意编排,组件与组件之间是解耦的,组件可以用脚本来定义,组件

    2024年02月05日
    浏览(4)
  • Java规则引擎Drools急速入门

    Java规则引擎Drools急速入门

    1.Drools规则引擎简介 (1)什么是规则引擎 ​ 全称为业务规则管理系统,英⽂名为BRMS(即 Business Rule Management System)。规则引擎的主要思想是将应用程序中的业务决策部分分离出来,并使用预定义的语义模块编写业务决策(业务规则),由用户或开发者在需要时进行配置、管理

    2024年02月04日
    浏览(14)
  • Caching the Application Engine Server 缓存应用程序引擎服务器

    Caching the Application Engine Server 缓存应用程序引擎服务器

    Caching the Application Engine Server 缓存应用程序引擎服务器 Application Engine caches metadata just like the application server. This caching enhances performance because a program can refer to the local cache for any objects that it uses. 应用程序引擎会像应用程序服务器一样缓存元数据。这种缓存提高了性能,因为程序

    2024年02月19日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包