python库导入对象语句_Python Intellect包_程序模块 - PyPI - Python中文网

智力

< COL/>

< COL/>

信息:intelligent是一个针对python的领域特定语言和规则引擎。

作者:迈克尔·约瑟夫·沃尔什

<H3>1。什么是智力

intelligent是一种dsl("领域特定语言")和python的规则引擎

我是为表达策略来编排和控制动态

网络防御网络安全平台的研究

米特公司的创新计划。

规则引擎提供了一种智能,一种人工智能,

客观地对工作记忆进行推理和理解的能力。

内存保留与系统相关的知识和一组规则

在dsl中编写,描述实现某些

目标.每个规则都有一个可选条件,以及一个或多个

行动。这些行为要么进一步引导系统的行为,

和/或进一步通知系统。引擎是从一些事实开始的,

关于过去或现在情况的真相,并用规则来推断

更多的事实。这些事实引发了更多的规则,从而推断出更多的事实

关于

对于创新计划中的平台,Network Defender使用

DSL授予策略,平台如何响应网络

事件通过隐蔽的网络通道挂载,但没有直接的

语言与规则引擎与网络安全的关系

因此,整个系统可以更广泛地应用于

其他域。

<H3>2。安装

通过设置工具安装

要通过pip安装,请使用pip install intelligent

要通过pypm安装,请使用pypm install intelligent

<H3>3。依赖关系python本身,如果你还没有它的话。我在Python2.7.1、2.7.2、2.7.3上测试了代码。

<H3>4。贡献

源代码在BSD4条款许可下可用。如果你有主意,

希望贡献的代码、错误报告或修复请这样做。

bug和功能请求可以在github上提交。

<H3>5。背景

许多生产规则系统实现都是开源的,例如

jboss drools,rools,jess,lisa,等等。如果你熟悉

Drools语法,Intelligent的语法看起来应该很熟悉。(我不是说

是以它为基础的,因为它并不完全,但我在工作时发现

我会用drools检查语法,如果有意义的话,可以将

流口水的方向,这就是我所做的。)上述实现

可用于其他语言来表示生产规则,但它是

我认为python的代表性不足,因此我认为

语言和规则引擎可以从开源中获益,所以我把

请求进入。

米特公司批准于2011年8月4日发布。

因此,将领域特定语言(DSL)和规则引擎释放到正常开放

希望这样做能扩大它的使用范围并增加它的机会

为可能的采用,同时使项目成熟

将感兴趣的眼球放在上面。

首先,最初假设上述平台

与可用于

python有无数的ruby、java和perl实现,

但令人惊讶的是,我发现没有一个符合这个项目的需要。这导致了

发明一个的想法;简单地键入关键字"python规则

引擎"进入谷歌虽然会返回给你的建议"不要发明

还有另一种规则语言",但是你应该"只写

你在python中的规则,导入并执行它们。

建议可以合并为这样做,否则不符合

"蟒蛇哲学"。当时,我不相信这是真的,也不相信

完全语境化,但不可否认,我还没有写一行

python代码(是的,您正在查看我的第一个python程序。所以,

请让我休息一下。)在此之前也不要使用antlr3。看

回到过去,我坚信发明一个规则引擎并将其抽象出来的行为

在描述和说明特定领域的术语后面是

在上述平台的情况下,网络防御程序的最佳方式

想想这个问题。就像我说的DSL和规则引擎

可用于任何需要"生产规则系统"的情况。

因为没有适合python平台的规则引擎

需要,建立了一个策略语言和朴素的前向链接规则引擎

从零开始。策略语言的语法基于python的一个子集

语言语法。策略dsl在

antlr3 python的解析生成器和运行时。

<H3>6。事实(数据经过推理)

解释器、规则引擎和代码的其余部分,如

用于授予离散网络条件的对象,称为"事实",

也是用python编写的。python的面向对象编程方法

范型中的对象由数据字段和方法组成,并不容易

善于描述"事实"。因为python对象的数据字段

在句法上被称为"属性"可以而且经常被设置在

类的实例,它们在类的实例化之前不存在。

为了让规则引擎工作,它必须能够完全反省

