一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种多规则匹配方法、装置及设备与流程

2022-02-19 06:00:27 来源:中国专利 TAG:


1.本发明涉及安全检测技术领域,特别涉及一种多规则匹配方法、装置及设备。


背景技术:

2.安全分析场景中,用户通过创建自定义逻辑表达式作为规则匹配条件,通过这些逻辑表达式作为匹配条件实现多规则的匹配。通常来说,系统的规则匹配能力与规则的数目有线性的关系。但针对真实的业务场景,有较多的规则存在较多相同的子表达式,将造成相同的子表达式重复匹配,导致运算性能下降。目前大量的规则匹配会存在性能瓶颈,最终导致实时告警产生的延迟。在实际分析场景中,有较多的规则存在较多相同的子表达式,将造成相同的子表达式重复匹配,这些无效的重复计算将导致运算性能下降。另外,由于部分表达式引擎不存在跳过当前节点的所有子节点的规则匹配并处理的特性,因此单个表达式计算时存在着部分无效计算的性能浪费,降低了规则检测的能力。


技术实现要素:

3.有鉴于此,本发明的目的在于提供一种多规则匹配方法、装置、设备及介质,能够提供多规则匹配的效率。其具体方案如下:
4.第一方面,本技术公开了一种多规则匹配方法,包括:
5.利用antlr解析器,根据and逻辑操作符对多个逻辑表达式进行规则解析,以拆分得到多个子表达式;
6.根据每个所述子表达式的频次,从所有所述子表达式中筛选出公共子表达式作为父节点;
7.以所述父节点为基础,根据所述逻辑表达式以及其余所述子表达式对应的运算量和频次,依次筛选出目标子表达式作为子节点构建规则树以得到一个或多个规则树;
8.获取待检测数据,利用所述规则树从父节点开始按照顺序对所述待检测数据进行规则匹配,若匹配失败则跳过当前节点的所有子节点的规则匹配并输出匹配结果。
9.可选的,所述利用antlr解析器,根据and逻辑操作符对多个逻辑表达式进行规则解析,以拆分得到多个子表达式,包括:
10.根据所述逻辑表达式的语法和词法生成antlr语法文件,利用antlr解析器将所述antlr语法文件转换为antlr语法树;
11.利用所述antlr解析器,根据and逻辑操作符对所述antlr语法树进行拆分,以拆分得到所述逻辑表达式的多个子表达式。
12.可选的,所述以所述父节点为基础,根据所述逻辑表达式以及其余所述子表达式对应的运算量和频次,依次筛选出目标子表达式作为子节点构建规则树以得到一个或多个规则树之后,还包括:
13.基于所述逻辑表达式,生成每个所述逻辑表达式对应的子表达式列表与规则名称的键值对;
14.利用所述键值对遍历所述规则树,并在所述键值对匹配成功的目标节点处添加对应的规则名称。
15.可选的,所述以所述父节点为基础,根据所述逻辑表达式以及其余所述子表达式对应的运算量和频次,依次筛选出目标子表达式作为子节点构建规则树以得到一个或多个规则树之后,还包括:
16.遍历所述规则树的所有节点,若检测到当前节点只有一个子节点,且所述当前节点不存在对应的规则名称,则将所述子节点与所述当前节点合并,并将所述子节点对应的规则名称赋给所述当前节点。
17.可选的,所述利用所述规则树从父节点开始按照顺序对所述待检测数据进行规则匹配,若匹配失败则跳过当前节点的所有子节点的规则匹配并输出匹配结果,包括:
18.利用所述规则树从父节点开始按照节点排序顺序对所述待检测数据进行规则匹配;
19.若当前节点对应的子表达式与所述待检测数据不匹配,则跳过所述当前节点的所有子节点的规则匹配,跳过当前节点的所有子节点的规则匹配并输出匹配结果;
20.若所述当前节点对应的子表达式与所述待检测数据匹配,则获取所述当前节点的节点信息,并根据所述节点信息判断所述当前节点是否存在子节点,以及判断所述当前节点是否存在对应的规则名称;
21.若所述当前节点存在子节点,则利用所述子节点执行对所述待检测数据的规则匹配操作;
22.若所述当前节点存在对应的规则名称,则输出所述当前节点对应的规则名称。
23.可选的,所述利用所述规则树从父节点开始按照顺序对所述待检测数据进行规则匹配,包括:
24.根据预先配置的运算操作符的优先级定义规则和运算量计算公式,计算每个所述规则树对应的运算量;所述运算操作符的优先级定义规则包括运算量小的运算操作符的优先级高于运算量大的运算操作符,所述运算量计算公式为对通过所述and逻辑操作符连接的表达式内的运算操作符对应的运算量进行相加的计算公式;
25.根据每个所述规则树对应的运算量,按照运算量由小到大的顺序对所有所述规则树进行排序,生成规则树列表;
26.按照所述规则树列表对所述待检测数据进行规则匹配。
27.可选的,所述根据每个所述子表达式的频次,从所有所述子表达式中筛选出公共子表达式作为父节点;以所述父节点为基础,根据所述逻辑表达式以及其余所述子表达式对应的运算量和频次,依次筛选出目标子表达式作为子节点构建规则树以得到一个或多个规则树,包括:
28.统计每个所述子表达式的频次,并根据所述频次从所有所述子表达式中提取出公共子表达式;
29.从所有所述子表达式中筛选出只出现一次的子表达式生成父节点列表;
30.根据所述运算操作符的优先级定义规则和所述子表达式包含的运算操作符确定出所述子表达式对应的运算量,然后根据所述子表达式对应的频次和运算量确定出每个所述子表达式的运算量优先级参数;所述运算量优先级参数为所述频次与所述运算量的比
值;
31.分别以所述父节点列表内的每个子表达式和所述公共子表达式为父节点,并根据除所述父节点外的其余子表达式的运算量优先级依次筛选出目标子表达式作为每个阶层的子节点构建规则树,以得到一颗或多颗规则树。
32.可选的,所述以所述父节点为基础,根据所述逻辑表达式以及其余所述子表达式对应的运算量和频次,依次筛选出目标子表达式作为子节点构建规则树以得到一个或多个规则树之后,还包括:
33.遍历所述规则树的所有节点,若遍历到的当前节点的子表达式内含有or逻辑操作符,则根据所述or逻辑操作符对所述当前节点的子表达式进行拆分得到多个新的子表达式,并基于所述新的子表达式生成新的子节点;
34.确定出所述新的子表达式对应的运算量优先级参数,并根据所述新的子表达式对应的运算量优先级参数对所述新的子节点进行排序,然后基于所述新的子节点按照排序确定出的顺序替换掉所述当前节点。
35.第二方面,本技术公开了一种多规则匹配装置,包括:
36.解析拆分模块,用于利用antlr解析器,根据and逻辑操作符对多个逻辑表达式进行规则解析,以拆分得到多个子表达式;
37.公共子表达式筛选模块,用于根据每个所述子表达式的频次,从所有所述子表达式中筛选出公共子表达式作为父节点;
38.规则树构建模块,用于以所述父节点为基础,根据所述逻辑表达式以及其余所述子表达式对应的运算量和频次,依次筛选出目标子表达式作为子节点构建规则树以得到一个或多个规则树;
39.规则匹配模块,用于获取待检测数据,利用所述规则树从父节点开始按照顺序对所述待检测数据进行规则匹配,若匹配失败则跳过当前节点的所有子节点的规则匹配并输出匹配结果。
40.第三方面,本技术公开了一种电子设备,包括:
41.存储器,用于保存计算机程序;
42.处理器,用于执行所述计算机程序,以实现前述的多规则匹配方法。
43.第四方面,本技术公开了一种计算机可读存储介质,用于存储计算机程序;其中计算机程序被处理器执行时实现前述的多规则匹配方法。
44.本技术中,利用antlr解析器,根据and逻辑操作符对多个逻辑表达式进行规则解析,以拆分得到多个子表达式;根据每个所述子表达式的频次,从所有所述子表达式中筛选出公共子表达式作为父节点;以所述父节点为基础,根据所述逻辑表达式以及其余所述子表达式对应的运算量和频次,依次筛选出目标子表达式作为子节点构建规则树以得到一个或多个规则树;获取待检测数据,利用所述规则树从父节点开始按照顺序对所述待检测数据进行规则匹配,若匹配失败则跳过当前节点的所有子节点的规则匹配并输出匹配结果。可见,通过antlr的语法解析,将多条逻辑表达式根据and逻辑符拆分形成子表达式,然后依照频次提取公共子表达式构建多个树状结构,并根据子表达式对应的运算量和频次对规则树的子节点进行排序,最后,利用构建得到规则树完成对待检测数据的规则匹配,由此,利用antlr解析器拆分逻辑表达式后提取出公共子表达式作为规则树的父节点,可以避免规
则匹配过程中同一个规则的多次匹配,提高规则匹配的效率,并且,规则树的子节点是根据对应的子表达式的频次和运算量进行排序的,由此利用规则树进行规则匹配时可以优先匹配运算量优先级较高的规则,从而降低规则匹配的运算量。另外,在规则匹配中若匹配失败则直接跳过当前节点的所有子节点的规则匹配并输出匹配结果,即跳过当前节点的所有子节点的匹配,进一步提升了多规则匹配的效率。
附图说明
45.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
46.图1为本技术提供的一种多规则匹配方法流程图;
47.图2为本技术提供的一种具体的多规则匹配方法流程图;
48.图3为本技术提供的一种具体的多规则匹配方法流程图;
49.图4为本技术提供的一种多规则匹配装置结构示意图;
50.图5为本技术提供的一种电子设备结构图。
具体实施方式
51.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
52.现有技术中,通过创建自定义逻辑表达式作为规则匹配条件,通过这些逻辑表达式作为匹配条件实现多规则的匹配,较多的规则存在较多相同的子表达式,将造成相同的子表达式重复匹配,导致运算性能下降。为克服上述技术问题,本技术提出一种多规则匹配方法,能够提高多规则匹配的效率。
53.本技术实施例公开了一种多规则匹配方法,参见图1所示,该方法可以包括以下步骤:
54.步骤s11:利用antlr解析器,根据and逻辑操作符对多个逻辑表达式进行规则解析,以拆分得到多个子表达式。
55.首先对逻辑表达式进行解析,根据逻辑表达式内的and逻辑操作符,将由and逻辑操作符连接的左右两侧的表达式拆分成独立的表达式以得到多个子表达式,如逻辑表达式aandb拆分得到子表达式a和子表达式b。具体可以利用antlr等解析工具,从而为之后的语法转换、树状展示提供解析基础。其中,antlr(another tool for language recognition)是一个强大的解析器的生成器,被广泛用来构建语言,工具和框架,他可以用来读取、处理、执行或翻译结构化文本或二进制文件,通过antlr工具可以将用户自定义语法生成一个可以构建和遍历解析树的解析器,然后基于antlr解析器,通过访问者模式可以方便的进行语法校验,语义分析,语法转换等。
56.本实施例中,所述利用antlr解析器,根据and逻辑操作符对多个逻辑表达式进行
规则解析,以拆分得到多个子表达式,可以包括:根据所述逻辑表达式的语法和词法生成antlr语法文件,利用antlr解析器将所述antlr语法文件转换为antlr语法树;利用所述antlr解析器,根据and逻辑操作符对所述antlr语法树进行拆分,以拆分得到所述逻辑表达式的多个子表达式。可以理解的是,首先根据逻辑表达式语法和词法生成antlr语法文件,然后利用antlr解析器,通过访问者模式对逻辑表达式规则进行基于and逻辑操作符的拆分以形成子表达式。上述antlr的语法文件(.g4文件)包括该逻辑表达式的语法格式及词法格式。具体的,根据语法文件通过antlr工具对每一条逻辑表达式规则解析生成对应的antlr语法树,通过antlr工具编译得到antlr运行接口,将输入文本转换为已定义好的语法文件对应的语法分析树,最终通过antlr工具对每一条逻辑表达式规则解析生成对应的antlr语法树。然后通过antlr访问者模式对antlr语法树进行转换,根据and逻辑符对antlr语法树进行拆分。即访问and操作符接口时,如果已存在的子表达式列表中不包括and操作符左侧或右侧子表达式,将and操作符左侧子表达式或右侧子表达式作为独立的子表达式加入到子表达式列表中,最终针对每一条逻辑表达式规则根据and逻辑符进行拆分得到多个子表达式。例如aand(borc)可以拆分为2个子表达式,分别为子表达式a和子表达式borc。
57.步骤s12:根据每个所述子表达式的频次,从所有所述子表达式中筛选出公共子表达式作为父节点。
58.本实施例中,通过统计每个子表达式的频次,即每个子表达式在所有子表达式中出现的次数,筛选出公共子表达式作为后续构建规则树的子节点。例如,逻辑表达式规则1:aandb,逻辑表达式规则2:aandc,那么逻辑表达式规则1与2共同含有子表达式a,则提取子表达式a作为公共子表达式。即子表达式a为父节点,并含有两个子节点分别为b、c。对于多条规则逻辑表达式最终可以形成多颗含有公共表达式的规则树。
59.步骤s13:以所述父节点为基础,根据所述逻辑表达式以及其余所述子表达式对应的运算量和频次,依次筛选出目标子表达式作为子节点构建规则树以得到一个或多个规则树。
60.本实施例中,筛选出父节点后以父节点为基础,根据逻辑表达式的不同子表达式之间的逻辑关系构建规则树,构建过程中具体根据除父节点外的其余子表达式对应的运算量和频次,依次筛选出目标子表达式作为子节点构建规则树以得到一个或多个规则树,即规则树的子节点是根据对应的子表达式的频次和运算量进行排序的,由此利用规则树进行规则匹配时可以优先匹配运算量优先级较高的规则,从而降低规则匹配的运算量。运算量具体可以根据预先设定的运算操作符的优先级,计算每个子表达式对应的运算量。可以理解的是,针对不同运算操作符代表的运算量不同,设定相对应的运算量大小,如“等于”操作符的运算量<“字符串包含”操作符的运算量<“正则运算”操作符的运算量,那么设定运算操作符的优先级大小为“等于”>“字符串包含”>“正则运算”,则根据预先设定的运算操作符的优先级,以及当前子表达式内含有的所有运算符,可以计算出子表达式对应的运算量。也就是说,本实施例中,通过对antlr解析后的语法树进行逻辑操作符的判断与提取,得到公共子表达式。基于这些公共子表达式对多个逻辑表达式进行拆分重组,并按照运算量优先级进行排序重组形成树状结构表达,以便最后根据排序后的树状结构按照树结构顺序完成对数据的多规则匹配,从而降低规则匹配的运算量。
61.本实施例中,所述根据每个所述子表达式的频次,从所有所述子表达式中筛选出
公共子表达式作为父节点;以所述父节点为基础,根据所述逻辑表达式以及其余所述子表达式对应的运算量和频次,依次筛选出目标子表达式作为子节点构建规则树以得到一个或多个规则树,可以包括:统计每个所述子表达式的频次,并根据所述频次从所有所述子表达式中提取出公共子表达式;从所有所述子表达式中筛选出只出现一次的子表达式生成父节点列表;根据所述运算操作符的优先。定义规则和所述子表达式包含的运算操作符确定出所述子表达式对应的运算量,然后根据所述子表达式对应的频次和运算量确定出每个所述子表达式的运算量优先级参数;所述运算量优先级参数为所述频次与所述运算量的比值;分别以所述父节点列表内的每个子表达式和所述公共子表达式为父节点,并根据除所述父节点外的其余子表达式的运算量优先级依次筛选出目标子表达式作为每个阶层的子节点构建规则树,以得到一颗或多颗规则树。
62.可以理解的是,例如图2所示,除了选择公共子表达式作为父节点外,同时筛选出只出现一次的单独节点,即从多条逻辑表达式规则对应的子表达式集合中提取只出现1次的子表达式,形成单独的父节点列表,若所有子表达式集合中没有只出现1次的子表达式,则父节点列表中添加根据运算量优先级参数选择优先级最高的子表达式。然后对所有逻辑表达式对应的子表达式集合中剔除父节点列表,得到剩余的子表达式集合。然后,通过遍历所有父节点,针对每一个父节点,根据子表达式对应的频次和运算量确定出每个子表达式的运算量优先级参数,再根据除父节点外的其余子表达式的运算量优先级依次筛选出目标子表达式作为每个阶层的子节点构建规则树,即提取运算量优先级较高的子表达式作为上一次确定出的节点的子节点,以此类推构建规则树,直至所有子表达式均作为节点构建在规则树中,最终得到合并为树状结构的多颗规则树。即规则树的子节点是根据对应的子表达式的运算量优先级进行排序的,利用规则树进行规则匹配时可以优先匹配运算量优先级高的规则,避免先匹配频次低且运算量大的子表达式,以降低规则匹配的运算量,避免浪费计算资源。
63.本实施例中,所述以所述父节点为基础,根据所述逻辑表达式以及其余所述子表达式对应的运算量和频次,依次筛选出目标子表达式作为子节点构建规则树以得到一个或多个规则树之后,还可以包括:基于所述逻辑表达式,生成每个所述逻辑表达式对应的子表达式列表与规则名称的键值对;利用所述键值对遍历所述规则树,并在所述键值对匹配成功的目标节点处添加对应的规则名称。即通过对拆分后的子表达式按照字符顺序排序,形成排序后的子表达式列表与规则名称的键值对,每个逻辑表达式对应的一个规则名称以及一个或多个子表达式。然后对所有规则树进行遍历,从父节点到子节点的顺序依次加入到子表达式列表,并按照字符顺序进行排序。根据排序后的子表达式列表与键值对进行匹配,若成功匹配则对树节点标记规则名称的信息,直到规则树所有节点都遍历完毕为止。例如,定义aandb为逻辑表达式1,构建得到的规则树父节点为a,父节点a下含有子节点b,则通过上述步骤对规则树进行规则名称赋值后,子节点b对应的规则名称为逻辑表达式1,节点a若不是一个完成的逻辑表达式,则节点a没有对应的规则名称。
64.本实施例中,所述以所述父节点为基础,根据所述逻辑表达式以及其余所述子表达式对应的运算量和频次,依次筛选出目标子表达式作为子节点构建规则树以得到一个或多个规则树之后,还可以包括:遍历所述规则树的所有节点,若检测到当前节点只有一个子节点,且所述当前节点不存在对应的规则名称,则将所述子节点与所述当前节点合并,并将
所述子节点对应的规则名称赋给所述当前节点。即通过遍历所有规则树节点,若当前节点有且仅有一个子节点,并且当前节点不存在规则名称,则提取子节点的表达式通过and与该当前节点的表达式进行连接,同时将子节点下的规则树合并到该当前节点下,并且将子节点对应的规则名称赋值到当前节点,所有规则树节点遍历完成。通过单一规则的合并,可以减少规则匹配是对表达式的匹配次数,节约规则匹配的运算量。然后再遍历合并单一规则后的规则树节点,每个节点对应的子表达式进行提前编译,便于数据多次匹配。
65.本实施例中,所述以所述父节点为基础,根据所述逻辑表达式以及其余所述子表达式对应的运算量和频次,依次筛选出目标子表达式作为子节点构建规则树以得到一个或多个规则树之后,还可以包括:遍历所述规则树的所有节点,若遍历到的当前节点的子表达式内含有or逻辑操作符,则根据所述or逻辑操作符对所述当前节点的子表达式进行拆分得到多个新的子表达式,并基于所述新的子表达式生成新的子节点;确定出所述新的子表达式对应的运算量优先级参数,并根据所述新的子表达式对应的运算量优先级参数对所述新的子节点进行排序,然后基于所述新的子节点按照排序确定出的顺序替换掉所述当前节点。
66.即对规则树节点含有or逻辑操作符的子表达式进行拆分并排序,具体的,通过遍历所有规则树节点对含有or逻辑符的子表达式进行拆分,具体可以基于逻辑规则表达式的语法文件通过antlr工具对规则树节点子表达式生成对应的antlr语法树,再通过antlr访问者模式对antlr语法树进行转换,然后根据or逻辑操作符对antlr语法树进行拆分。即将or逻辑操作符左侧子表达式或右侧子表达式作为单独的新的子节点。并且根据新的子节点对应的运算量优先级参数按照由低到高顺序对新的子表达式排序,因此可以优先判断运算量较低的表达式,节约规则匹配的运算量。
67.步骤s14:获取待检测数据,利用所述规则树从父节点开始按照顺序对所述待检测数据进行规则匹配,若匹配失败则跳过当前节点的所有子节点的规则匹配并输出匹配结果。
68.本实施例中,构建得到规则树后,获取待检测数据,然后利用上述规则树从父节点开始按照顺序对所述待检测数据进行规则匹配,若匹配失败则短路输出匹配结果,即若当前节点匹配失败,则跳过当前节点的所有子节点的规则匹配,也就是当运算量低的表达式优先满足判断条件时,则可忽略排在之后的运算量较高的表达式,节约规则匹配的运算量。由此通过在规则匹配中若匹配失败则直接短路输出匹配结果,跳过当前节点的所有子节点的匹配,进一步提升了多规则匹配的效率。
69.本实施例中,所述利用所述规则树从父节点开始按照顺序对所述待检测数据进行规则匹配,若匹配失败则跳过当前节点的所有子节点的规则匹配并输出匹配结果,可以包括:利用所述规则树从父节点开始按照节点排序顺序对所述待检测数据进行规则匹配;若当前节点对应的子表达式与所述待检测数据不匹配,则跳过所述当前节点的所有子节点的规则匹配,跳过当前节点的所有子节点的规则匹配并输出匹配结果;若所述当前节点对应的子表达式与所述待检测数据匹配,则获取所述当前节点的节点信息,并根据所述节点信息判断所述当前节点是否存在子节点,以及判断所述当前节点是否存在对应的规则名称;若所述当前节点存在子节点,则利用所述子节点执行对所述待检测数据的规则匹配操作;若所述当前节点存在对应的规则名称,则输出所述当前节点对应的规则名称。
70.例如图3所示,输入待检测数据,按照规则树的结构进行匹配。首先判断树父节点的逻辑表达式,若不满足该父节点的逻辑表达式,那么可以跳过该父节点下的所有子节点匹配逻辑,节约规则匹配的运算量。若满足该节点的逻辑表达式并且该节点存在规则名称,那么可以直接输出该节点所对应的规则名称,若满足该节点的逻辑表达式,而若该节点不存在规则名称并且该节点存在子节点,那么再匹配子节点的逻辑表达式,直到输出规则名称或者所有节点遍历完毕。如果多条逻辑表达式规则是互斥的,即只需匹配到单一规则即可输出。
71.本实施例中,所述利用所述规则树从父节点开始按照顺序对所述待检测数据进行规则匹配,可以包括:根据预先配置的运算操作符的优先级定义规则和运算量计算公式,计算每个所述规则树对应的运算量;所述运算操作符的优先级定义规则包括运算量小的运算操作符的优先级高于运算量大的运算操作符,所述运算量计算公式为对通过所述and逻辑操作符连接的表达式内的运算操作符对应的运算量进行相加的计算公式;根据每个所述规则树对应的运算量,按照运算量由小到大的顺序对所有所述规则树进行排序,生成规则树列表;按照所述规则树列表对所述待检测数据进行规则匹配。
72.即根据预先配置的运算操作符的优先级定义规则,计算每个子表达式的运算量;根据每个子表达式的运算量和运算量计算公式,计算每个规则树对应的运算量,然后按照运算量由小到大的顺序对规则树进行排序,并生成规则树列表,以便按照规则树列表对待检测数据进行规则匹配,节约规则匹配的总运算量。并可以实时统计每棵树所有节点满足逻辑表达式的频次之和,按照出现总频次及总运算量进行实时排序,减少平均匹配次数。可以理解的是,针对不同运算操作符代表的运算量不同,设定相对应的运算量大小;如“等于”操作符的运算量<“字符串包含”操作符的运算量<“正则运算”操作符的运算量,那么设定运算操作符的优先级大小为“等于”>“字符串包含”>“正则运算”,其代表的运算量大小为“正则运算”>“字符串包含”>“等于”。规则树的运算量计算公式为若两个表达式以and或or逻辑符连接,则总计算量为两个表达式内所有运算操作符所对应的运算量之和。
73.由上可见,本实施例中通过利用antlr解析器,根据and逻辑操作符对多个逻辑表达式进行规则解析,以拆分得到多个子表达式;根据每个所述子表达式的频次,从所有所述子表达式中筛选出公共子表达式作为父节点;以所述父节点为基础,根据所述逻辑表达式以及其余所述子表达式对应的运算量和频次,依次筛选出目标子表达式作为子节点构建规则树以得到一个或多个规则树;获取待检测数据,利用所述规则树从父节点开始按照顺序对所述待检测数据进行规则匹配,若匹配失败则跳过当前节点的所有子节点的规则匹配并输出匹配结果。可见,通过antlr的语法解析,将多条逻辑表达式根据and逻辑符拆分形成子表达式,然后依照频次提取公共子表达式构建多个树状结构,并根据子表达式对应的运算量和频次对规则树的子节点进行排序,最后,利用构建得到规则树完成对待检测数据的规则匹配,由此,利用antlr解析器拆分逻辑表达式后提取出公共子表达式作为规则树的父节点,可以避免规则匹配过程中同一个规则的多次匹配,提高规则匹配的效率,并且,规则树的子节点是根据对应的子表达式的频次和运算量进行排序的,由此利用规则树进行规则匹配时可以优先匹配运算量优先级较高的规则,从而降低规则匹配的运算量。另外,在规则匹配中若匹配失败则直接跳过当前节点的所有子节点的规则匹配并输出匹配结果,即跳过当前节点的所有子节点的匹配,进一步提升了多规则匹配的效率。
74.相应的,本技术实施例还公开了一种多规则匹配装置,参见图4所示,该装置包括:
75.解析拆分模块11,用于利用antlr解析器,根据and逻辑操作符对多个逻辑表达式进行规则解析,以拆分得到多个子表达式;
76.公共子表达式筛选模块12,用于根据每个所述子表达式的频次,从所有所述子表达式中筛选出公共子表达式作为父节点;
77.规则树构建模块13,用于以所述父节点为基础,根据所述逻辑表达式以及其余所述子表达式对应的运算量和频次,依次筛选出目标子表达式作为子节点构建规则树以得到一个或多个规则树;
78.规则匹配模块14,用于获取待检测数据,利用所述规则树从父节点开始按照顺序对所述待检测数据进行规则匹配,若匹配失败则跳过当前节点的所有子节点的规则匹配并输出匹配结果。
79.由上可见,本实施例中通过利用antlr解析器,根据and逻辑操作符对多个逻辑表达式进行规则解析,以拆分得到多个子表达式;根据每个所述子表达式的频次,从所有所述子表达式中筛选出公共子表达式作为父节点;以所述父节点为基础,根据所述逻辑表达式以及其余所述子表达式对应的运算量和频次,依次筛选出目标子表达式作为子节点构建规则树以得到一个或多个规则树;获取待检测数据,利用所述规则树从父节点开始按照顺序对所述待检测数据进行规则匹配,若匹配失败则跳过当前节点的所有子节点的规则匹配并输出匹配结果。可见,通过antlr的语法解析,将多条逻辑表达式根据and逻辑符拆分形成子表达式,然后依照频次提取公共子表达式构建多个树状结构,并根据子表达式对应的运算量和频次对规则树的子节点进行排序,最后,利用构建得到规则树完成对待检测数据的规则匹配,由此,利用antlr解析器拆分逻辑表达式后提取出公共子表达式作为规则树的父节点,可以避免规则匹配过程中同一个规则的多次匹配,提高规则匹配的效率,并且,规则树的子节点是根据对应的子表达式的频次和运算量进行排序的,由此利用规则树进行规则匹配时可以优先匹配运算量优先级较高的规则,从而降低规则匹配的运算量。另外,在规则匹配中若匹配失败则直接跳过当前节点的所有子节点的规则匹配并输出匹配结果,即跳过当前节点的所有子节点的匹配,进一步提升了多规则匹配的效率。
80.在一些具体实施例中,所述解析拆分模块11具体可以包括:
81.语法树生成单元,用于根据所述逻辑表达式的语法和词法生成antlr语法文件,利用antlr解析器将所述antlr语法文件转换为antlr语法树;
82.拆分单元,用于利用所述antlr解析器,根据and逻辑操作符对所述antlr语法树进行拆分,以拆分得到所述逻辑表达式的多个子表达式。
83.在一些具体实施例中,所述多规则匹配装置具体可以包括:
84.键值对生成单元,用于基于所述逻辑表达式,生成每个所述逻辑表达式对应的子表达式列表与规则名称的键值对;
85.规则名称添加单元,用于利用所述键值对遍历所述规则树,并在所述键值对匹配成功的目标节点处添加对应的规则名称。
86.在一些具体实施例中,所述多规则匹配装置具体可以包括:
87.合并单元,用于遍历所述规则树的所有节点,若检测到当前节点只有一个子节点,且所述当前节点不存在对应的规则名称,则将所述子节点与所述当前节点合并,并将所述
子节点对应的规则名称赋给所述当前节点。
88.在一些具体实施例中,所述规则匹配模块14具体可以包括:
89.规则匹配单元,用于利用所述规则树从父节点开始按照节点排序顺序对所述待检测数据进行规则匹配;
90.跳过当前节点的所有子节点的规则匹配并输出单元,用于若当前节点对应的子表达式与所述待检测数据不匹配,则跳过所述当前节点的所有子节点的规则匹配,跳过当前节点的所有子节点的规则匹配并输出匹配结果;
91.节点信息获取单元,用于若所述当前节点对应的子表达式与所述待检测数据匹配,则获取所述当前节点的节点信息,并根据所述节点信息判断所述当前节点是否存在子节点,以及判断所述当前节点是否存在对应的规则名称;
92.规则匹配执行单元,用于若所述当前节点存在子节点,则利用所述子节点执行对所述待检测数据的规则匹配操作;
93.规则名称输出单元,用于若所述当前节点存在对应的规则名称,则输出所述当前节点对应的规则名称。
94.在一些具体实施例中,所述规则匹配模块14具体可以包括:
95.规则树运算量计算单元,用于根据预先配置的运算操作符的优先级定义规则和运算量计算公式,计算每个所述规则树对应的运算量;所述运算操作符的优先级定义规则包括运算量小的运算操作符的优先级高于运算量大的运算操作符,所述运算量计算公式为对通过所述and逻辑操作符连接的表达式内的运算操作符对应的运算量进行相加的计算公式;
96.规则树列表生成单元,用于根据每个所述规则树对应的运算量,按照运算量由小到大的顺序对所有所述规则树进行排序,生成规则树列表;
97.规则检测单元,用于按照所述规则树列表对所述待检测数据进行规则匹配。
98.在一些具体实施例中,所述多规则匹配装置具体可以包括:
99.公共子表达式提取单元,用于统计每个所述子表达式的频次,并根据所述频次从所有所述子表达式中提取出公共子表达式;
100.父节点列表生成单元,用于从所有所述子表达式中筛选出只出现一次的子表达式生成父节点列表;
101.运算量优先级参数确定单元,用于根据所述运算操作符的优先级定义规则和所述子表达式包含的运算操作符确定出所述子表达式对应的运算量,然后根据所述子表达式对应的频次和运算量确定出每个所述子表达式的运算量优先级参数;所述运算量优先级参数为所述频次与所述运算量的比值;
102.规则树构建单元,用于分别以所述父节点列表内的每个子表达式和所述公共子表达式为父节点,并根据除所述父节点外的其余子表达式的运算量优先级依次筛选出目标子表达式作为每个阶层的子节点构建规则树,以得到一颗或多颗规则树。
103.在一些具体实施例中,所述多规则匹配装置具体可以包括:
104.拆分单元,用于遍历所述规则树的所有节点,若遍历到的当前节点的子表达式内含有or逻辑操作符,则根据所述or逻辑操作符对所述当前节点的子表达式进行拆分得到多个新的子表达式,并基于所述新的子表达式生成新的子节点;
105.替换单元,用于确定出所述新的子表达式对应的运算量优先级参数,并根据所述新的子表达式对应的运算量优先级参数对所述新的子节点进行排序,然后基于所述新的子节点按照排序确定出的顺序替换掉所述当前节点。
106.进一步的,本技术实施例还公开了一种电子设备,参见图5所示,图中的内容不能被认为是对本技术的使用范围的任何限制。
107.图5为本技术实施例提供的一种电子设备20的结构示意图。该电子设备20,具体可以包括:至少一个处理器21、至少一个存储器22、电源23、通信接口24、输入输出接口25和通信总线26。其中,所述存储器22用于存储计算机程序,所述计算机程序由所述处理器21加载并执行,以实现前述任一实施例公开的多规则匹配方法中的相关步骤。
108.本实施例中,电源23用于为电子设备20上的各硬件设备提供工作电压;通信接口24能够为电子设备20创建与外界设备之间的数据传输通道,其所遵循的通信协议是能够适用于本技术技术方案的任意通信协议,在此不对其进行具体限定;输入输出接口25,用于获取外界输入数据或向外界输出数据,其具体的接口类型可以根据具体应用需要进行选取,在此不进行具体限定。
109.另外,存储器22作为资源存储的载体,可以是只读存储器、随机存储器、磁盘或者光盘等,其上所存储的资源包括操作系统221、计算机程序222及包括规则树在内的数据223等,存储方式可以是短暂存储或者永久存储。
110.其中,操作系统221用于管理与控制电子设备20上的各硬件设备以及计算机程序222,以实现处理器21对存储器22中海量数据223的运算与处理,其可以是windows server、netware、unix、linux等。计算机程序222除了包括能够用于完成前述任一实施例公开的由电子设备20执行的多规则匹配方法的计算机程序之外,还可以进一步包括能够用于完成其他特定工作的计算机程序。
111.进一步的,本技术实施例还公开了一种计算机存储介质,所述计算机存储介质中存储有计算机可执行指令,所述计算机可执行指令被处理器加载并执行时,实现前述任一实施例公开的多规则匹配方法步骤。
112.本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
113.结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd

rom、或技术领域内所公知的任意其它形式的存储介质中。
114.最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排
除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
115.以上对本发明所提供的一种多规则匹配方法、装置、设备及介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献