CN106959962B - 一种多模式字符串匹配方法和装置 - Google Patents
一种多模式字符串匹配方法和装置 Download PDFInfo
- Publication number
- CN106959962B CN106959962B CN201610017565.XA CN201610017565A CN106959962B CN 106959962 B CN106959962 B CN 106959962B CN 201610017565 A CN201610017565 A CN 201610017565A CN 106959962 B CN106959962 B CN 106959962B
- Authority
- CN
- China
- Prior art keywords
- string
- pattern
- character
- pattern string
- length
- 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
- 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)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种多模式字符串匹配方法和装置,用以提高多模式字符串匹配的匹配效率和匹配速度。所述方法中,将模式串中具有前缀包含关系的模式串压缩到一个模式串中得到压缩模式集;根据压缩模式集构造前缀集;并根据预设算法为前缀集构造AC自动机;包括:针对待匹配的文本串,将当前滑动窗口所包含的字符依次输入AC自动机中得到至少一个初次匹配位置;针对每一初次匹配位置,如果其匹配的字符串长度小于预设长度,则将其和匹配的字符串添加至匹配结果集中;如果其匹配的字符串长度等于预设长度,则将该其加入到二次匹配入口集合中;针对每一入口位置分别进行二次匹配,并将进行二次匹配的入口位置和匹配的字符串添加至匹配结果集中。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种多模式字符串匹配方法和装置。
背景技术
在计算机领域,字符串匹配是研究热点之一,比如在搜索操作、敏感词过滤等应用中,都会涉及到字符串匹配的问题。一个好的字符串匹配的方式,能够帮助应用减少CPU(Central Processing Unit,中央处理器)占用时间,提高应用的响应时间。
多模式字符串匹配就是匹配的模式串不止一个,多模式串的匹配方法为:有n个模式串P1、P2、...、Pn和一个文本主串T,在T中寻找n个模式串中的任一个是否在T中出现,是则匹配成功。在网络安全、信息检索、生物信息学等领域为了实现模式串的快速识别及定位,常采用多模式匹配算法。
目前的多模式匹配算法主要是为模式集(模式集中包括n个模式串)预先构造各种数据结构,如AC(Aho-Corasick Automaton)自动机、二叉查找树、决策树等,然后再将文本串作为输入来实现多模式匹配。
目前的多模式字符串匹配算法中,例如基于流水线二叉搜索树的大规模字符串匹配方法MASM,该算法首先使用前缀树对模式集中具有前缀包含关系的模式串进行压缩,然后对压缩后的模式集构建二叉搜索树,最后在文本串中不断地截取文本来遍历二叉搜索树实现匹配。然而,MASN算法在进行模式集压缩时,需要对整个模式集构建前缀树,对海量模式串的压缩需要消耗大量内存,容易引起内存耗尽从而导致无法完成压缩过程;此外,在匹配过程中需要对整个二叉搜索树进行遍历,当模式集规模较大时容易导致二叉搜索树深度较大,从而降低查找效率。
发明内容
本发明实施例提供一种多模式字符串匹配方法和装置,用以提高多模式字符串匹配的匹配效率和匹配速度。
本发明实施例提供一种多模式字符串匹配方法,将模式串中具有前缀包含关系的模式串压缩到一个模式串中得到压缩模式集;针对所述压缩模式集中的每一模式串,如果其字符长度不超过预设长度,则将该模式串添加至前缀集中,如果其字符长度超过所述预设长度,则根据所述预设长度,截取该模式串中相应长度的字符子串,并将截取的字符子串添加至所述前缀集中;根据预设算法为所述前缀集构造AC自动机;以及
所述方法,包括:
针对待匹配的文本串,将当前滑动窗口所包含的字符依次输入所述AC自动机中得到至少一个初次匹配位置;
针对得到的每一初次匹配位置,如果该初次匹配位置匹配的字符串长度小于所述预设长度,则将该初次匹配位置和匹配的字符串添加至匹配结果集中;如果该初次匹配位置匹配的字符串长度等于所述预设长度,则将该初次匹配位置加入到二次匹配入口集合中;以及
针对二次匹配入口集合中包含的每一入口位置分别进行二次匹配,并将进行二次匹配的入口位置和匹配的字符串添加至所述匹配结果集中。
本发明实施例提供一种多模式字符串匹配装置,包括:
模式串预处理单元,用于将模式串中具有前缀包含关系的模式串压缩到一个模式串中得到压缩模式集;针对所述压缩模式集中的每一模式串,如果其字符长度不超过预设长度,则将该模式串添加至前缀集中,如果其字符长度超过所述预设长度,则根据所述预设长度,截取该模式串中相应长度的字符子串,并将截取的字符子串添加至所述前缀集中;根据预设算法为所述前缀集构造AC自动机;
初次匹配位置确定单元,用于针对待匹配的文本串,将当前滑动窗口所包含的字符依次输入所述AC自动机中得到至少一个初次匹配位置;
第一匹配单元,用于针对得到的每一初次匹配位置,如果该初次匹配位置匹配的字符串长度小于所述预设长度,则将该初次匹配位置和匹配的字符串添加至匹配结果集中;
二次匹配位置确定单元,用于针对得到的每一初次匹配位置,如果该初次匹配位置匹配的字符串长度等于所述预设长度,则将该初次匹配位置加入到二次匹配入口集合中;
第二匹配单元,针对二次匹配入口集合中包含的每一入口位置分别进行二次匹配,并将进行二次匹配的入口位置和匹配的字符串添加至所述匹配结果集中。
本发明实施例提供的多模式字符串匹配方法和装置,使用由模式串前缀所构造的AC自动机对文本串的匹配入口进行快速筛选,过滤掉文本串中那些不可能匹配任何模式串的位置,与现有技术中需要将文本串中的每个字符都作为匹配入口进行匹配方法相比,提高了匹配效率;同时,所有较短的模式串都将在初次匹配阶段中被匹配,进一步提升了匹配速度。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本发明实施例中,多模式字符串匹配方法的实施流程示意图;
图2为本发明实施例中,多模式字符串匹配装置的结构示意图。
具体实施方式
为了提高多模式字符串匹配效率和匹配速度,本发明实施例提供了一种多模式字符串匹配方法和装置。
以下结合说明书附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明,并且在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
本发明实施例针对现有的多模式字符串匹配方法在处理海量模式串时的不足,提出了一种多模式字符串匹配方法。通过将模式串按首字符进行分类压缩、提取模式串前缀构造AC自动机对文本串匹配入口进行筛选、以及对平衡二叉搜索树进行分组查找等方法来实现模式串的高效匹配,以解决现有多模式字符串匹配方法内存消耗高、预处理时间长和匹配效率低等缺点。
如图1所示,为本发明实施例提供的多模式字符串匹配方法的实施流程示意图,可以包括以下步骤:
S11、对模式串进行预处理。
将模式串中具有前缀包含关系的模式串压缩到一个模式串中得到压缩模式集;针对所述压缩模式集中的每一模式串,如果其字符长度不超过预设长度,则将该模式串添加至前缀集中,如果其字符长度超过所述预设长度,则根据所述预设长度,截取该模式串中相应长度的字符子串,并将截取的字符子串添加至所述前缀集中;根据预设算法为所述前缀集构造AC自动机。
S12、针对待匹配的文本串,将当前滑动窗口所包含的字符依次输入所述AC自动机中得到至少一个初次匹配位置。
初始时,可以预先设置滑动窗口的大小,较佳的,滑动窗口可以设置为最长模式串包含的字符数量的整数倍,例如,滑动窗口长度(即滑动窗口包含的字符数量)可以为最长模式串长度(即最长模式串包含字符数量)的20倍。
S13、针对得到的每一初次匹配位置,如果该初次匹配位置匹配的字符串长度小于所述预设长度,则将该初次匹配位置和匹配的字符串添加至匹配结果集中;如果该初次匹配位置匹配的字符串长度等于所述预设长度,则将该初次匹配位置加入到二次匹配入口集合中。
S14、针对二次匹配入口集合中包含的每一入口位置分别进行二次匹配,并将进行二次匹配的入口位置和匹配的字符串添加至所述匹配结果集中。
应当理解,在执行步骤S11之前,还需要输入数据,具体的,可以将模式集文件和待处理文本串文件读取到计算机硬盘中,并将模式集文件从计算机硬盘读取到计算机内存中。较佳的,模式集中的模式串可以按行存储,以换行符为分隔符,每行代表一个模式串。
基于此,较佳的,在步骤11中,在对模式串进行预处理时,可以按照字典序,对读取的模式集文件中的所有模式串排序;逐个读取排序后的模式串,为具有相同首字符的模式串构造前缀树,然后根据构造的前缀树,将其中具有前缀包含关系的模式串压缩到一个模式串得到压缩模式集。更佳的,每当具有相同首字符的模式串完成压缩后,即可释放掉其所使用的前缀树。
完成模式串的压缩后,需要构造初次匹配所用的前缀AC自动机。首先构造前缀集:对压缩模式集中的每一个模式串P,若|P|<L,则将P加入前缀集中,同时从压缩模式集中删除P;否则,将P的长为L的前缀加入到前缀集中。其中|P|表示模式串P所包含的字符数量,本发明中还可称之为模式串P的长度,其中,L为预设长度,其取值为整数,较佳的,具体实施时,L可以取5到8之间的整数。在构造出前缀集之后,可以为构造的前缀集使用Aho-Corasick算法构造AC自动机。至此,完成了模式串中长度不大于L的模式串的AC自动机的构造。利用构造的AC自动机,可以完成长度小于L的模式串的匹配。具体的,可以将当前滑动窗口内所包含的字符依次输入所构造的AC自动机中,检查AC自动机产生的每一个初次匹配位置,若该初次匹配位置匹配的是长度小于L的字符串,则将该初次匹配位置和匹配的字符串加入到最终的输出结果集中;若该初次匹配位置匹配的是长度等于L的字符串,则将该初次匹配位置加入到二次匹配入口位置集合中,为了便于描述,本发明实施例中将二次匹配入口位置集合中包含的初次匹配位置称为入口位置。
至此,针对当前滑动窗口,完成了长度小于L的模式串的匹配。对于长度大于L的模式串,本发明实施例中,基于初次匹配得到的二次匹配入口位置集合,可以按照以下方法进行二次匹配:使用平衡二叉搜索树哈希表实现平衡二叉搜索树拆分。具体的,创建长度为预设长度的哈希表,例如,创建长度为10000的哈希表。通过特定的哈希函数,计算模式串压缩得到的压缩模式集中每一个模式串的哈希值;将具有相同哈希值的模式串按照字典序关系构造平衡二叉搜索树,并与哈希表中下标为对应哈希值的项关联。
较佳的,本发明实施例中使用的哈希函数可以为:
Hash(s)表示字符串S对应的哈希值;
|S|表示字符串S包含的字符数量;
S[i]表示字符串S的第i个字符,i=1,2,3…,n-1;
l为预设值;
R0,R1,R2,…,Rn-1为预设的散列值;
K为哈希表的长度。
以l取值为4,K为10000为例,则哈希函数可以为:
需要说明的是,具体实施时,散列值R1,R2,…,Rn-1可以为随机值,较佳的,相邻两个散列值之间可以间隔一定的距离值,该距离值可以根据经验值进行设定,可以通过一定的计算函数计算得到,本发明实施例对此不进行限定。
较佳的,具体实施时,上述的平衡二叉搜索树可以使用数组实现。
基于此,步骤S14中,可以按照以下步骤进行二次匹配:
步骤一、针对二次匹配入口集合中包含的每一入口位置,在待处理的文本串中截取以该入口位置为起点,以最长模式串包含的字符数量为长度的文本子串。
步骤二、利用上述的特定哈希函数确定截取的文本子串的哈希值。
步骤三、从哈希表中查找截取的文本子串的哈希值对应的平衡二叉搜索树。
步骤四、利用截取的文本子串遍历查找到的平衡二叉搜索树,如果截取的文本子串成功匹配到任一模式串,则将该入口位置和匹配到的模式串加入到匹配结果集中。
至此,完成了当前滑动窗口对于长度大于等于L的模式串的匹配。
具体实施时,若滑动窗口已经移动至文本串的末尾,则算法结束;否则,根据匹配情况将滑动窗口向后移动适当距离,开始进行初次匹配的步骤。
为了更好的理解本发明实施例,以下结合具体的实施例对本发明实施例的实施过程进行详细说明,可以包括以下步骤:
步骤1、数据输入,具体包括:
步骤1a)将待匹配的文本文件和模式集文件输入到计算机硬盘;
步骤1b)将模式集文件从计算机硬盘读取到计算机内存中。
步骤2、对模式集进行压缩,具体包括:
步骤2a)对模式集中的模式串按照“字典序”从小到大进行排序;
步骤2b)按顺序遍历未处理的模式串,读取出具有相同首字符的模式串生成模式串(子)集合subset;
步骤2c)基于subset构造前缀树,
定义前缀树的每个节点包括3个域:①Char:保存对应字符;②Tag:标记该节点是否对应于某个模式串的末尾字符。若Tag=1,则表示该节点对应某个模式串的末尾字符;若Tag=0,则不是;③指向孩子节点的指针。基于此,步骤2c)可以按照以下过程实施:
步骤2c1)创建根节点,创建指向前缀树节点的指针node,创建索引变量i。
步骤2c2)若subset中还有未处理的模式串,则读取subset中下一个未处理的模式串P,令node指向前缀树的根节点,令i为0;否则,结束过程。
步骤2c3)若存在node的孩子节点,其Char=P[i],则将node指向该孩子节点;否则,为node创建一个新的孩子节点,将其Char设为P[i],Tag设为0,然后将node指向该孩子节点。
步骤2c4)将i增加1。若i≠|P|,则转到步骤2c3);否则,将node所指节点的tag设为1,转到步骤2c2)。
步骤2d)遍历步骤2c)所构造的前缀树,实现对subset的压缩。
具体实施时,步骤2d)可以按照以下过程实施:
步骤2d1)创建二进制标记向量vector,初始为空。创建字符串base_pattern,初始为空。(通过向vector和base_pattern的末尾添加元素,vector和base_pattern会不断的增长。)创建指向前缀树节点的指针node,初始指向前缀树的根节点。
步骤2d2)若node所指节点是叶子节点,则向vector末尾添加1,并将node节点中的Char字符添加到base_pattern的末尾,然后将二元组(base_pattern,vector)作为元素,加入到压缩模式集中,结束本次递归调用;否则,进入步骤2d3)。
步骤2d3)若node所指节点的Tag=1,则将1添加到vector末尾,同时将Tag置为0;否则,将0添加到vector的末尾。将node节点中的Char字符添加到base_pattern的末尾。
步骤2d4)依次对node的孩子节点,递归调用步骤2d2)。
调用时的参数为:node指向待处理的孩子节点,vector和base_pattern分别为当前的vector和base_pattern的一份副本。
步骤2e)释放步骤步骤2c)所构造前缀树所占用的内存空间。
步骤2f)若模式集中还有未处理的模式串,则转到步骤2b);否则,步骤2结束。
步骤3,构造前缀集,并为前缀集构造前缀AC自动机。
具体的,步骤3可以按照以下过程实施:
步骤3a)令L取5到8之间的整数。检查步骤2中所产生的压缩模式集中的每一个(base_pattern,vector)二元组,若|base_pattern|<L,则将base_pattern加入压缩前缀集prefix_set中,同时从压缩模式集中删除(base_pattern,vector);否则,提取base_pattern长为L的前缀,将其加入到prefix_set中。
步骤3b)使用Aho-Corasick算法为prefix_set构造相应的AC自动机。
步骤4,基于压缩模式集构造平衡二叉树哈希表。
较佳的,步骤4可以按照以下过程实施:
步骤4a)创建长度为10000的数组:hash_table_1,其元素为(base_pattern,vector)二元组的集合,每个元素初始化为空集。遍历压缩模式集,对其中每一个二元组,使用如下哈希函数计算其base_pattern的哈希值:
其中S为base_pattern。若Hash(base_pattern)=value,则将该二元组放入hash_table_1[value]项中。
步骤4b)创建长度为10000的数组:hash_table_2,其元素为平衡二叉搜索树,每个元素初始化为空。创建索引变量i,令i取0~9999,依次遍历hash_table_1[i]。若hash_table_1[i]非空,则按如下步骤构建平衡二叉搜索树,平衡二叉搜索树由数组tree实现,具体包括:
步骤4b1)假设hash_table_1[i]中包含N个二元组,对这N个二元组,根据其base_pattern的字典序大小,由小到大进行排序。
步骤4b2)创建长为N的数组tuples,其元素为二元组,将步骤4b1)中的排好序的二元组依次放入tuples的对应项中。创建数组tuples的索引变量tuple_index,初始为0。
步骤4b3)创建长为N+1的数组tree,其元素为(base_pattern,vector)二元组;创建数组tree的索引变量tree_index,tree_index指向二叉树的当前节点,初始为1。创建指向左右孩子的索引l_child,r_child。
步骤4b4)以(tuples,tuples_index,tree,tree_index)为输入参数,设置当前节点的左孩子节点的索引l_child为2*tree_index;设置当前节点的右孩子节点的索引r_child为2*tree_index+1。
步骤4b5)若l_child<N,则以(tuples,tuples_index,tree,l_child,tuples_index)为参数,递归调用步骤4b4);否则,执行步骤4b6);
步骤4b6)将tuples[tuple_index]赋值给tree[tree_index],并将tuple_index增加1;
步骤4b7)若r_child<N,则以(tuples,tuples_index,tree,r_child)为输入参数,递归调用步骤4b4);否则,将tree关联到hash_table_2[i]然后退出;
步骤5、使用前缀AC自动机和平衡二叉搜索树哈希表进行文本串匹配。
具体的,可以包括以下步骤:
步骤5a)假设文本串长度为M,在文本串上创建大小为window_size字节的虚拟滑动窗口,其window_size=20*max_pat_len中,max_pat_len为模式集中最长模式串长度。用区间[left,right]表示该滑动窗口,left表示窗口的左端点,right是窗口的右端点,初始时left=1,right=window_size。
步骤5b)使用步骤3中构造的前缀AC自动机进行初次匹配。
将[left,right]内所包含的字符依次输入步骤3中所构造的前缀AC自动机,检查AC自动机产生的每一个初次匹配位置,若该初次匹配位置匹配的是长度小于L的字符串,则将该初次匹配位置和匹配的字符串加入到最终的输出结果集合results中;若该初次匹配位置匹配的是长度等于L的字符串,则将该初次匹配位置加入到二次匹配入口集合entrances中。令变量last_pos表示entrances中最大的位置。
步骤5c)使用步骤4构造的平衡二叉搜索树哈希表进行二次匹配。
具体的,可以按照以下过程实施:
创建变量last_match_pos记录所有匹配成功的位置中最后的一处。对entrances中的每一个入口位置pos,执行以下步骤:
步骤5c1)在文本串中截取以pos为起始位置,以min(max_pat_len,buf_size-pos+1)为长度的子串S,并计算S的哈希值:Hash[S]。其中,buffer_size是指子串S的长度,即子串S包含的字符数量。
步骤5c2)创建指向平衡二叉搜索树节点的指针node,node初始指向hash_table_2[Hash[S]]所关联的平衡二叉搜索树的根节点。
步骤5c3)设node节点包含的二元组为(base_pattern,vector),创建索引变量i,用于遍历vector中的每一位:若vector[i]=1,则从base_patttern中截取长度为i+1的前缀。若该前缀和S匹配,则将(pos,S)加入到最终结果集results中,将last_match_pos设为pos。
步骤5c4)如果S的字典序小于base_pattern,则将node指向其左孩子节点;否则,将node指向其右孩子节点。
步骤5c5)如果node节点为空,则结束;否则,转到步骤5c3);
步骤5d)若results中有新的元素加入,则令left为left+buffer_size–max_pat_len;否则,若last_match_pos=last_pos,则令left为m+1;若last_match_pos≠last_pos,则令left为m,最后令right为min(M,left+window_size)。其中,m是指子串S匹配完的最后的位置,即最后一个字符的位置。
步骤5e)清空entrances集合。若right<M,则转到步骤5b);否则,将[left,right]中的每个位置都加入到entrances集合,执行步骤5c)后退出。
本发明实施例提供的多模式字符串匹配方法,在对模式集进行预处理时,按照首字符对模式串进行分类,每次仅对具有相同首字符的模式串进行预处理,克服了现有技术需要对整个模式集进行预处理从而造成内存占用量过大的缺陷,使得预处理过程的内存消耗明显降低;其次,本发明实施例中使用由模式串前缀所构造的AC自动机对文本串的匹配入口进行快速筛选,过滤掉文本串中那些不可能匹配任何模式串的位置,克服了现有方法需要将文本串的中每个字符都作为匹配入口进行匹配缺陷,提高了匹配效率。同时,所有较短的模式串都将在初次匹配阶段中被匹配,进一步提升了匹配速度;再次,本发明实施例中,在预处理步骤中,对模式串集合按照哈希值进行分组,并对每个分组构造平衡二叉搜索树,缩小了平衡二叉搜索树的规模。在匹配阶段,仅需要根据待匹配字符串的哈希值从哈希表中找到对应的平衡二叉搜索树进行搜索,克服了现有方法需要遍历由整个模式集所构建的平衡二叉搜索树的缺陷,使得匹配速度得以提升。
基于同一发明构思,本发明实施例中还提供了一种多模式字符串匹配装置,由于该装置解决问题的原理与多模式字符串匹配方法相似,因此该装置的实施可以参见方法的实施,重复之处不再赘述。
如图2所示,为本发明实施例提供的多模式字符串匹配装置的结构示意图,可以包括:
模式串预处理单元21,用于将模式串中具有前缀包含关系的模式串压缩到一个模式串中得到压缩模式集;针对所述压缩模式集中的每一模式串,如果其字符长度不超过预设长度,则将该模式串添加至前缀集中,如果其字符长度超过所述预设长度,则根据所述预设长度,截取该模式串中相应长度的字符子串,并将截取的字符子串添加至所述前缀集中;根据预设算法为所述前缀集构造AC自动机;
初次匹配位置确定单元22,用于针对待匹配的文本串,将当前滑动窗口所包含的字符依次输入所述AC自动机中得到至少一个初次匹配位置;
第一匹配单元23,用于针对得到的每一初次匹配位置,如果该初次匹配位置匹配的字符串长度小于所述预设长度,则将该初次匹配位置和匹配的字符串添加至匹配结果集中;
二次匹配位置确定单元24,用于针对得到的每一初次匹配位置,如果该初次匹配位置匹配的字符串长度等于所述预设长度,则将该初次匹配位置加入到二次匹配入口集合中;
第二匹配单元25,针对二次匹配入口集合中包含的每一入口位置分别进行二次匹配,并将进行二次匹配的入口位置和匹配的字符串添加至所述匹配结果集中。
较佳的,本发明实施例提供的多模式字符串匹配装置,还可以包括第一确定单元和关联单元,其中:
所述第一确定单元,用于利用预设的哈希函数确定所述压缩模式集中包含的每一模式串对应的第一哈希值;
所述关联单元,用于将具有相同哈希值的模式串按照字典序关系,构造平衡二叉搜索树,并与哈希表中对应哈希值的项关联;
所述第二匹配单元25,具体用于针对二次匹配入口集合中包含的每一入口位置,在所述文本串中截取以该入口位置为起点,以最长模式串包含的字符数量为长度的文本子串;利用所述哈希函数确定所述文本子串的第二哈希值;从所述哈希表中查找所述第二哈希值对应的平衡二叉搜索树;利用所述文本子串遍历查找到的平衡二叉搜索树,如果所述文本子串成功匹配到任一模式串,则将该入口位置和匹配到的模式串加入到所述匹配结果集中。
较佳的本发明实施例使用的哈希函数可以为:
Hash(s)表示字符串S对应的哈希值;|S|表示字符串S包含的字符数量;
S[i]表示字符串S的第i个字符,i=1,2,3…,n-1;l为预设值;R0,R1,R2,…,Rn-1为预设的散列值;K为哈希表的长度。
可选的,本发明实施例提供的多模式字符串匹配装置,还包括排序单元,其中:
所述排序单元,用于在所述模式串预处理单元将模式串中具有前缀包含关系的模式串压缩到一个模式串中得到压缩模式集之前,将所有模式串按照字典序进行排序;
所述模式串预处理单元21,具体用于为具有相同首字符的模式串构造前缀树;根据构造的前缀树,将具有前缀包含关系的模式串压缩到一个模式串中得到压缩模式集。
可选的,本发明实施例提供的多模式字符串匹配装置,还包括:
释放单元,用于在所述模式串预处理单元根据构造的前缀树,将具有前缀包含关系的模式串压缩到一个模式串中之后,释放所述压缩模式集包含的模式串所使用的前缀树。
为了描述的方便,以上各部分按照功能划分为各模块(或单元)分别描述。当然,在实施本发明时可以把各模块(或单元)的功能在同一个或多个软件或硬件中实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (11)
1.一种多模式字符串匹配方法,其特征在于,将模式串中具有前缀包含关系的模式串压缩到一个模式串中得到压缩模式集;针对所述压缩模式集中的每一模式串,如果其字符长度不超过预设长度,则将该模式串添加至前缀集中,如果其字符长度超过所述预设长度,则根据所述预设长度,截取该模式串中相应长度的字符子串,并将截取的字符子串添加至所述前缀集中;根据预设算法为所述前缀集构造AC自动机;以及
所述方法,包括:
针对待匹配的文本串,将当前滑动窗口所包含的字符依次输入所述AC自动机中得到至少一个初次匹配位置;
针对得到的每一初次匹配位置,如果该初次匹配位置匹配的字符串长度小于所述预设长度,则将该初次匹配位置和匹配的字符串添加至匹配结果集中;如果该初次匹配位置匹配的字符串长度等于所述预设长度,则将该初次匹配位置加入到二次匹配入口集合中;以及
针对二次匹配入口集合中包含的每一入口位置分别进行二次匹配,并将进行二次匹配的入口位置和匹配的字符串添加至所述匹配结果集中。
2.如权利要求1所述的方法,其特征在于,还包括:
利用预设的哈希函数确定所述压缩模式集中包含的每一模式串对应的第一哈希值;
将具有相同哈希值的模式串按照字典序关系,构造平衡二叉搜索树,并与哈希表中对应哈希值的项关联;以及
针对二次匹配入口集合中包含的每一入口位置分别进行二次匹配,并将进行二次匹配的入口位置和匹配的字符串添加至所述匹配结果集中,具体包括:
针对二次匹配入口集合中包含的每一入口位置,在所述文本串中截取以该入口位置为起点,以最长模式串包含的字符数量为长度的文本子串;
利用所述哈希函数确定所述文本子串的第二哈希值;
从所述哈希表中查找所述第二哈希值对应的平衡二叉搜索树;
利用所述文本子串遍历查找到的平衡二叉搜索树,如果所述文本子串成功匹配到任一模式串,则将该入口位置和匹配到的模式串加入到所述匹配结果集中。
4.如权利要求1、2或3所述的方法,其特征在于,将模式串中具有前缀包含关系的模式串压缩到一个模式串中得到压缩模式集之前,还包括:
将所有模式串按照字典序进行排序;以及
将模式串中具有前缀包含关系的模式串压缩到一个模式串得到压缩模式集中,具体包括:
为具有相同首字符的模式串构造前缀树;
根据构造的前缀树,将具有前缀包含关系的模式串压缩到一个模式串中得到压缩模式集。
5.如权利要求4所述的方法,其特征在于,根据构造的前缀树,将具有前缀包含关系的模式串压缩到一个模式串中之后,还包括:
释放所述压缩模式集包含的模式串所使用的前缀树。
6.如权利要求1所述的方法,其特征在于,所述滑动窗口的长度为最长模式串包含的字符数量的整数倍。
7.一种多模式字符串匹配装置,其特征在于,包括:
模式串预处理单元,用于将模式串中具有前缀包含关系的模式串压缩到一个模式串中得到压缩模式集;针对所述压缩模式集中的每一模式串,如果其字符长度不超过预设长度,则将该模式串添加至前缀集中,如果其字符长度超过所述预设长度,则根据所述预设长度,截取该模式串中相应长度的字符子串,并将截取的字符子串添加至所述前缀集中;根据预设算法为所述前缀集构造AC自动机;
初次匹配位置确定单元,用于针对待匹配的文本串,将当前滑动窗口所包含的字符依次输入所述AC自动机中得到至少一个初次匹配位置;
第一匹配单元,用于针对得到的每一初次匹配位置,如果该初次匹配位置匹配的字符串长度小于所述预设长度,则将该初次匹配位置和匹配的字符串添加至匹配结果集中;
二次匹配位置确定单元,用于针对得到的每一初次匹配位置,如果该初次匹配位置匹配的字符串长度等于所述预设长度,则将该初次匹配位置加入到二次匹配入口集合中;
第二匹配单元,针对二次匹配入口集合中包含的每一入口位置分别进行二次匹配,并将进行二次匹配的入口位置和匹配的字符串添加至所述匹配结果集中。
8.如权利要求7所述的装置,其特征在于,还包括第一确定单元和关联单元,其中:
所述第一确定单元,用于利用预设的哈希函数确定所述压缩模式集中包含的每一模式串对应的第一哈希值;
所述关联单元,用于将具有相同哈希值的模式串按照字典序关系,构造平衡二叉搜索树,并与哈希表中对应哈希值的项关联;
所述第二匹配单元,具体用于针对二次匹配入口集合中包含的每一入口位置,在所述文本串中截取以该入口位置为起点,以最长模式串包含的字符数量为长度的文本子串;利用所述哈希函数确定所述文本子串的第二哈希值;从所述哈希表中查找所述第二哈希值对应的平衡二叉搜索树;利用所述文本子串遍历查找到的平衡二叉搜索树,如果所述文本子串成功匹配到任一模式串,则将该入口位置和匹配到的模式串加入到所述匹配结果集中。
10.如权利要求7、8或9所述的装置,其特征在于,还包括排序单元,其中:
所述排序单元,用于在所述模式串预处理单元将模式串中具有前缀包含关系的模式串压缩到一个模式串中得到压缩模式集之前,将所有模式串按照字典序进行排序;
所述模式串预处理单元,具体用于为具有相同首字符的模式串构造前缀树;根据构造的前缀树,将具有前缀包含关系的模式串压缩到一个模式串中得到压缩模式集。
11.如权利要求10所述的装置,其特征在于,还包括:
释放单元,用于在所述模式串预处理单元根据构造的前缀树,将具有前缀包含关系的模式串压缩到一个模式串中之后,释放所述压缩模式集包含的模式串所使用的前缀树。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610017565.XA CN106959962B (zh) | 2016-01-12 | 2016-01-12 | 一种多模式字符串匹配方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610017565.XA CN106959962B (zh) | 2016-01-12 | 2016-01-12 | 一种多模式字符串匹配方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106959962A CN106959962A (zh) | 2017-07-18 |
CN106959962B true CN106959962B (zh) | 2019-10-15 |
Family
ID=59481371
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610017565.XA Active CN106959962B (zh) | 2016-01-12 | 2016-01-12 | 一种多模式字符串匹配方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106959962B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108710671B (zh) * | 2018-05-16 | 2020-06-05 | 北京金堤科技有限公司 | 文本中公司名称的提取方法及装置 |
CN109271419B (zh) * | 2018-09-03 | 2021-06-22 | 河北工业大学 | 一种无间隙约束的在线串匹配方法 |
CN111176704B (zh) * | 2018-11-09 | 2022-08-23 | 中移(杭州)信息技术有限公司 | 一种差分包文件生成方法、中断恢复方法和相关装置 |
CN110321346B (zh) * | 2019-05-28 | 2021-09-21 | 中国科学院计算技术研究所 | 一种字符串散列表实现方法和系统 |
CN110674364B (zh) * | 2019-08-30 | 2021-11-23 | 北京浩瀚深度信息技术股份有限公司 | 一种利用fpga实现的滑动字符串匹配的方法 |
CN111159362B (zh) * | 2019-12-31 | 2024-04-26 | 奇安信科技集团股份有限公司 | 文本匹配处理方法及装置 |
CN112163007B (zh) * | 2020-09-28 | 2023-11-17 | 惠州市德赛西威智能交通技术研究院有限公司 | 一种快速匹配查找联系人的方法及系统 |
CN112559818A (zh) * | 2020-12-15 | 2021-03-26 | 平安国际智慧城市科技股份有限公司 | 一种字符串匹配方法、装置、设备及存储介质 |
CN112784125B (zh) * | 2021-01-14 | 2024-07-05 | 辽宁工程技术大学 | 一种输入信息的模式识别方法和装置 |
CN117113436B (zh) * | 2023-10-16 | 2024-01-26 | 中电科大数据研究院有限公司 | 一种基于区块链的数据可信确权方法和装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103186640A (zh) * | 2011-12-31 | 2013-07-03 | 百度在线网络技术(北京)有限公司 | 采用基于ac算法的正则匹配的流量过滤方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI482083B (zh) * | 2008-12-15 | 2015-04-21 | Univ Nat Taiwan | 二階段式正規表示式比對處理方法及系統 |
-
2016
- 2016-01-12 CN CN201610017565.XA patent/CN106959962B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103186640A (zh) * | 2011-12-31 | 2013-07-03 | 百度在线网络技术(北京)有限公司 | 采用基于ac算法的正则匹配的流量过滤方法及装置 |
Non-Patent Citations (2)
Title |
---|
AC多模式匹配算法的优化与应用;孙强 等;《中国科技论文在线》;20110131;第6卷(第1期);45-48 * |
Robust and Scalable String Pattern Matching for Deep Packet Inspection on Multicore Processors;Yi-Hua E. Yang et al;《IEEE Transactions on Parallel and Distributed Systems》;20131130;第24卷(第11期);2283-2292 * |
Also Published As
Publication number | Publication date |
---|---|
CN106959962A (zh) | 2017-07-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106959962B (zh) | 一种多模式字符串匹配方法和装置 | |
CN109445834B (zh) | 基于抽象语法树的程序代码相似性快速比较方法 | |
US8838551B2 (en) | Multi-level database compression | |
CN106033416A (zh) | 一种字符串处理方法及装置 | |
CN107784110B (zh) | 一种索引建立方法及装置 | |
US7526497B2 (en) | Database retrieval apparatus, retrieval method, storage medium, and program | |
KR970066946A (ko) | 정보검색 방법, 정보검색 장치 및 정보검색 프로그램을 격납하는 매체 | |
CN102867049B (zh) | 一种基于单词查找树实现的汉语拼音快速分词方法 | |
US10241979B2 (en) | Accelerated detection of matching patterns | |
CN105589894B (zh) | 文档索引建立方法和装置、文档检索方法和装置 | |
CN107168966B (zh) | 一种搜索引擎索引构建方法及装置 | |
CN111368529B (zh) | 基于边缘计算的移动终端敏感词识别方法、装置及系统 | |
CN106708798A (zh) | 一种字符串切分方法及装置 | |
CN108319518A (zh) | 基于循环神经网络的文件碎片分类方法及装置 | |
CN107220325A (zh) | 一种基于卷积神经网络的app相似图标检索方法和系统 | |
CN112052413B (zh) | Url模糊匹配方法、装置和系统 | |
CN108628907A (zh) | 一种用于基于Aho-Corasick的Trie树多关键词匹配的方法 | |
US20210157833A1 (en) | Visual image search using text-based search engines | |
WO2015025467A1 (ja) | 文字列検索装置、文字列検索方法および文字列検索プログラム | |
CN112688881B (zh) | 一种基于大小域规则划分的网络数据包分类方法 | |
CN106295252A (zh) | 用于基因产品的检索方法 | |
CN108920483A (zh) | 基于后缀数组的字符串快速匹配方法 | |
CN105426490B (zh) | 一种基于树形结构的索引方法 | |
CN106933818A (zh) | 一种快速的多关键字文本匹配方法及装置 | |
US20130226941A1 (en) | System and method for classifying signals using the bloom filter |
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 |