表示条件的对象实例。这证明是非常困难的

除非具有两个属性的属性decorator,"getter"和"setter",

在Python2.6中引入,被采用并正式用于编写这些对象。

巧合的是,在

在python开发人员社区中,java特别不受欢迎。

"python不是java"的欢呼声

因此,您需要将事实编写为python对象的who属性

形式化地表示为属性,对于您想要的属性

结束原因:class ClassA(object):

'''

An example fact

'''

def __init__(self, property0 = None, property1 = None):

'''

ClassA initializer

'''

self._property0 = property0

@property

def property0(self):

return self._property0

@property0.setter

def property0(self, value):

self._property0 = value

7.1导入语句(

importstmts

)

import语句基本上遵循python,但有一些限制。为了

例如,由于以下原因,不支持通配符形式的导入

详细阐述了

此处

并遵循Python2.7.2语法。

importstmt

语句只存在于同一个

根据语法,rulestmt语句的级别,通常位于

策略文件,但不限于。事实上,如果你把你的政策分成

将上次作为类或模块导入的文件作为正在命名的类或模块获胜。

7.2属性语句(

属性

)

< div >

a

attributestmt

的语法图

attributestmt

语句是用于创建策略属性的表达式,是

全局变量,可从规则中访问。

例如,可以编写策略:import logging

first_sum = 0

second_sum = 0

rule "set both first_sum and second_sum to 1":

agenda-group "test_d"

then:

attribute (first_sum, second_sum) = (1,1)

log("first_sum is {0}".format(first_sum), "example", logging.DEBUG)

log("second_sum is {0}".format(second_sum), "example", logging.DEBUG)

rule "add 2":

agenda-group "test_d"

then:

attribute first_sum += 2

attribute second_sum += 2

log("first_sum is {0}".format(first_sum), "example", logging.DEBUG)

log("second_sum is {0}".format(second_sum), "example", logging.DEBUG)

rule "add 3":

agenda-group "test_d"

then:

attribute first_sum += 3

attribute second_sum += 3

log("first_sum is {0}".format(first_sum), "example", logging.DEBUG)

log("second_sum is {0}".format(second_sum), "example", logging.DEBUG)

rule "add 4":

agenda-group "test_d"

then:

attribute first_sum += 4

attribute second_sum += 4

log("first_sum is {0}".format(first_sum), "example", logging.DEBUG)

log("second_sum is {0}".format(second_sum), "example", logging.DEBUG)

halt

rule "should never get here":

agenda-group "test_d"

then:

log("Then how did I get here?", "example", logging.DEBUG)

包含两条语句:first_sum = 0

second_sum = 0

以下规则将使用attributeAction增加这两个属性

声明。

执行此策略的代码如下:class MyIntellect(Intellect):

pass

if __name__ == "__main__":

# set up logging for the example

logger = logging.getLogger('example')

logger.setLevel(logging.DEBUG)

consoleHandler = logging.StreamHandler(stream=sys.stdout)

consoleHandler.setFormatter(logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s%(message)s'))

logger.addHandler(consoleHandler)

myIntellect = MyIntellect()

policy_d = myIntellect.learn(Intellect.local_file_uri("./rulesets/test_d.policy"))

myIntellect.reason(["test_d"])

执行上述操作的日志输出为:2011-10-04 23:56:51,681 example DEBUG __main__.MyIntellect :: first_sum is 1

2011-10-04 23:56:51,682 example DEBUG __main__.MyIntellect :: second_sum is 1

2011-10-04 23:56:51,683 example DEBUG __main__.MyIntellect :: first_sum is 3

2011-10-04 23:56:51,683 example DEBUG __main__.MyIntellect :: second_sum is 3

2011-10-04 23:56:51,685 example DEBUG __main__.MyIntellect :: first_sum is 6

2011-10-04 23:56:51,685 example DEBUG __main__.MyIntellect :: second_sum is 6

2011-10-04 23:56:51,687 example DEBUG __main__.MyIntellect :: first_sum is 10

2011-10-04 23:56:51,687 example DEBUG __main__.MyIntellect :: second_sum is 10

另一个例子,请参见第7.3.3.1.2节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值