Python中文
首页
教程
问答
标签
搜索
登录
注册
用Python实现“规则引擎”
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我正在用Python编写一个日志收集/分析应用程序,我需要编写一个“规则引擎”来匹配和处理日志消息。</p> <p>它需要具备:</p> <ul> <li>与消息本身匹配的正则表达式</li> <li>消息严重性/优先级的算术比较</li> <li>布尔运算符</li> </ul> <p>我设想一个示例规则可能是这样的:</p> <pre><code>(message ~ "program\\[\d+\\]: message" and severity >= high) or (severity >= critical) </code></pre> <p>我正在考虑使用<a href="http://pyparsing.wikispaces.com/" rel="noreferrer">PyParsing</a>或类似方法来实际解析规则并构造解析树。</p> <p>当前(尚未实现)的设计是为每个规则类型都有类,并根据解析树将它们构造和链接在一起。然后,每个规则都有一个“matches”方法,该方法可以接受一个消息对象返回,不管它是否与规则匹配。</p> <p>很快,比如:</p> <pre><code>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) </code></pre> <p>然后,这些规则类将根据消息的解析树和对顶部规则调用的match()方法链接在一起,该方法将向下级联,直到对所有规则求值。</p> <p>我只是想知道这是一个合理的方法,还是我的设计和想法完全不正常?不幸的是,我从来没有机会参加编译器设计课程或类似的东西在大学,所以我几乎提出了我自己的东西。</p> <p>有这方面的经验的人可以插嘴评价一下这个想法吗?</p> <p><strong>编辑:</strong> 到目前为止有一些好的答案,这里有一些澄清。</p> <p>该程序的目的是从网络上的服务器收集日志消息并将它们存储在数据库中。除了日志消息的集合之外,收集器还将定义一组规则,这些规则将根据条件匹配或忽略消息,并在必要时标记警报。</p> <p>我看不出规则的复杂度超过中等,它们将应用于链(列表),直到匹配的警报或忽略规则被命中。然而,这一部分与这个问题并不十分相关。</p> <p>至于语法接近Python语法,是的,这是真的,但是我认为很难将Python过滤到这样的程度:用户不能不经意地使用一些不想使用的规则做一些疯狂的事情。</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>你可能还想看看<a href="http://pyke.sourceforge.net/logic_programming/index.html" rel="noreferrer">PyKE</a>。</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
想用靓汤抢夺价值
4 回答
想申请一份符合工作描述的简历吗
1 回答
想画网格,Python
2 回答
想白痴化我的Python战舰
9 回答
想看两列日期,但只上
1 回答
想看看我写的这个脚本读一个Fortran二进制fi吗
2 回答
想知道Django是如何实现ORM查询优化的吗
2 回答
想知道GeoDjango和地图服务吗
6 回答
想知道Image.resize操作在PIL文件中的详细工作方式吗
8 回答
想知道matplotlib pyplot为什么不调整边距
8 回答
想知道matplotlib颜色的颜色代码吗
6 回答
想知道pd.factorize,pd.get_dummies,sklearn.preprocessing.labeencoder和OneHotEncod之间的区别
4 回答
想知道property()在python中的实际用法吗
3 回答
想知道pyodidejs是如何工作的吗?
7 回答
想知道pyparsing==2.0.1的已完成处理依赖关系
3 回答
想知道ScikitLearn中的编码算法吗
9 回答
想知道VTK 5.04和VTK 5.4.2的vtkMassProperties差异吗
4 回答
想知道一个特定字符在一个特定句子中出现的次数吗
10 回答
想知道两个不同子集的重叠中有多少个对象吗
6 回答
想知道为什么is_素数函数的结果不正确吗
5 回答