CN113254025B - 基于原语状态机的关键字特征集合编译方法、装置及设备 - Google Patents
基于原语状态机的关键字特征集合编译方法、装置及设备 Download PDFInfo
- Publication number
- CN113254025B CN113254025B CN202110716423.3A CN202110716423A CN113254025B CN 113254025 B CN113254025 B CN 113254025B CN 202110716423 A CN202110716423 A CN 202110716423A CN 113254025 B CN113254025 B CN 113254025B
- Authority
- CN
- China
- Prior art keywords
- primitive
- state machine
- node
- character
- depth
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/90335—Query processing
- G06F16/90344—Query processing by using string matching techniques
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明涉及基因测序和网络报文深度内容匹配技术领域,尤其涉及一种基于原语状态机的关键字特征集合编译方法、装置及设备。方法包括:获取待编译关键字特征集合,对待编译的关键字特征集合中的关键字按照预设的语法解析方法进行解析并编译,获得每个关键字对应的原语状态机;根据关键字对应的原语状态机根节点的深度,先合并深度相同的原语状态机,再从浅到深的原则进行聚合,获得关键字特征集合对应的原语状态机。本发明提出了一种基于原语状态机的关键字特征集合编译方法,获得了由固定处理功能操作原语构成的原语状态机,能够使用CPU进行更为复杂的字符匹配操作计算,从而提高了字符特征匹配算法的性能和匹配灵活性。
Description
技术领域
本发明涉及基因测序和网络报文深度内容匹配技术领域,尤其涉及一种基于原语状态机的关键字特征集合编译方法、装置及设备。
背景技术
如何在输入的字符序列中快速匹配指定的关键字特征集合是否出现以及出现的位置,是计算机科学领域的一个长期难点问题,在互联网高速报文分类、互联网应用协议识别、基因组比对定位等领域有广泛用途。
现有的典型匹配算法包括AC算法、DFA和NFA算法等。其中AC算法是Alfred V. Aho和Margaret J.Corasick 发明的字符串搜索算法,用于在输入的一串字符串中匹配有限个字符串特征中的子串,存在效率低下的问题。而DFA和NFA算法通常是由正则表达式编译生成的,DFA算法不提供匹配回溯功能,NFA比DFA算法慢,但提供了匹配回溯功能。DFA和NFA算法在正则表达式数量较多时,存在着严重的状态组合爆炸问题,且匹配性能低于AC算法。同时,上述算法基本匹配过程均为:在输入字符序列中读取一个字符,根据当前算法状态机的位置和输入字符,将状态机推进到下一个位置。每次状态机位置的推进至少涉及一次或以上的内存访问操作,存在低效性问题。同时,算法性能受内存访问主频和时延的影响,很难进行性能提升。因此,设计新的字符特征匹配算法,充分利用CPU强大的计算性能,避免内存的性能约束,是提升算法匹配性能的一个重要途径。
发明内容
基于此,针对传统字符特征匹配方法存在的状态数量庞大、状态迁移次数高和Cache不友好等问题,本发明提出一种基于原语状态机的关键字特征集合编译方法,具体包括:
获取待编译关键字特征集合,对所述待编译的关键字特征集合中的关键字按照预设的语法解析方法进行解析并编译构造原语状态机,获得每个关键字对应的原语状态机;
根据所述关键字对应的原语状态机根节点的深度,先合并深度相同的原语状态机,再按照从浅到深的原则进行聚合,获得关键字特征集合对应的原语状态机。
进一步的,所述对所述待编译的关键字特征集合中的关键字按照预设的语法解析方法进行解析和编译步骤具体包括:
创建成功命中原语节点、失败原语节点作为基础原语节点,并初始化相关变量,将失败指针指向失败原语节点,当前节点指针指向空节点;
读取当前字符并将读取指针后移,根据所述当前字符和/或下一个字符的类型进行语法分析,并按照预设的编译方法对不同字符或字符组合进行编译构造原语状态机;
当读取达到关键字字符尾部,更新当前节点的成功跳转状态,将其指向成功命中原语节点,并检查确保状态机中包含字符串类原语。
进一步的,所述根据所述当前字符和/或下一个字符的类型进行语法分析,并按照预设的编译方法对不同字符或字符组合进行编译步骤具体包括:
当前字符为“.”,读取下一个字符,当下一个字符为“*”,设置浮动标志并读取指针后移,否则建立跳过字符原语节点作为当前节点或将当前跳过字符原语的跳过数量加1;
当前字符为“*”,停止编译并报错;
对其它字符,进行“字符串”原语节点的处理过程,具体包括:
当前字符为“\”,读取下一个字符,并将读取指针后移;
当前节点不为“字符串”类型的原语节点,根据浮动标志是否为True,创建“搜索匹配多个字符串”原语节点或“当前位置匹配多个字符串”原语节点,并将当前节点的成功跳转状态指向新节点,失败跳转状态指向失败指针,最后更新当前节点为新创建的原语节点;
将当前字符加入到当前原语的搜索字符串尾;
如果浮动标志为True,且失败指针指向失败原语节点,创建跳转指定位置原语,将其成功和失败跳转状态指向当前节点,字符读取位置指定为前一状态的初始读取位置,并将失败指针指针指向新创建的跳转指定位置原语;
设置浮动标志为False。
进一步的,所述根据所述关键字对应的原语状态机根节点的深度,先合并深度相同的原语状态机,再按照从浅到深的原则进行聚合,获得关键字特征集合对应的原语状态机步骤具体包括:
创建按照深度排序的空链表,根据原语状态机深度规则确定各原语状态机的深度值;
读取所述关键字对应的第一个原语状态机及其深度值,将所述第一原语状态机和对应的深度值保存至空链表中,获得深度链表;
继续读取所述关键字对应的原语状态机以及对应的深度值,并在深度链表中查找相同深度的原语状态机,作为目标状态机;
当目标状态机存在时,根据目标状态机当前的状态机类型和原语节点类型进行状态机合并处理;当目标状态机不存在时,则将当前读取的状态机按照深度排序插入至深度链表中,直到所有原语状态机读取结束获得最终深度链表;
从所述最终深度链表中取首个原语状态机,并将全局根指向首个原语状态机节点,且对于除首个原语状态机外的原语状态机创建跳转到指定匹配位置原语节点,替换前一个状态机的失败原语节点,并将成功失败跳转指针指向下一个原语状态机的根节点;
删除深度链表,并返回全局根指针获得关键字特征集合对应的原语状态机。
进一步的,所述根据原语状态机深度规则确定各原语状态机的深度值步骤具体包括:
根节点为“当前位置匹配多个字符串”原语状态机的深度值为0;
根节点为“跳过字符”原语的状态机的深度值等于跳过字符数;
根节点为“搜索匹配多个字符串”原语的状态机为深度最大的状态机。
进一步的,所述根据标状态机当前的状态机类型和原语节点类型进行状态机合并处理的步骤具体包括:
将当前状态机的“失败”原语节点替换为目标状态机的“失败”节点;
当两个状态机的根节点均指向“跳过字符”原语节点,将源节点和目标节点指针分别指向跳过字符原语节点的成功跳转节点,并删除当前状态机的“跳过字符节点”;
当源节点和目标节点指针指向“字符串”类型原语,将源节点中的所有字符串特征加入到目标节点中,保证所述字符串特征的成功跳转指向节点不变,并将成功跳转指向节点开始的所有后续节点加入到目标状态机中;
所述源节点为当前状态机的当前节点;所述目标节点为目标状态机的目标节点。
基于同一发明构思的,本发明实施例还提供了一种面向原语状态机的关键字特征集合编译装置,所述编译装置具体包括:
关键字编译模块,用于获取待编译关键字特征集合,对所述待编译的关键字特征集合中的关键字按照预设的语法解析方法进行解析并编译构造原语状态机,获得每个关键字对应的原语状态机;
原语状态机聚合模块,用于根据所述关键字对应的原语状态机根节点的深度,先合并深度相同的原语状态机,再按照从浅到深的原则进行聚合,获得关键字特征集合对应的原语状态机。
基于同一发明构思的,本发明实施例还提供了一种面向原语状态机的关键字特征集合编译的抽取设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述面向原语状态机的关键字特征集合编译方法的步骤。
本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述面向原语状态机的关键字特征集合编译方法的步骤。
有益效果:
本发明提出了一种新的原语状态机的关键字特征集合编译方法,通过将传统编译算法中按照逐个字符进行有限状态机状态展开方法替换为由固定处理功能的操作原语构成的原语状态机,能够使CPU专注进行更为复杂的字符匹配操作计算,大幅降低涉及的状态节点数量和匹配过程在状态节点间迁移的次数,有助于充分提高现代高性能CPU的多级Cache命中率,从而加速匹配算法的处理性能,提供更大的匹配灵活性。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的基于原语状态机的关键字特征集合编译方法的流程示意图;
图2为本发明实施例提供的第一阶段关键字编译方法的流程示意图;
图3为本发明实施例提供的第二阶段特征集合库多原语状态机的聚合流程示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
在本发明实施例中,一种面向原语状态机的关键字特征集合编译方法,包括两个阶段,分别是将关键字特征集合中每个关键字编译为对应的原语状态机阶段和将每个关键字对应的原语状态机聚合为关键字特征集合库对应的特征库原语状态机阶段。关键字特征集合库由用户输入的一组关键字构成,每个关键字由标准ASCII码字符组成,长度不限。ASCII码中‘.’字符表示匹配任意一个字符,“*”字符需要与“.”字符一起使用表示浮动匹配零个或任意个字符,“\”字符表示转义字符用于将特殊含义字符转义为普通字符,其余ASCII码字符作为普通字符串特征字符。
如图1所示,在本发明实施例中,提出了一种基于原语状态机的关键字特征集合编译方法的流程示意图,具体包括以下步骤:
步骤S101,获取待编译关键字特征集合,构造基础原语,并对所述待编译的关键字特征集合中的关键字按照预设的语法解析方法进行解析并编译,获得每个关键字对应的原语状态机。
如图2所示,为本实施例第一阶段关键字编译方法的流程示意图,共包括13个步骤。所述编译方法具体步骤为:
创建成功命中原语节点;创建失败原语节点;将读取位置设为当前关键字的起始位置;将当前节点指针和根节点指针指向空节点;将浮动标志设置为False;将失败跳转指针指向失败原语节点;将当前节点的失败跳转状态指向失败跳转指针;循环直到读取位置到达当前关键字的尾部:
读取当前字符,读取位置后移一个字符;如果当前字符为“.”字符:如果下一个字符存在且为“*”字符:将浮动标志设置为True;将读取位置继续后移一个字符;否则,将浮动标志设置为False;如果当前节点类型为“跳过字符”原语,将当前节点的跳过字符数量加1;否则,创建一个新的原语节点,类型为“跳过字符原语”, 且跳过字符数量设置为1;将新原语节点的失败跳转状态设置为失败跳转指针的指向节点;如果当前节点不为空,将当前节点的成功跳转状态指向新的原语节点;将当前节点指向新的原语节点;如果根节点指针为空,将其指向新的原语节点;
如果当前字符为“*”字符:报错并停止编译过程;
如果当前字符为“\”字符:如果下一个字符存在:将读取位置的字符赋值给当前字符,读取位置后移一个字符;否则:报错并停止编译过程;
如果当前节点类型为“字符串”原语且浮动标志为False,将当前字符加入到当前原语的搜索字符串尾;
否则,如果浮动标志为True,则:创建一个新的原语节点,类型为“搜索匹配多个字符串原语”,将失败跳转状态指向失败跳转指针,并将当前字符加入到新原语的搜索字符串尾部。如果当前节点不为空,则将当前节点的成功跳转状态指向新节点,将当前节点指向新节点。如果失败跳转指针指向的原语节点类型为“失败原语”,则:创建第二个新的原语节点,类型为“跳转到指定匹配位置原语”,并将位置设定为“前一原语开始位置”;将第二个新的原语节点的成功跳转状态和失败跳转状态均指向第一个新原语节点;将失败跳转指针指向第二个新节点,将浮动标志设置为False;
否则:创建一个新的原语节点,类型为“当前位置匹配多个字符串原语” ,将失败跳转状态指向失败跳转指针,并将当前字符加入到新原语的搜索字符串尾部。如果当前节点不为空,则将当前节点的成功跳转状态指向新节点。将当前节点指向新节点。
循环结束后,如果本原语状态机中不包含“字符串原语”,则:报错并停止编译过程。将当前节点的成功跳转状态指向成功命中原语节点,并完成当前关键字的编译。
根据上述详细步骤可知,首先进行成功、失败原语节点的创建,并初始化相关变量;然后进行关键字字符串解析阶段,循环读取关键字的每个字符,再根据字符分别进行一下处理:
当为“.”字符:根据下一个字符是否为“*”,判断后续原语是否出现搜索匹配,并设置浮动标志。对只包含“.”字符时,如果当前原语是“跳过字符”原语,则将跳过字符数量加一,表示出现了“…”形式的跳过多个字符的情况;对其它情况,表示开始进行跳过字符的处理,需要新建“跳过字符”原语,并将新原语加入到状态机中。
当为“\”字符:表示转义字符。通过读取下一个字符并后移读取指针,将“.*\”这三种特殊含义的字符转义为普通字符进行处理。
其他字符:加入到“字符串”原语的特征字符串中。根据当前节点类型和浮动标志分别进行处理。当前节点类型为“字符串”原语且浮动标志为False时,将当前字符附加到该原语节点特征字符串的尾部。对其它情况,根据浮动标志,创建类型为“搜索匹配多个字符串”或“当前位置匹配多个字符串”的原语节点,并将当前字符作为该原语节点特征字符串的第一个字符。对“搜索匹配多个字符串”原语,其下游原语失败后,需要返回到顶层的“搜索匹配多个字符串”原语,进行后续的搜索匹配;因此需要在首次创建“搜索匹配多个字符串”原语时,将后续的失败跳转指针指向新建的“跳转指定位置”原语,并通过“跳转指定位置”原语将匹配状态重新推进到顶层的“搜索匹配多个字符串”原语处。
最后将更新编译后状态机的当前节点的成功状态,将其指向创建的成功命中原语,同时进行状态机的合法性检查,对不包含“字符串”类原语节点的状态机,停止编译并报错。
步骤S102,根据所述关键字对应的原语状态机根节点的深度,先合并深度相同的原语状态机,再按照从浅到深的原则进行聚合,获得关键字特征集合对应的原语状态机。
如图3所示,本实施例第二阶段特征集合库多原语状态机的聚合流程示意图,用于将每个关键字对应的原语状态机聚合为关键字特征集合库对应的特征库原语状态机。
所述阶段二的处理步骤为:创建一个按照深度排序的状态机链表;对阶段一生成的每个关键字对应的原语状态机,循环执行以下步骤:将深度值设置为0;如果当前原语状态机根指针指向的原语节点类型为“跳过字符原语”,则:取该原语的跳过字符数量作为深度值;如果当前原语状态机根指针指向的原语节点类型为“搜索匹配多个字符串原语”,则:设置深度值为最大值;
基于深度值查找状态机链表,如果存在相同深度的原语状态机(目标状态机),则:将目标节点指针指向目标状态机根指针对应的原语节点;将源节点指针指向当前原语状态机根指针对应的原语节点;检查并确保目标节点和源节点的原语类型的一致性,之后将当前原语状态机中的“失败原语”节点删除,全部替换为目标状态机中的“失败原语”节点;如果目标节点的原语类型为“跳过字符原语”,则:将源节点的成功跳转状态指向节点赋值给临时节点;将源节点从当前原语状态机中删除,并将临时节点赋值给源节点;将目标节点的成功跳转状态指向节点赋值给目标节点;如果目标节点的原语类型不是“在当前位置匹配多个字符串原语”,且也不是“搜索匹配多个字符串原语”,则:报错并终止编译过程;将源节点中的所有字符串特征加入到目标节点中,保证上述字符串特征的成功跳转指向节点不变,并将成功跳转指向节点开始的所有后续节点加入到目标状态机中;删除源节点,并删除当前原语状态机中所有没有被目标状态机引用的原语节点;
在不存在深度相同的原语状态机时,以深度值作为排序依据,将当前状态机按深度从小到大顺序插入到状态机链表中;
当所有状态机均插入到链表后,取状态机链表中首个状态机赋值给当前状态机,并将其从状态机链表中删除;将全局根指针设置为当前状态机根指针;对状态机链表中的剩余状态机,循环:取首个状态机赋值给下一个状态机,并将其从状态机链表中删除;新建一个原语节点,类型为“跳转到指定匹配位置原语”,并将跳转位置设置为输入的“起始位置”;将新原语节点的成功跳转状态和失败跳转状态均指向下一个状态机的根节点;将当前状态机的“失败原语”节点替换为新建原语节点;删除当前状态机的“失败原语”,并将下一个状态机赋值给当前状态机;
循环结束后,删除链表并返回全局根指针指向的特征库原语状态机。
根据上述步骤可知,状态机的聚合过程按照首先合并深度相同的原语状态机,再从浅到深的原则,先创建空链表,并按照原语状态机深度规则进行深度确定:根节点为“搜索匹配多个字符串”原语的状态机为深度最大的状态机;根节点为“跳过字符”原语的状态机,按照跳过字符数从1到N作为状态机从浅到深的深度值;对根节点为“当前位置匹配多个字符串”原语的状态机,深度值为0。从阶段一的编译方法可知,根节点不可能为其它原语类型,当出现其它原语类型时,报错并终止编译。
然后读取所述关键字对应的第一个原语状态机及其深度值,将所述第一原语状态机和对应的深度值保存至空链表中,获得深度链表;继续读取所述关键字对应的原语状态机以及对应的深度值,并在深度链表中查找相同深度的原语状态机,作为目标状态机;如果不存在这样的状态机,则将当前状态机插入到链表中。找到相同深度的状态机后,首先将当前状态机的失败原语替换为目标状态机的失败原语;然后,判断两个状态机的根节点是否为“跳过字符”原语,均为该原语时,将当前比较节点分别推进到其成功跳转节点并删除当前状态机的“跳过字符”原语节点;第三,检查当前比较节点如果不是“字符串”类型的原语,则报错终止编译;否则将源节点的字符串特征加入到目的节点中,并将源节点的字符串特征指向的后续原语节点加入到目标状态机中;最后,删除当前状态机和状态机中所有没有被目标状态机引用的节点。
为了合并链表中不同深度状态机的阶段。合并方法为将前一个状态的失败节点替换为“跳转到指定位置”原语节点,并指定将报文读取位置移动到报文起始部分;再将“跳转到指定位置”原语节点的成功和失败跳转指针均指向下一个状态机的根节点,进而将链表中所有的状态机连接成整个关键字特征集合库对应的特征库原语状态机。
本发明实施例以固定处理功能的操作原语作为状态机节点,按照本发明方法进行编译,并按照由浅到深的原则进行聚合获得关键字集合的原语状态机,能够使CPU进行更为复杂的字符匹配操作计算,从而达到大幅降低状态节点的数量和匹配过程在状态节点间迁移的次数,有助于充分提高现代高性能CPU的多级Cache命中率,从而加速匹配算法的处理性能,提供更大的匹配灵活性。
在本发明实施例中,本发明提供了一种面向原语状态机的关键字特征集合编译装置,所述编译装置具体包括:
关键字编译模块,用于获取待编译关键字特征集合,构造基础原语,并对所述待编译的关键字特征集合中的关键字按照预设的语法解析方法进行解析并编译,获得每个关键字对应的原语状态机;该处理步骤按照如图2所示的编译方法进行。
原语状态机聚合模块,用于根据所述关键字对应的原语状态机根节点的深度,首先合并深度相同的原语状态机,再按照从浅到深的原则进行聚合,获得关键字特征集合对应的原语状态机,该聚合过程按照如图3所示的聚合方法进行。
在本发明实施例中,还提供了一种面向原语状态机的关键字特征集合编译的抽取设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述面向原语状态机的关键字特征集合编译方法的步骤。
在本发明实施例中,还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述面向原语状态机的关键字特征集合编译方法的步骤。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由权利要求指出。
应该理解的是,虽然本发明各实施例的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,各实施例中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
Claims (7)
1.一种面向原语状态机的关键字特征集合编译方法,其特征在于,具体包括:
获取待编译关键字特征集合,对所述待编译的关键字特征集合中的关键字按照预设的语法解析方法进行解析并编译构造原语状态机,获得每个关键字对应的原语状态机;
所述对所述待编译的关键字特征集合中的关键字按照预设的语法解析方法进行解析并编译构造原语状态机步骤具体包括:创建成功命中原语节点、失败原语节点作为基础原语节点,并初始化相关变量,将失败指针指向失败原语节点,当前节点指针指向空节点;读取当前字符并将读取指针后移,根据所述当前字符和/或下一个字符的类型进行语法分析,并按照预设的编译方法对不同字符或字符组合进行编译构造原语状态机;当读取达到关键字字符尾部,更新当前节点的成功跳转状态,将其指向成功命中原语节点,并检查确保状态机中包含字符串类原语;
根据所述关键字对应的原语状态机根节点的深度,先合并深度相同的原语状态机,再按照从浅到深的原则进行聚合,获得关键字特征集合对应的原语状态机;
所述根据所述关键字对应的原语状态机根节点的深度,先合并深度相同的原语状态机,再按照从浅到深的原则进行聚合,获得关键字特征集合对应的原语状态机步骤具体包括:
创建按照深度排序的空链表,根据原语状态机深度规则确定各原语状态机的深度值;读取所述关键字对应的第一个原语状态机及其深度值,将所述第一个 原语状态机和对应的深度值保存至空链表中,获得深度链表;继续读取所述关键字对应的原语状态机以及对应的深度值,并在深度链表中查找相同深度的原语状态机,作为目标状态机;当目标状态机存在时,根据目标状态机当前的状态机类型和原语节点类型进行状态机合并处理;当目标状态机不存在时,则将当前读取的状态机按照深度排序插入至深度链表中,直到所有原语状态机读取结束获得最终深度链表;从所述最终深度链表中取首个原语状态机,并将全局根指向首个原语状态机节点,且对于除首个原语状态机外的原语状态机创建跳转到指定匹配位置原语节点,替换前一个状态机的失败原语节点,并将成功失败跳转指针指向下一个原语状态机的根节点;删除深度链表,并返回全局根指针获得关键字特征集合对应的原语状态机。
2.根据权利要求1所述的面向原语状态机的关键字特征集合编译方法,其特征在于,所述根据所述当前字符和/或下一个字符的类型进行语法分析,并按照预设的编译方法对不同字符或字符组合进行编译步骤具体包括:
当前字符为“.”,读取下一个字符,当下一个字符为“*”,设置浮动标志并读取指针后移,否则建立跳过字符原语节点作为当前节点或将当前跳过字符原语的跳过数量加1;
当前字符为“*”,停止编译并报错;
对其它字符,进行“字符串”原语节点的处理过程,具体包括:
当前字符为“\”,读取下一个字符,并将读取指针后移;
当前节点不为“字符串”类型的原语节点,根据浮动标志是否为True,创建“搜索匹配多个字符串”原语节点或“当前位置匹配多个字符串”原语节点,并将当前节点的成功跳转状态指向新节点,失败跳转状态指向失败指针,最后更新当前节点为新创建的原语节点;将当前字符加入到当前原语的搜索字符串尾;
如果浮动标志为True,且失败指针指向失败原语节点,创建跳转指定位置原语,将其成功和失败跳转状态指向当前节点,字符读取位置指定为前一状态的初始读取位置,并将失败指针指向新创建的跳转指定位置原语;
设置浮动标志为False。
3.根据权利要求1所述的面向原语状态机的关键字特征集合编译方法,其特征在于,所述根据原语状态机深度规则确定各原语状态机的深度值步骤具体包括:
根节点为“当前位置匹配多个字符串”原语状态机的深度值为0;
根节点为“跳过字符”原语的状态机的深度值等于跳过字符数;
根节点为“搜索匹配多个字符串”原语的状态机为深度最大的状态机。
4.根据权利要求1所述的面向原语状态机的关键字特征集合编译方法,其特征在于,所述根据目标状态机当前的状态机类型和原语节点类型进行状态机合并处理的步骤具体包括:
将当前状态机的“失败”原语节点替换为目标状态机的“失败”节点;
当两个状态机的根节点均指向“跳过字符”原语节点,将源节点和目标节点指针分别指向跳过字符原语节点的成功跳转节点,并删除当前状态机的“跳过字符节点”;
当源节点和目标节点指针指向“字符串”类型原语,将源节点中的所有字符串特征加入到目标节点中,保证所述字符串特征的成功跳转指向节点不变,并将成功跳转指向节点开始的所有后续节点加入到目标状态机中;
所述源节点为当前状态机的当前节点;所述目标节点为目标状态机的目标节点。
5.一种面向原语状态机的关键字特征集合编译装置,其特征在于,所述编译装置具体包括:
关键字编译模块,用于获取待编译关键字特征集合,对所述待编译的关键字特征集合中的关键字按照预设的语法解析方法进行解析并编译构造原语状态机,获得每个关键字对应的原语状态机;
所述对所述待编译的关键字特征集合中的关键字按照预设的语法解析方法进行解析并编译构造原语状态机步骤具体包括:创建成功命中原语节点、失败原语节点作为基础原语节点,并初始化相关变量,将失败指针指向失败原语节点,当前节点指针指向空节点;读取当前字符并将读取指针后移,根据所述当前字符和/或下一个字符的类型进行语法分析,并按照预设的编译方法对不同字符或字符组合进行编译构造原语状态机;当读取达到关键字字符尾部,更新当前节点的成功跳转状态,将其指向成功命中原语节点,并检查确保状态机中包含字符串类原语;
原语状态机聚合模块,用于根据所述关键字对应的原语状态机根节点的深度,先合并深度相同的原语状态机,再按照从浅到深的原则进行聚合,获得关键字特征集合对应的原语状态机;
所述根据所述关键字对应的原语状态机根节点的深度,先合并深度相同的原语状态机,再按照从浅到深的原则进行聚合,获得关键字特征集合对应的原语状态机步骤具体包括:创建按照深度排序的空链表,根据原语状态机深度规则确定各原语状态机的深度值;读取所述关键字对应的第一个原语状态机及其深度值,将所述第一个 原语状态机和对应的深度值保存至空链表中,获得深度链表;继续读取所述关键字对应的原语状态机以及对应的深度值,并在深度链表中查找相同深度的原语状态机,作为目标状态机;当目标状态机存在时,根据目标状态机当前的状态机类型和原语节点类型进行状态机合并处理;当目标状态机不存在时,则将当前读取的状态机按照深度排序插入至深度链表中,直到所有原语状态机读取结束获得最终深度链表;从所述最终深度链表中取首个原语状态机,并将全局根指向首个原语状态机节点,且对于除首个原语状态机外的原语状态机创建跳转到指定匹配位置原语节点,替换前一个状态机的失败原语节点,并将成功失败跳转指针指向下一个原语状态机的根节点;删除深度链表,并返回全局根指针获得关键字特征集合对应的原语状态机。
6.一种面向原语状态机的关键字特征集合编译的抽取设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至4任一项所述的面向原语状态机的关键字特征集合编译方法的步骤。
7.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至4任一项所述的面向原语状态机的关键字特征集合编译方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110716423.3A CN113254025B (zh) | 2021-06-28 | 2021-06-28 | 基于原语状态机的关键字特征集合编译方法、装置及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110716423.3A CN113254025B (zh) | 2021-06-28 | 2021-06-28 | 基于原语状态机的关键字特征集合编译方法、装置及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113254025A CN113254025A (zh) | 2021-08-13 |
CN113254025B true CN113254025B (zh) | 2021-09-28 |
Family
ID=77189804
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110716423.3A Active CN113254025B (zh) | 2021-06-28 | 2021-06-28 | 基于原语状态机的关键字特征集合编译方法、装置及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113254025B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102647414A (zh) * | 2012-03-30 | 2012-08-22 | 华为技术有限公司 | 协议解析方法、设备及系统 |
CN111767041A (zh) * | 2019-03-30 | 2020-10-13 | 英特尔公司 | 在数据流图中插入缓冲器的方法和设备 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1179872A (zh) * | 1995-11-30 | 1998-04-22 | 埃克斯塞尔公司 | 具有通用应用程序接口用于标准化交互呼叫处理通信的电信交换器 |
IE980215A1 (en) * | 1998-03-24 | 1999-10-20 | Applic Building Blocks Ltd | Data Processing System |
US7373290B2 (en) * | 2002-04-04 | 2008-05-13 | International Business Machines Corporation | Method and system for reducing storage requirements of simulation data via keyword restrictions |
US7979844B2 (en) * | 2008-10-14 | 2011-07-12 | Edss, Inc. | TICC-paradigm to build formally verified parallel software for multi-core chips |
US9177017B2 (en) * | 2010-09-27 | 2015-11-03 | Microsoft Technology Licensing, Llc | Query constraint encoding with type-based state machine |
CN102023845B (zh) * | 2010-12-17 | 2014-05-21 | 曙光信息产业(北京)有限公司 | 一种基于状态机的Cache并发访问管理方法 |
CN107145344B (zh) * | 2014-09-02 | 2020-12-04 | 起元科技有限公司 | 在基于图的程序中指定组件 |
US9710420B2 (en) * | 2014-11-21 | 2017-07-18 | Toshiba Corporation | System and method for improving the efficiency of a serial interface protocol |
CN110032363B (zh) * | 2019-03-21 | 2023-07-07 | 深圳点猫科技有限公司 | 一种用于机器人编程的数据结构构造方法及系统 |
-
2021
- 2021-06-28 CN CN202110716423.3A patent/CN113254025B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102647414A (zh) * | 2012-03-30 | 2012-08-22 | 华为技术有限公司 | 协议解析方法、设备及系统 |
CN111767041A (zh) * | 2019-03-30 | 2020-10-13 | 英特尔公司 | 在数据流图中插入缓冲器的方法和设备 |
Also Published As
Publication number | Publication date |
---|---|
CN113254025A (zh) | 2021-08-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7725510B2 (en) | Method and system for multi-character multi-pattern pattern matching | |
US10242125B2 (en) | Regular expression matching | |
US7941417B2 (en) | Processing structured electronic document streams using look-ahead automata | |
CN111249736B (zh) | 代码处理方法及装置 | |
JP2008299867A (ja) | データ構造によるコンピュータ表現及びそれに関連する符号化/復号化方法 | |
US8583961B2 (en) | Method and device for creating pattern matching state machine | |
US20100036815A1 (en) | True/false decision method | |
US20040154009A1 (en) | Structuring program code | |
CN112052413B (zh) | Url模糊匹配方法、装置和系统 | |
CN111666468A (zh) | 一种基于团簇属性在社交网络中搜索个性化影响力社区的方法 | |
CN116560984A (zh) | 一种基于调用依赖图的测试用例聚类分组方法 | |
CN113254025B (zh) | 基于原语状态机的关键字特征集合编译方法、装置及设备 | |
CN112506789B (zh) | 一种用于数据包检测的并行模式匹配方法 | |
US9600565B2 (en) | Data structure, index creation device, data search device, index creation method, data search method, and computer-readable recording medium | |
CN113505585B (zh) | 基于原语状态机的高速字符串特征匹配方法、装置及设备 | |
US20080306948A1 (en) | String and binary data sorting | |
WO2015139646A1 (en) | Data processing method and apparatus for unrealscript | |
CN114896271B (zh) | 一种高效维护节点全路径的方法、装置及应用 | |
CN108304467B (zh) | 用于文本间匹配的方法 | |
CN113961568A (zh) | 基于区块链的链式数据结构的区块快速查找方法 | |
CN114625933A (zh) | 内存中字符串查找方法、装置、设备、存储介质及产品 | |
Sgarbas et al. | Optimal insertion in deterministic DAWGs | |
KR101565715B1 (ko) | 유향 동시발생 부분그래프 생성 장치 및 방법 | |
Minas | Speeding up generalized PSR parsers by memoization techniques | |
Schwarz et al. | Efficiently extracting full parse trees using regular expressions with capture groups |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |