一种规则处理方法及设备
技术领域
本发明涉及电子技术领域,特别涉及一种规则处理方法。本发明同时还设计一种规则处理设备。
背景技术
规则引擎是基于一组规则集和规则运算上下文进行规则匹配运算的装置,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。
使用规则引擎必须预先准备规则运算上下文以及规则,前者为用于规则运算的原始数据,例如{A=0,B=6,C=10}这样的数据集合;后者则是由多个规则节点组成的逻辑运算表达式,形如(A=0&&B>5)||C!=10。由于规则是一串逻辑表达式,其在由规则引擎运算的时候会被解析为一颗二叉语法数,该语法树称为规则语法树。而规则语法树的左右节点就是规则节点。比如(A=0&&B>5)||C!=10的节点为左节点(A=0&&B>5);右节点C!=10。根据应用场景的不同,节点A=0&&B>5还可以继续分解为更多的节点。
根据规则使用规则引擎可以通过降低实现复杂业务逻辑的组件的复杂性,降低应用程序的维护和可扩展性成本。具体通过规则匹配来实现,规则匹配是规则和规则运算上下文进行运算的过程,规则运算的过程一般是按照二叉树遍历的方式进行运算。确定一条规则是否和上下文中的值预期相同,如果相同则认为规则匹配。比如对于规则(A=0&&B>5)||C!=10,规则上下文{A=0,B=6,C=10}:对于节点(A=0&&B>5)匹配为true,对于C!=10为false,true||false=true,说明此条规则是被匹配的。
发明人在实现本发明的过程中发现,现有的规则引擎对规则进行解析后所生成的规则语法树是静态的。而在多样化的输入参数下,语法树的匹配路径也呈现多样化,很难到达最优化的匹配路径。因此,如何对规则进行优化以及调整,从而提高设备在进行规则运算时的效率,成为本领域普通技术人员亟待解决的技术问题。
发明内容
本发明提供了一种规则处理方法,使规则引擎在运算处理后的规则更加地快速以及高效,该方法包括:
获取与待处理规则对应的规则语法树;
将规则运算上下文中的原始数据代入所述规则语法树中的各规则节点中,确定与各所述规则节点对应的匹配成功率;
将所述规则语法树中各逻辑运算关系的左右规则节点的匹配成功率进行对比;
根据所述逻辑运算关系的类型以及匹配成功率对比结果互相调整所述逻辑运算关系的左右规则节点的位置。
相应的,本发明还提出了一种规则处理设备,包括:
获取模块,用于获取与待处理规则对应的规则语法树;
确定模块,用于将规则运算上下文中的原始数据代入所述规则语法树中的各规则节点中,确定与各所述规则节点对应的匹配成功率;
对比模块,用于将所述规则语法树中各逻辑运算关系的左右规则节点的匹配成功率进行对比;
调整模块,用于根据所述逻辑运算关系的类型以及匹配成功率对比结果互相调整所述逻辑运算关系的左右规则节点的位置。
由此可见,通过应用本发明的技术方案,确定与待处理规则对应的规则语法树中各规则节点对应的匹配成功率后,将规则语法树中各逻辑运算关系的左右规则节点的匹配成功率进行对比,最终根据逻辑运算关系的类型以及匹配成功率对比结果互相调整逻辑运算关系的左右规则节点的位置,从而达到了最佳匹配路径,减少了后续过程中规则节点的匹配次数,使得规则引擎运算效果得到了优化。
附图说明
图1为本发明提出的一种规则处理方法的流程示意图;
图2为本发明具体实施例基于规则解析时对规则结构进行优化的示意图;
图3为本发明具体实施例中规则优化装置流程的实际应用示意图;
图4为本发明提出的一种规则处理设备的结构示意图。
具体实施方式
如背景技术所述,传统的规则引擎对规则解析生成规则语法树后,语法树是静态的。在多样化的输入参数下,语法树的匹配路径也呈现多样化,很难到达最优化的匹配路径。本发明使用规则节点匹配成功率,对规则的匹配情况进行量化,通过使用量化的方式对规则语法树进行调整,从而到达最优的匹配路径。
如图1所示,为本发明提出的一种规则处理方法的流程示意图,包括以下步骤:
S101,获取与待处理规则对应的规则语法树。
S102,将规则运算上下文中的原始数据代入所述规则语法树中的各规则节点中,确定与各所述规则节点对应的匹配成功率。
具体的,本步骤中首先将所述原始数据分别代入对应的规则节点中,随后确定所述规则节点在代入与其对应的原始数据后的匹配成功次数,以及所述规则节点所代入的原始数据的总数,最终将所述匹配成功次数与所述总数的比值作为与所述规则节点的匹配成功率。
S103,将所述规则语法树中各逻辑运算关系的左右规则节点的匹配成功率进行对比。
在具体的实施过程中,该步骤按照以下规则执行:
(1)若所述逻辑运算关系为与运算,且所述规则关系的左规则节点的匹配成功率大于右规则节点的匹配成功率,将所述左规则节点与所述右规则节点相对于所述规则关系互相交换位置;
(2)若所述逻辑运算关系为与运算,且所述规则关系的左规则节点的匹配成功率小于右规则节点的匹配成功率,保持当前所述左规则节点与所述右规则节点相对于所述规则关系的位置;
(3)若所述逻辑运算关系为或运算,且所述规则关系的左规则节点的匹配成功率大于右规则节点的匹配成功率,保持当前所述左规则节点与所述右规则节点相对于所述规则关系的位置;
(4)若所述逻辑运算关系为或运算,且所述规则关系的左规则节点的匹配成功率小于右规则节点的匹配成功率,将所述左规则节点与所述右规则节点相对于所述规则关系互相交换位置。
S104,根据所述逻辑运算关系的类型以及匹配成功率对比结果互相调整所述逻辑运算关系的左右规则节点的位置。
在对当前的逻辑运算关系调整完毕后,本发明还将判断所述规则语法树中各所述逻辑运算关系的左右规则节点是否都已对比或互相调整完毕;若是,输出所述规则语法树;若否,继续根据逻辑运算关系的类型以及匹配成功率对比结果互相调整所述逻辑运算关系的左右规则节点的位置。
为了进一步阐述本发明的技术思想,现结合如图2所示的具体应用实施例以及图3所示的具体应用场景,对本发明的技术方案进行说明:
S201,输入原始的规则表达式至规则解析装置;
S202,由规则解析装置输出解析后的语法树;
S203,向规则优化装置输入解析后的语法树;
S204,规则优化装置向规则节点成功率统计装置获取节点成功率,并以此对规则进行优化;
S205,输出优化后的语法树。
在以上具体实施例的过程中,定义符号MSR(A)表示节点A的匹配成功率(MatchSuccess Rate),相应的逻辑运算关系均分解为“与运算”以及“或运算”这两种关系,因为更复杂的关系也是这两种关系的组合。其中,“与预算”的格式为A&&B,“或运算”则为A||B。以下分别为对两种类型的逻辑运算关系采取本发明方案的结果分析:
(1)与运算逻辑运算关系
首先,设定规则A&&B的规则节点匹配运算次数为:1+MSR(A);而规则B&&A的规则节点匹配运算次数为:1+MSR(B);
基于以上设定可以得出(1+MSR(A))-(1+MSR(B))=MSR(A)-MSR(B),该公式在当MSR(A)>MSR(B)时可以得出(1+MSR(A))>(1+MSR(B)),即A&&B的规则节点匹配运算次数大于B&&A的规则节点匹配运算次数,所以规则B&&A是更优的规则,当规则配置为B&&A时可以是规则运算次数更少,性能更优。
(2)或运算逻辑运算关系
将规则A||B的规则节点匹配运算次数为:1+(1-MSR(A))*1,而将规则B||A的规则节点匹配运算次数为:1+(1-MSR(B))*1。此时根据以上设定可得出(1+(1-MSR(A))*1)-(1+(1-MSR(B))*1)=MSR(B)-MSR(A)。即当MSR(A)>MSR(B)的时候(1+(1-MSR(A))*1)<(1+(1-MSR(B))*1),A||B的规则节点匹配运算次数小于B||A的规则节点匹配运算次数,所以规则A||B是更优的规则,而当规则配置为A||B时可以是规则运算次数更少,性能更优。
结合以上分析,在图3所示的具体实施例流程图中,对于与运算节点,MSR(A)>MSR(B)时,B&&A的运算次数优于A&&B的运算次数,使用B&&A可以获得更优的运算性能。而对于或运算节点,MSR(A)>MSR(B)时,A||B的运算次数优于B||A的运算次数,使用A||B可以获得更优的运算性能。因此,该方案通过匹配成功率,调整规则语法树的方法,提升了规则引擎的运算性能。
为达到以上技术目的,本发明还提出了一种规则处理设备,如图4所示,包括:
获取模块410,用于获取与待处理规则对应的规则语法树;
确定模块420,用于将规则运算上下文中的原始数据代入所述规则语法树中的各规则节点中,确定与各所述规则节点对应的匹配成功率;
对比模块430,用于将所述规则语法树中各逻辑运算关系的左右规则节点的匹配成功率进行对比;
调整模块440,用于根据所述逻辑运算关系的类型以及匹配成功率对比结果互相调整所述逻辑运算关系的左右规则节点的位置。
在具体的应用场景中,所述确定模块,具体包括:
代入子模块,用于将所述原始数据分别代入对应的规则节点中;
确定子模块,用于确定所述规则节点在代入与其对应的原始数据后的匹配成功次数,以及所述规则节点所代入的原始数据的总数;
计算子模块,用于将所述匹配成功次数与所述总数的比值作为与所述规则节点的匹配成功率。
在具体的应用场景中,所述对比模块,具体用于:
若所述逻辑运算关系为与运算,且所述规则关系的左规则节点的匹配成功率大于右规则节点的匹配成功率,将所述左规则节点与所述右规则节点相对于所述规则关系互相交换位置;
若所述逻辑运算关系为与运算,且所述规则关系的左规则节点的匹配成功率小于右规则节点的匹配成功率,保持当前所述左规则节点与所述右规则节点相对于所述规则关系的位置;
若所述逻辑运算关系为或运算,且所述规则关系的左规则节点的匹配成功率大于右规则节点的匹配成功率,保持当前所述左规则节点与所述右规则节点相对于所述规则关系的位置;
若所述逻辑运算关系为或运算,且所述规则关系的左规则节点的匹配成功率小于右规则节点的匹配成功率,将所述左规则节点与所述右规则节点相对于所述规则关系互相交换位置。
在具体的应用场景中,还包括:
检测模块,用于判断所述规则语法树中各所述逻辑运算关系的左右规则节点是否都已对比或互相调整完毕;
若是,所述检测模块输出所述规则语法树;
若否,所述检测模块指示所述调整模块继续根据逻辑运算关系的类型以及匹配成功率对比结果互相调整所述逻辑运算关系的左右规则节点的位置。
通过应用本发明的技术方案,确定与待处理规则对应的规则语法树中各规则节点对应的匹配成功率后,将规则语法树中各逻辑运算关系的左右规则节点的匹配成功率进行对比,最终根据逻辑运算关系的类型以及匹配成功率对比结果互相调整逻辑运算关系的左右规则节点的位置,从而达到了最佳匹配路径,减少了后续过程中规则节点的匹配次数,使得规则引擎运算效果得到了优化。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施场景所述的方法。
本领域技术人员可以理解附图只是一个优选实施场景的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施场景中的装置中的模块可以按照实施场景描述进行分布于实施场景的装置中,也可以进行相应变化位于不同于本实施场景的一个或多个装置中。上述实施场景的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本发明序号仅仅为了描述,不代表实施场景的优劣。
以上公开的仅为本发明的几个具体实施场景,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。