相关疑难解决方法(0)

在Python中实现"规则引擎"

我正在用Python编写日志收集/分析应用程序,我需要编写一个"规则引擎"来匹配日志消息并对其进行操作.

它需要具备以下功能:

  • 消息本身的正则表达式匹配
  • 消息严重性/优先级的算术比较
  • 布尔运算符

我想象一个示例规则可能是这样的:

(message ~ "program\\[\d+\\]: message" and severity >= high) or (severity >= critical)
Run Code Online (Sandbox Code Playgroud)

我正在考虑使用PyParsing或类似实际解析规则并构造解析树.

我想到的当前(尚未实现的)设计是为每个规则类型创建类,并根据解析树构造和链接它们.然后,每个规则都有一个"匹配"方法,可以使消息对象返回它是否与规则匹配.

很快,像:

class RegexRule(Rule):
    def __init__(self, regex):
         self.regex = regex

    def match(self, message):
         return self.regex.match(message.contents)

class SeverityRule(Rule):
    def __init__(self, operator, severity):
         self.operator = operator

    def match(self, message):
         if operator == ">=":
             return message.severity >= severity
         # more conditions here...

class BooleanAndRule(Rule):
    def __init__(self, rule1, rule2):
         self.rule1 = rule1
         self.rule2 = rule2

    def match(self, message):
          return self.rule1.match(message) and self.rule2.match(message)
Run Code Online (Sandbox Code Playgroud)

然后,这些规则类将根据消息的分析树链接在一起,并在最高规则上调用match()方法,该方法将向下级联,直到评估完所有规则. …

python parsing rules

19
推荐指数
2
解决办法
3万
查看次数

基于开源的规则引擎Java或Python

我正在寻找一个用Java或Python编写的规则引擎,它支持以下功能:

  1. 决策表
  2. 轻松创建简单的业务规则(最好由非技术人员)
  3. SOAP/REST支持

已经排除了Drools(非常笨重,对非技术用户不友好).

到目前为止候选人是:

  1. Nebri OS(Python/Django)
  2. 简易规则(Java)
  3. n-cube(基于Groovy)

阅读Easy Rules不支持前向和后向链接,以及广度优先和深度优先搜索策略.

它只执行一次所有规则.

任何人都可以建议一个基于开源的规则引擎,用Java或Python编写?

感谢您抽时间阅读.

python java rule-engine business-rules

13
推荐指数
2
解决办法
3万
查看次数

C或Python中的规则引擎

我正在寻找一个C或Python的规则引擎,但如果你知道用另一种语言实现的规则引擎,我会很高兴知道它.

引擎将用作自动化房屋的方式,例如当有人离开房间时关灯.所以那里没有"办公室"规则(也就是你在Excel中规则等).

我已经研究过Java中的Jess和Drools并且做得很好.我想知道其他人,并且可能使用比Java更少的内存.我在Python中听说过RuleCore,但实际上找不到任何文档(SourceForge上的版本1.0可用,但看起来它们正在销售v.2.0).

编辑:通过规则引擎(推理引擎),我的意思是RETE或等效的实现.

c python java rule-engine

6
推荐指数
1
解决办法
1万
查看次数

基于Python规则的引擎

我正在寻求设计一个基本上需要根据输入做出决策的系统。输入将是一个人。

class Person:
    def __init__(self, name, age, sex, weight, height, nationality):
        self.name = name
        self.age = age
        self.sex = sex
        self.weight = weight
        self.height = height
        self.nationality = nationality
Run Code Online (Sandbox Code Playgroud)

我们希望根据某些规则将每个人分配到一个学校班级。

例如:

22至25岁之间的英国女性应进入B级。75岁以上的男性应进入A级。6英尺以上的女性应进入C级。

我们将有大约400个不同的规则,并且应该应用第一个满足的规则-我们需要保持规则的顺序。

我正在考虑如何在此处存储/表示规则。显然,您可能只想发表一段很长的if, elif, elif声明,但这并不有效。另一种选择是将规则存储在数据库中,并可能在内存表中。

我希望能够在不发布规则的情况下编辑规则-可能具有前端,以允许非技术人员添加,删除和重新排序规则。

一切都在这里-唯一的要求是实际的编程语言必须是Python。

添加了更多内容

我想我的问题是如何存储规则。目前,这是一条很长的if elif elif语句,因此只要业务逻辑发生变化,PM都会制定新规则,然后将它们转换为if语句。

系统的所有输入将通过相同的规则列表发送,并且将应用匹配的第一个规则。多个规则可以应用于每个输入,但始终是第一个应用的规则。

例如

25岁以上的
女性去B级女性去A级。

即使第二条规则也适用,所有25岁以上的女性都将被送入B级。

输入将始终包含相同格式的输入-尚未确定它是对象还是字典的位置,但其中一些值可能是None。有些人可能没有与之相关的体重。

python artificial-intelligence rules expert-system

2
推荐指数
1
解决办法
1万
查看次数