一种基于有向无环图的依赖消除方法、装置及存储介质与流程

文档序号:32158670发布日期:2022-11-12 01:23阅读:74来源:国知局
一种基于有向无环图的依赖消除方法、装置及存储介质与流程

1.本技术涉及人工智能技术领域,尤其涉及一种基于有向无环图的依赖消除方法、装置及存储介质。


背景技术:

2.随着人工智能的发展,基于推理规则的推理引擎广泛地应用于预测、识别、分析等领域,尤其是在垃圾邮件分析、社工邮件处理、专家系统的构建等领域。在推理引擎当中,最核心的部分就是推理规则集。推理规则集代表了推理引擎中的专家知识,决定了推理引擎推理的速度、性能以及智能水平。
3.但是,在日常编写推理规则的过程中,存在推理规则的编写不规范、多个推理规则相互之间依赖,形成不可解析的有向环,进而导致推理引擎无法进行解析和加载推理规则,甚至造成推理引擎陷入死循环而不能正常的工作的问题。


技术实现要素:

4.本技术实施例通过提供一种基于有向无环图的依赖消除方法、装置及存储介质,解决了现有技术中多个推理规则之间形成有向环,导致推理引擎无法进行解析和加载推理规则,甚至造成推理引擎陷入死循环的问题,实现了将多个推理规则处理为有向且无环的集合,使推理引擎能够高速且准确的进行推理规则的加载,并得到推理结果,提高推理引擎的工作效率。
5.第一方面,本发明实施例提供了一种基于有向无环图的依赖消除方法,该方法包括:
6.对多个推理规则进行结构化处理,并将所述推理规则存储在哈希规则表中;
7.将所述推理规则中的触发条件进行分割,获得分割数组;
8.对所述哈希规则表进行解析,构建规则节点结构体,并根据所述分割数组将所述规则节点结构体存储在哈希节点表;
9.将所述哈希节点表存入列表中。
10.结合第一方面,在一种可能的实现方式中,所述对多个推理规则进行结构化处理,并将所述推理规则存储在哈希规则表中,包括:
11.将所述推理规则形式化为规则名称、规则描述、规则输入变量以及触发条件;
12.将所述哈希规则表中的键设置为所述规则名称,将所述哈希规则表中的值设置为结构化处理后的所述推理规则。
13.结合第一方面,在一种可能的实现方式中,所述对所述哈希规则表进行解析,构建规则节点结构体,并根据所述分割数组将所述规则节点结构体存储在哈希节点表,包括:
14.根据所述分割数组在所述哈希规则表中进行查找,若所述分割数组的每一项返回值都不为空,则按照将所述推理规则保存至所述哈希节点表中,所述哈希节点表中的键为所述规则名称,值为结构化处理后的所述推理规则。
15.结合第一方面,在一种可能的实现方式中,还包括哈希节点临时表,根据所述分割数组在所述哈希规则表中进行查找,若有一项返回值为空,则将所述推理规则保存至所述哈希节点临时表中,所述哈希节点临时表中的键为所述规则名称,值为结构化处理后的所述推理规则。
16.结合第一方面,在一种可能的实现方式中,所述根据所述分割数组将所述规则节点结构体存储在哈希节点表,包括:
17.遍历所述哈希节点临时表,依次在所述哈希节点表进行查找,若每一项的返回值不为空则新建一个规则节点,并将新建的规则节点存储至所述哈希节点表中,且从所述哈希临时结构表中删除此条数据;
18.若有一项返回值为空,则依次在所述哈希节点临时表中查找;若每一项的返回值均不为空,则新建一个规则节点,并将新建的规则节点存储至所述哈希节点表中,且从所述哈希临时结构表中删除此条数据;若有一项的返回值为空,从所述哈希临时结构表中删除此条数据。
19.结合第一方面,在一种可能的实现方式中,所述将所述哈希节点表存入列表中,包括:
20.遍历所述哈希节点表,判断本规则节点依赖的规则节点的数量是否为0;
21.若大于0,则继续遍历下一个所述哈希节点表中的所述推理规则;
22.若等于0,则在所述依赖本规则节点的规则节点列表删除和依赖于本规则节点的数据,同时所述本规则节点依赖的规则节点的数量减1,将本规则存入列表中,并从所述哈希节点表中删除,循环本步骤至所述哈希节点表中没有本规则节点依赖的规则节点的数量等于0的规则节点,删除所述哈希节点表中剩余规则。
23.第二方面,本发明实施例提供了一种基于有向无环图的依赖消除装置,该装置包括:
24.哈希规则表确定模块,用于对多个推理规则进行结构化处理,并将所述推理规则存储在哈希规则表中;
25.数组分割模块,用于将所述推理规则中的触发条件进行分割,获得分割数组;
26.节点表确定模块,用于对所述哈希规则表进行解析,构建规则节点结构体,并根据所述分割数组将所述规则节点结构体存储在哈希节点表;
27.列表存储模块,用于将所述哈希节点表存入列表中。
28.结合第二方面,在一种可能实现的方式中,所述哈希规则表确定模块还包括用于,将所述推理规则形式化为规则名称、规则描述、规则输入变量以及触发条件;
29.将所述哈希规则表中的键设置为所述规则名称,将所述哈希规则表中的值设置为结构化处理后的所述推理规则。
30.结合第二方面,在一种可能实现的方式中,所述节点表确定模块还包括根据所述分割数组在所述哈希规则表中进行查找,若所述分割数组的每一项返回值都不为空,则按照将所述推理规则保存至所述哈希节点表中,所述哈希节点表中的键为所述规则名称,值为结构化处理后的所述推理规则。
31.结合第二方面,在一种可能实现的方式中,还包括节点临时表确定模块,用于根据所述分割数组在所述哈希规则表中进行查找,若有一项返回值为空,则将所述推理规则保
存至所述哈希节点临时表中,所述哈希节点临时表中的键为所述规则名称,值为结构化处理后的所述推理规则。
32.结合第二方面,在一种可能实现的方式中,所述节点表确定模块还包括遍历所述哈希节点临时表,依次在所述哈希节点表进行查找,若每一项的返回值不为空则新建一个规则节点,并将新建的规则节点存储至所述哈希节点表中,且从所述哈希临时结构表中删除此条数据;
33.若有一项返回值为空,则依次在所述哈希节点临时表中查找所述分割数组中的所有项,若每一项的返回值均不为空,则新建一个规则节点,并将新建的规则节点存储至所述哈希节点表中,且从所述哈希临时结构表中删除此条数据;若有一项的返回值为空,从所述哈希临时结构表中删除此条数据。
34.结合第二方面,在一种可能实现的方式中,所述列表存储模块包括遍历所述哈希节点表,判断本规则节点依赖的规则节点的数量是否为0;
35.若大于0,则继续遍历下一个所述哈希节点表中的所述推理规则;
36.若等于0,则在所述依赖本规则节点的规则节点列表删除和依赖于本规则节点的数据,同时所述本规则节点依赖的规则节点的数量减1,将本规则存入列表中,并从所述哈希节点表中删除,循环本步骤至所述哈希节点表中没有本规则节点依赖的规则节点的数量等于0的规则节点,删除所述哈希节点表中剩余规则。
37.第三方面,本发明实施例提供了一种基于有向无环图的依赖消除服务器,该服务器包括存储器和处理器;
38.所述存储器用于存储计算机可执行指令;
39.所述处理器用于执行所述计算机可执行指令,以实现以上任一项所述的方法。
40.第四方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有可执行指令,计算机执行所述可执行指令时能够实现以上任一项所述的方法。
41.本发明实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:
42.本发明实施例通过采用了一种基于有向无环图的依赖消除方法、装置及存储介质,该方法包括对多个推理规则进行结构化处理,并将推理规则存储在哈希规则表中;将推理规则中的触发条件进行分割,获得分割数组;对哈希规则表进行解析,构建规则节点结构体,并根据分割数组将规则节点结构体存储在哈希节点表;将哈希节点表存入列表中。在该方法中,将多个推理规则进行整理,删除多个推理规则中形成有向有环的推理规则之间的依赖,并且将原有的独立存储的推理规则之间按照关联的形式存储,在进行查询时,能够快速有效的获取结果。该方法有效解决了现有技术中多个推理规则之间形成有向有环的依赖,导致推理引擎无法进行解析和加载推理规则,甚至造成推理引擎陷入死循环的问题,实现了将多个推理规则处理为有向且无环的集合,使推理引擎能够高速且准确的进行推理规则的加载,并得到推理结果,提高推理引擎的工作效率。
附图说明
43.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对本发明实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可
以根据这些附图获得其他的附图。
44.图1为本技术实施例提供的基于有向无环图的依赖消除方法步骤流程图;
45.图2为本技术实施例提供的基于有向无环图的依赖消除方法中结构化推理规则并保存推理规则的步骤流程图;
46.图3为本技术实施例提供的基于有向无环图的依赖消除方法中对哈希临时表中的推理规则进行删除的步骤流程图;
47.图4为本技术实施例提供的基于有向无环图的依赖消除装置示意图;
48.图5为本技术实施例提供的基于本本技术的多个推理规则依赖示意图;
49.图6为本技术实施例提供的基于本本技术建立的有向无环图;
50.图7为本技术实施例提供的基于有向无环图的依赖消除服务器示意图。
具体实施方式
51.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
52.在人工智能领域,基于推理规则的推理引擎广泛的应用于预测、识别、分析等领域,尤其在垃圾邮件分析、社区邮件处理、专家系统的构建等领域。但是在对推理规则日常编写的过程中,存在很多推理规则编写不规范、多个推理规则之间相互依赖,以及形成不可解析的有向有环推理规则,导致推理引擎无法进行解析和加载推理规则,甚至造成推理引擎陷入死循环的问题。基于上述的问题,本发明实施例提供了一种基于有向无环图的依赖消除方法,该方法包括以下步骤s101至s104。
53.s101,对多个推理规则进行结构化处理,并将推理规则存储在哈希规则表中。
54.s102,将推理规则中的触发条件进行分割,获得分割数组。
55.s103,对哈希规则表进行解析,构建规则节点结构体,并根据分割数组将规则节点结构体存储在哈希节点表。
56.s104,将哈希节点表存入列表中。
57.上述s101至s104的步骤,对多个推理规则进行结构化处理,对多个按照上述方法进行处理的推理规则,利用有向无环图对推理规则进行分析,删除有向有环的依赖推理规则,并将有向无环的推理规则存放在哈希表中,能对多个推理规则进行数据去重。将整理好的多个推理规则存入列表中,是推理引擎能够快速且准确按照需求对推理规则进行加载,进而高效且准确的得到推理结果。
58.在步骤s101中,对多个推理规则进行结构化处理,并将推理规则存储在哈希规则表中,包括步骤s201至s202。
59.s201,将推理规则形式化为规则名称、规则描述、规则输入变量以及触发条件。对已有的推理规则从文本文件中进行加载,逐行进行解析,一条完整的推理规则由一组花括号组成。
60.s202,将哈希规则表中的键设置为规则名称,将哈希规则表中的值设置为结构化处理后的推理规则。创建哈希规则表,将结构化处理后的推理规则保存在哈希规则表中。在
哈希规则表插入新的一条推理规则时,根据需要插入的推理规则的规则名称对哈希规则表已经有的推理规则进行按名称查询,判断是否已经保存了此条推理规则。若查询后的返回值为空,则将此条推理规则插入至哈希规则表中;若查询后的返回值不为空,则表示该推理规则已经在哈希规则表中保存过。为了保证不出现同名的推理规则,则需要丢弃此条规则。
61.在上述步骤s102中,将推理规则中的触发条件进行分割中的触发条件是由变量、其他已经被定义的规则名称和关系操作符组成,在本技术提供的实施例中,变量一般为一个字符串或者是一个正则表达式。其他已经定义的规则名称则在哈希规则表中可以查到,当然也可能以后定义。关系操作符有and、or、not。
62.哈希节点表和哈希节点临时表的表结构包括,规则名称、本规则节点依赖的规则节点列表、依赖本规则节点的规则节点列表及本规则节点依赖的规则节点的数量。在本规则节点依赖的规则节点列表中保存的是指向依赖规则节点的指针。在依赖本规则节点的规则节点列表中保存的是依赖本规则节点的规则节点的指针。在按照表结构处理后的推理规则中,本规则节点依赖的规则节点的数量为0,则表示该规推理则为基础推理规则,没有依赖于其他推理规则。
63.在步骤s103中对哈希规则表进行解析,构建规则节点结构体,并根据分割数组将规则节点结构体分别存储在哈希节点表和哈希节点临时表中,包括:
64.根据分割数组在哈希规则表中进行查找,若分割数组的每一项返回值都不为空,则按照表结构将推理规则保存至哈希节点表中,将找到全部的依赖节点存入本规则节点依赖的规则节点列表,本规则节点依赖的规则节点的数量为找到的规则节点的数目。若有一项返回值为空,则按照表结构将推理规则保存至哈希节点临时表中,哈希节点表中的键为规则名称,值为结构化处理后的推理规则。
65.根据分割数组将规则节点结构体存储在哈希节点表,包括步骤s301至步骤s301。
66.s301,遍历哈希节点临时表,依次在哈希节点表进行查找,若每一项的返回值不为空则新建一个规则节点,对哈希节点临时表中每一个推理规则的分割数组中的每一项,都从从哈希节点表中查找,若每一项的返回值都不为空,将本条数据复制至新建的规则节点中,修改新建的规则节点中本规则节点依赖的规则节点列表和本规则节点依赖的规则节点的数量。并将新建的规则节点存储至哈希节点表中,且从哈希临时结构表中删除此条数据。
67.s302,若有一项返回值为空,则依次在哈希节点临时表中查找分割数组中的所有项,若每一项的返回值均不为空,则新建一个规则节点,并将新建的规则节点存储至哈希节点表中,且从哈希临时结构表中删除此条数据;若有一项的返回值为空,从哈希临时结构表中删除此条数据,若没有找到此条推理规则的依赖规则,则说明此条推理规则依赖节点定义不全,是不可能正常用于推理的规则。
68.在推理引擎中不允许规则之间产生相互依赖的情况,即不允许出现有向有环的依赖。如推理规则a依赖推理规则b,推理规则b依赖推理规则c,依赖推理规则c依赖推理规则a。这种有向有环的出现会导致推理陷入死循环,从而不能正确地加载推理规则集,进而导致推理引擎崩溃。本技术提供的方法就是为了防止推理规则之间出现有向有环的依赖,即删除检查到的已经形成有向有环的推理规则之间的依赖。
69.在步骤s104中,将哈希节点表存入列表中,包括:遍历哈希节点表,判断本规则节点依赖的规则节点的数量是否为0;若大于0,则继续遍历下一个哈希节点表中的推理规则;
若等于0,则在依赖本规则节点的规则节点列表删除和依赖于本规则节点的数据,同时本规则节点依赖的规则节点的数量减1,将本规则存入列表中,并从哈希节点表中删除,循环本步骤至哈希节点表中没有本规则节点依赖的规则节点的数量等于0的规则节点,删除哈希节点表中剩余规则。如果哈希节点表中还存在推理规则,则将说明这些规则之间存在有向有环的依赖。
70.在本技术的一个具体的实施例中,如下表所示为推理规则具体表示方法。
[0071][0072]
推理规则之间的依赖表示为:
[0073]
[0074][0075]
在extension_name_warning的condition,表示了推理规则extension_name_warning是和long_extension_name、hort_extension_name有依赖关系的。
[0076]
哈希结构表中的规则节点结构体如下表所示,结构体中rulename为规则名称,dependency_list为规则节点依赖的规则节点列表,列表中保存指向依赖规则节点的指针,reverse_dependency_list为依赖本规则节点的规则节点列表,列表中保存指向被依赖规则节点的指针,dependency_num为本规则节点依赖的规则节点的数量。如果dependency_num为0,表示该规则为基础规则,没有依赖于其他规则。
[0077][0078]
上述表格中的推理依赖规则如图5所示。图6所示是根据推理规则建立的有向无环图,从图中可以看出在rule17、rule19和rule20之前存在有向有环的依赖,如果不将rule17、rule19和rule20之前的任一一个依赖删除,则会对使用此条推理规则的推理引擎陷入死循环中。
[0079]
本发明实施例还提供一种基于有向无环图的依赖消除装置400,该装置包括:哈希规则表确定模块401,数组分割模块402,节点表确定模块403,列表存储模块404。
[0080]
哈希规则表确定模块401,用于对多个推理规则进行结构化处理,并将推理规则存储在哈希规则表中;哈希规则表确定模块401还包括用于,将推理规则形式化为规则名称、规则描述、规则输入变量以及触发条件;将哈希规则表中的键设置为规则名称,将哈希规则表中的值设置为结构化处理后的推理规则。
[0081]
数组分割模块402,用于将推理规则中的触发条件进行分割,获得分割数组;
[0082]
节点表确定模块403,用于对哈希规则表进行解析,构建规则节点结构体,并根据分割数组将规则节点结构体存储在哈希节点表;节点表确定模块403还包括根据分割数组在哈希规则表中进行查找,若分割数组的每一项返回值都不为空,则按照将推理规则保存至哈希节点表中,哈希节点表中的键为规则名称,值为结构化处理后的推理规则。还包括遍历哈希节点临时表,依次在哈希节点表进行查找,若每一项的返回值不为空则新建一个规则节点,并将新建的规则节点存储至哈希节点表中,且从哈希临时结构表中删除此条数据;若有一项返回值为空,则依次在哈希节点临时表中查找分割数组中的所有项,若每一项的返回值均不为空,则新建一个规则节点,并将新建的规则节点存储至哈希节点表中,且从哈希临时结构表中删除此条数据;若有一项的返回值为空,从哈希临时结构表中删除此条数据。
[0083]
该基于有向无环图的依赖消除装置400还包括节点临时表确定模块,节点临时表确定模块用于根据分割数组在哈希规则表中进行查找,若有一项返回值为空,则将推理规则保存至哈希节点临时表中,哈希节点临时表中的键为规则名称,值为结构化处理后的推理规则。
[0084]
列表存储模块404用于将哈希节点表存入列表中。列表存储模块404还包括遍历哈希节点表,判断本规则节点依赖的规则节点的数量是否为0;若大于0,则继续遍历下一个哈希节点表中的推理规则;若等于0,则在依赖本规则节点的规则节点列表删除和依赖于本规
则节点的数据,同时本规则节点依赖的规则节点的数量减1,将本规则存入列表中,并从哈希节点表中删除,循环本步骤至哈希节点表中没有本规则节点依赖的规则节点的数量等于0的规则节点,删除哈希节点表中剩余规则。
[0085]
在本技术提供的装置中,将推理规则化繁为简,在经过多种处理方式关联保存在列表中,在推理引擎对推理规则进行调用时,能方便快捷地根据本规则节点依赖的规则节点列表和依赖本规则节点的规则节点列表中的指针指向的位置,推理引擎能够快速且准确地得到推理结果。
[0086]
本发明实施例提供了一种基于有向无环图的依赖消除服务器,该服务器包括存储器501和处理器502;存储器501用于存储计算机可执行指令;处理器502用于执行计算机可执行指令,以实现上述的方法。
[0087]
本发明实施例提供了一种计算机可读存储介质,计算机可读存储介质存储有可执行指令,计算机执行可执行指令时能够实现以上的方法。
[0088]
上述存储介质包括但不限于随机存取存储器(英文:random access memory;简称:ram)、只读存储器(英文:read-only memory;简称:rom)、缓存(英文:cache)、硬盘(英文:hard disk drive;简称:hdd)或者存储卡(英文:memory card)。所述存储器可以用于存储计算机程序指令。
[0089]
虽然本技术提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。本实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或客户端产品执行时,可以按照本实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。
[0090]
上述实施例阐明的装置或模块,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。为了描述的方便,描述以上装置时以功能分为各种模块分别描述。在实施本技术时可以把各模块的功能在同一个或多个软件和/或硬件中实现。当然,也可以将实现某功能的模块由多个子模块或子单元组合实现。
[0091]
本技术中所述的方法、装置或模块可以以计算机可读程序代码方式实现控制器按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(英文:application specific integrated circuit;简称:asic)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:arc 625d、atmel at91sam、microchip pic18f26k20以及silicone labs c8051f320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内部包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
[0092]
本技术所述装置中的部分模块可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类
型的例程、程序、对象、组件、数据结构、类等。也可以在分布式计算环境中实践本技术,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
[0093]
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本技术可借助软件加必需的硬件的方式来实现。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,也可以通过数据迁移的实施过程中体现出来。该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,移动终端,服务器,或者网络设备等)执行本技术各个实施例或者实施例的某些部分所述的方法。
[0094]
本说明书中的各个实施方式采用递进的方式描述,各个实施方式之间相同或相似的部分互相参见即可,每个实施方式重点说明的都是与其他实施方式的不同之处。本技术的全部或者部分可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、移动通信终端、多处理器系统、基于微处理器的系统、可编程的电子设备、网络pc、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
[0095]
以上实施例仅用以说明本技术的技术方案,而非对本技术限制;尽管参照前述实施例对本技术进行了详细的说明,本领域普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术技术方案的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1