CN106599097A - 海量特征串集合的匹配方法和装置 - Google Patents
海量特征串集合的匹配方法和装置 Download PDFInfo
- Publication number
- CN106599097A CN106599097A CN201611059646.2A CN201611059646A CN106599097A CN 106599097 A CN106599097 A CN 106599097A CN 201611059646 A CN201611059646 A CN 201611059646A CN 106599097 A CN106599097 A CN 106599097A
- Authority
- CN
- China
- Prior art keywords
- feature
- character block
- matched
- length
- character
- 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.)
- Granted
Links
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
本发明提出一种海量特征串集合的匹配方法和装置,该方法包括根据特征串集合中的特征串所包含字符个数确定匹配窗口长度并为当前待匹配数据设置初始偏移值;根据初始偏移值为起点对当前待匹配数据进行偏移并定位,获取匹配窗口长度内以匹配窗口末端为终点,长度为预设第一长度的字符块并作为第一字符块;在第一字符块为特征串集合的子特征串时,获取匹配窗口长度内以匹配窗口始端为起始,长度为预设第二长度的字符块并作为第二字符块;计算第二字符块的转换值并读取与转换值对应的位向量作为当前匹配向量;根据当前匹配向量对当前待匹配数据进行特征串匹配。该方法能够有效利用位向量掩码表的空间,降低过滤通过率,提升匹配速度。
Description
技术领域
本发明涉及互联网技术领域,尤其涉及一种海量特征串集合的匹配方法和装置。
背景技术
模式匹配是计算机领域重要研究方向之一,用于从目标串中发现特征串。随着互联网技术的高速发展,模式匹配被广泛地应用于网络安全、信息检索,以及生物医学等领域。
模式匹配是指在文本T=t1t2...tn中找出某个给定的特征串集合P={p1,p2,...,pr}的所有出现位置,其中T和pi(1≤i≤r)是在有限字符表Σ上的字符序列。随着网络和生物学的发展,在匹配更多的特征串条目的同时,需要保持有较高的处理速度,这就对多模式匹配的处理能力提出了更高的要求。然而在很多现有的多模式匹配算法中,当特征串规模超过1万时,由于其处理能力的下降,已经无法满足需求,因而基于位并行与q-gram技术的多模式匹配方法应运而生。此种方法在数量10万以下规模的特征串匹配过程中能够取得较好的效果。
基于位并行技术的多模式匹配算法,例如Shift-And/Or算法、BNDM算法,其基本思想是:将特征串集合与文本串的匹配状态用位向量存储,匹配过程就是用位操作更新位向量的过程。由于Shift-And和Shift-Or算法的原理基本相同,以下着重介绍Shift-And算法和BNDM算法的原理。
(1)Shift-And算法维护一个字符串的集合,集合中的每个字符串既是特征串p的前缀,同时也是已读入文本的后缀。每读入一个新的文本字符,该算法采用位并行的方法更新该集合。该集合用一个位掩码D=dm...d1来表示。D的第j位被置为1,当且仅当p1...pj是t1...ti的后缀。
Shift-And算法首先构造一个表B,记录字母表中每个字符的位掩码bm...b1。如果pj=c,掩码B[c]的第j位被置为1,否则为0。首先置D=0m,对于每个新读入的文本字符ti+1,用如下公式对D进行更新:
Di+1←((Di<<1)|0m+11)&B[ti+1]
上面0m表示有连续m个0,例如,用031来表示0001。在匹配时,逐个扫描文本字符并更新向量D,测试是否匹配成功的掩码为10m-1。即当Di&10m-1≠0m时,在文本位置i处匹配成功。
(2)BNDM(Backward Nondeterministic Dawg Matching,向后非确定性匹配)算法的搜索与BDM算法相同,但它使用位并行来识别特征串。在当前搜索窗口内,设已读入的字符串为u,BNDM算法维护一个集合,记录u在p中所有出现位置。同Shift-And算法一样,该集合可以用一个位向量D来表示。如果特征串p1...pj+|u|-1等于u,那么D的第m-j+1位是1,表示p的位置j是一个活动状态。
同Shift-And算法一样,BNDM算法预先计算一张表B,表B用一个位掩码记录了该字符在p中出现的位置。对于每个新读入的文本字符ti,利用如下公式,可以从D更新到D',其中,D'←(D<<1)&B[ti],初始化D=1m,且需要用额外变量last保存特征串前缀的最左位置。
为了达到较好的匹配性能,很多匹配算法需要一个相对较大的字符集。使用q-gram的出发点就是使字符集变得更大。q-gram是从文本串中提取长度为q的子串,其方法为采用长度为q的窗口从文本串的开始依次向后移动,每次向后移动的字符个数称为滑动距离,每次从窗口中提取1个q-gram,并以该q-gram的第1个字符在文本串T中的偏移量作为其地址,拆分方式为<q,d>拆分。当d=1时,相邻的q-gram之间地址差为1,且重叠q-1个字符,称为连续重叠拆分;当1<d<q时,相邻q-gram间地址差为d,且重叠,称为重叠拆分;当d=q时,相邻q-gram间连接但不重叠,称为连接拆分;当d>q时,相邻q-gram间的地址差为d,且不重叠、不连接,称为不重叠不连接拆分。
位并行算法在进行多模精确匹配时,其待匹配特征串长度之和最多不能超过几个机器字节的长度,否则无法利用位并行的特点。然而,位并行技术可以很容易扩展为近似匹配。例如有三个特征串,分别为:‘abcd’,‘pony’,‘abnh’,如果匹配时在第一个位置接收{a,p},第二个位置接收{b,o},第三个位置接收{c,n},第四个位置接收{d,h,y},匹配这样的一类字符很容易利用位并行类方法来进行扩展。预处理阶段只需要修改为:如果特征串集合中的任意一个特征串的位置i包含相应字符时,掩码表的对应行的第i位被设置为1,否则设置为0。这样,位并行算法最后命中时,并不是精确命中了特征串,而是命中了一类特征串,如果需要精确命中,最后还需要进行最终验证。这里,称用位并行算法进行近似匹配的阶段称为过滤阶段。当待匹配数据通过过滤阶段比例不大时,后面加入快速精确确认阶段,算法整体匹配性能依然很高。
为了实现快速的匹配,采用SOG算法或者BG算法来保证多模式匹配的执行效率。
SOG算法是使用q-gram将Shift-Or算法扩展成基于过滤技术的多模式匹配算法。该算法是以牺牲精确匹配为前提,将“确认能匹配”改成“确认不能匹配”,以一次相对快速的匹配过程,过滤掉大量不能成功匹配的数据,以保证算法的执行效率。对于少量过滤通过的情况,配合其他算法,再针对数据中的特定的位置进行精确匹配的校验。对于大多数匹配过程,最终不会产生命中,如果也没有误报产生,那么过滤算法的性能就等同于整个模式匹配过程的性能。
具体的方法是,首先在算法的预处理阶段,以特征串集合中的每个特征串为基础,构建Shift-Or算法的掩码表B,然后将多个掩码表B,以每个字符位掩码为单位进行或运算,进而合并成为一张掩码表,后续的匹配过程不变。不同在于,当D[i]&10m-1≠0m时,在文本位置i处不再表示匹配成功,而是有可能会发生匹配,需要使用其他能够逐个字符比较的方法进行再次确认。
SOG算法需要将多个位向量进行或运算,位向量的位长就必须都是相等的,所以要求特征串集合中的所有的特征串都是等长的。如果出现不等长的情况,就以最短串的长度为基准,将所有长串提取等长子串,让子串参与匹配。如果提取的等长子串长度lmin小于机器字长,lmin*r仍然不超过一个机器字长,还可以将一个机器字长划分成r个等长分组,将r个位向量包装进一个机器字内,从而节省空间。Shift-And/Or类的无跳跃的算法,还可支持不等长分组,使长字符串可以保留更长的子串。
作为实现快速模式匹配的另一种算法,BG是使用q-gram将BNDM算法扩展成为基于过滤技术的多模匹配算法,其扩展方法同Shift-And/Or算法类似。这里不再详述。
多模式匹配过滤类算法主要被应用于一次完整模式匹配的前端过滤,评价一个过滤算法的性能,主要体现在两个方面:过滤效率和过滤通过率。过滤效率,表示纯粹过滤过程的处理速度。过滤效率比较容易评价:匹配同等的数据量,执行时间越短,效率越高。过滤通过率也可以理解为“误报率”,每一次误报,还需要进行一次额外的精确匹配的确认过程,所以过滤通过率会影响整体匹配效率。一般来说同等特征串数目,通过率越低越好。
虽然SOG、BG算法与传统的多模匹配相比,在支持较大规模特征串的情况下,具有较好的处理速度。从实测数据看来,SOG算法与BG算法在特征串规模达到10000时,仍然保持了较好的处理速度,在这种规模下,传统的多模式匹配算法已经不再适用。然而,SOG算法与BG算法还存在一些不足,导致在特征串规模更大的情况下,其处理速度仍不能满足要求。其中,SOG算法与BG算法主要存在以下不足:
1)在利用q-gram进行字符集规模扩展时,没有考虑不同的编码类型,扩展字符集的转换函数设计要求是不同的,针对不同编码类型设计的转换函数可以更有效的利用掩码表空间,进而降低过滤通过率,进而提升整体性能。
2)SOG算法性能稳定,不会因为特征串集合中的特征串的数量增大导致重复扫描文本,但也因为它没有跳跃的能力,当特征串集合的规模减少时,其匹配速度也不会提升。
3)由于BNDM算法本身的缺点,当特征串集合中的特征串数量达到一定规模时,会导致BG算法失去跳跃能力。
发明内容
本发明旨在至少在一定程度上解决相关技术中的技术问题之一。
为此,本发明的一个目的在于提出一种海量特征串集合的匹配方法,能够有效利用位向量掩码表的空间,降低过滤通过率,提升匹配速度。
本发明的另一个目的在于提出一种海量特征串集合的匹配装置。
为达到上述目的,本发明第一方面实施例提出的海量特征串集合的匹配方法,包括:接收当前待匹配数据,并生成与所述当前待匹配数据对应的字符转换函数和对应的位向量掩码表;根据特征串集合中的特征串所包含字符个数确定匹配窗口长度,并为当前待匹配数据设置初始偏移值;根据所述初始偏移值为起点对所述当前待匹配数据进行偏移并定位,获取所述匹配窗口长度内以所述匹配窗口末端为终点,长度为预设第一长度的字符块并作为第一字符块;根据预设快表判断所述第一字符块是否为所述特征串集合的子特征串;在所述第一字符块为所述特征串集合的子特征串时,获取所述匹配窗口长度内以所述匹配窗口始端为起始,长度为预设第二长度的字符块并作为第二字符块;根据所述对应的字符转换函数计算所述第二字符块的转换值,并从所述对应的位向量掩码表读取与所述转换值对应的位向量并作为当前匹配向量;根据所述当前匹配向量对所述当前待匹配数据进行特征串匹配;在所述第一字符块不为所述特征串集合的子特征串时,以当前读入的所述第一字符块的起点位置的下一位作为所述匹配窗口的起点;基于新的匹配窗口的起点对所述当前待匹配数据进行偏移并定位,并在新的所述匹配窗口的长度内对所述第一字符块进行更新。
在本发明的一个实施例中,所述根据所述当前匹配向量对所述当前待匹配数据进行特征串匹配,包括:
将所述当前匹配向量和预设判断向量作与运算,得到运算结果;
在所述运算结果为未在所述当前待匹配数据中命中所述特征串集合中的特征串的第一运算结果时,获取所述匹配窗口长度内以所述第二字符块终点位置的下一位为起始,长度为预设第二长度的字符块并作为第三字符块,并根据所述第三字符块对所述第二字符块进行更新;
在所述运算结果为在所述当前待匹配数据中命中所述特征串集合中的特征串的第二运算结果时,获取所述第二字符块对应的哈希值,并根据所述哈希值及预设哈希表对命中情况进行确认。
在本发明的一个实施例中,所述预设哈希表包括第一哈希表和第二哈希表,所述根据所述哈希值及预设哈希表对命中情况进行确认,包括:
获取所述第一哈希表的行数和列数,并计算所述行数和列数的乘积得到乘积值;
对所述哈希值和所述乘积值进行求余取模运算,得到模值;
判断所述第一哈希表中与所述模值对应位的位值是否为1;
在所述对应位的位值不为1时,判定所述命中情况为所述当前待匹配数据与所述特征串集合匹配失败;
在所述对应位的位值为1时,根据所述哈希值判断所述第二哈希表中是否存在所述特征串集合中的特征串;
在不存在所述特征串集合中的特征串时,判定所述命中情况为所述当前待匹配数据与所述特征串集合匹配失败;
在存在所述特征串集合中的特征串时,判定所述命中情况为所述当前待匹配数据与所述特征串集合匹配成功。
在本发明的一个实施例中,在所述接收当前待匹配数据之前,还包括:
根据所述特征串集合中的每个特征串的哈希值生成所述第一哈希表和所述第二哈希表。
在本发明的一个实施例中,所述生成与所述当前待匹配数据对应的字符转换函数和对应的位向量掩码表,包括:
生成与所述当前待匹配数据所支持的编码类型对应的字符转换函数和对应的位向量掩码表。
在本发明的一个实施例中,在所述接收当前待匹配数据之后,还包括:
获取所述特征串集合中长度为预设第一长度的多个字符块;
计算所述多个字符块中每个字符块的哈希值;
根据所述每个字符块的哈希值生成所述预设快表。
在本发明的一个实施例中,所述编码类型包括以下至少之一:
GB2312编码、GBK编码,以及UTF-8编码。
本发明第一方面实施例提出的海量特征串集合的匹配方法,通过根据特征串集合中的特征串所包含字符个数确定匹配窗口长度,并为当前待匹配数据设置初始偏移值;根据初始偏移值为起点对当前待匹配数据进行偏移并定位,获取匹配窗口长度内以匹配窗口末端为终点,长度为预设第一长度的字符块并作为第一字符块;在第一字符块为特征串集合的子特征串时,获取匹配窗口长度内以匹配窗口始端为起始,长度为预设第二长度的字符块并作为第二字符块;根据对应的字符转换函数计算第二字符块的转换值,并从对应的位向量掩码表读取与转换值对应的位向量并作为当前匹配向量;根据当前匹配向量对当前待匹配数据进行特征串匹配,在第一字符块不为特征串集合的子特征串时,以当前读入的第一字符块的起点位置的下一位作为匹配窗口的起点;基于新的匹配窗口的起点对当前待匹配数据进行偏移并定位,并在新的匹配窗口的长度内对第一字符块进行更新,能够有效利用位向量掩码表的空间,降低过滤通过率,提升匹配速度。
为达到上述目的,本发明第二方面实施例提出的海量特征串集合的匹配装置,包括:接收模块,用于接收当前待匹配数据;第一生成模块,用于生成与所述当前待匹配数据对应的字符转换函数和对应的位向量掩码表;确定模块,用于根据特征串集合中的特征串所包含字符个数确定匹配窗口长度,并为当前待匹配数据设置初始偏移值;第一处理模块,用于根据所述初始偏移值为起点对所述当前待匹配数据进行偏移并定位,获取所述匹配窗口长度内以所述匹配窗口末端为终点,长度为预设第一长度的字符块并作为第一字符块;判断模块,用于根据预设快表判断所述第一字符块是否为所述特征串集合的子特征串;第一获取模块,用于在所述第一字符块为所述特征串集合的子特征串时,获取所述匹配窗口长度内以所述匹配窗口始端为起始,长度为预设第二长度的字符块并作为第二字符块;第一计算模块,用于根据所述对应的字符转换函数计算所述第二字符块的转换值,并从所述对应的位向量掩码表读取与所述转换值对应的位向量并作为当前匹配向量;匹配模块,用于根据所述当前匹配向量对所述当前待匹配数据进行特征串匹配;第二处理模块,用于在所述第一字符块不为所述特征串集合的子特征串时,以当前读入的所述第一字符块的起点位置的下一位作为所述匹配窗口的起点;更新模块,用于基于新的匹配窗口的起点对所述当前待匹配数据进行偏移并定位,并在新的所述匹配窗口的长度内对所述第一字符块进行更新。
在本发明的一个实施例中,所述匹配模块包括:
运算子模块,用于将所述当前匹配向量和预设判断向量作与运算,得到运算结果;
第一获取子模块,用于在所述运算结果为未在所述当前待匹配数据中命中所述特征串集合中的特征串的第一运算结果时,获取所述匹配窗口长度内以所述第二字符块终点位置的下一位为起始,长度为预设第二长度的字符块并作为第三字符块,并根据所述第三字符块对所述第二字符块进行更新;
第二获取子模块,用于在所述运算结果为在所述当前待匹配数据中命中所述特征串集合中的特征串的第二运算结果时,获取所述第二字符块对应的哈希值;
确认子模块,用于根据所述哈希值及预设哈希表对命中情况进行确认。
在本发明的一个实施例中,所述预设哈希表包括第一哈希表和第二哈希表,所述确认子模块包括:
获取单元,用于获取所述第一哈希表的行数和列数,并计算所述行数和列数的乘积得到乘积值;
运算单元,用于对所述哈希值和所述乘积值进行求余取模运算,得到模值;
第一判断单元,用于判断所述第一哈希表中与所述模值对应位的位值是否为1;
第一判定单元,用于在所述对应位的位值不为1时,判定所述命中情况为所述当前待匹配数据与所述特征串集合匹配失败;
第二判断单元,用于在所述对应位的位值为1时,根据所述哈希值判断所述第二哈希表中是否存在所述特征串集合中的特征串;
第二判定单元,用于在不存在所述特征串集合中的特征串时,判定所述命中情况为所述当前待匹配数据与所述特征串集合匹配失败;
所述第二判定单元还用于在存在所述特征串集合中的特征串时,判定所述命中情况为所述当前待匹配数据与所述特征串集合匹配成功。
在本发明的一个实施例中,还包括:
第二生成模块,用于根据所述特征串集合中的每个特征串的哈希值生成所述第一哈希表和所述第二哈希表。
在本发明的一个实施例中,所述第一生成模块具体用于:
生成与所述当前待匹配数据所支持的编码类型对应的字符转换函数和对应的位向量掩码表。
在本发明的一个实施例中,还包括:
第二获取模块,用于获取所述特征串集合中长度为预设第一长度的多个字符块;
第二计算模块,用于计算所述多个字符块中每个字符块的哈希值;
第三生成模块,用于根据所述每个字符块的哈希值生成所述预设快表。
在本发明的一个实施例中,所述编码类型包括以下至少之一:
GB2312编码、GBK编码,以及UTF-8编码。
本发明第二方面实施例提出的海量特征串集合的匹配装置,通过根据特征串集合中的特征串所包含字符个数确定匹配窗口长度,并为当前待匹配数据设置初始偏移值;根据初始偏移值为起点对当前待匹配数据进行偏移并定位,获取匹配窗口长度内以匹配窗口末端为终点,长度为预设第一长度的字符块并作为第一字符块;在第一字符块为特征串集合的子特征串时,获取匹配窗口长度内以匹配窗口始端为起始,长度为预设第二长度的字符块并作为第二字符块;根据对应的字符转换函数计算第二字符块的转换值,并从对应的位向量掩码表读取与转换值对应的位向量并作为当前匹配向量;根据当前匹配向量对当前待匹配数据进行特征串匹配,在第一字符块不为特征串集合的子特征串时,以当前读入的第一字符块的起点位置的下一位作为匹配窗口的起点;基于新的匹配窗口的起点对当前待匹配数据进行偏移并定位,并在新的匹配窗口的长度内对第一字符块进行更新,能够有效利用位向量掩码表的空间,降低过滤通过率,提升匹配速度。
本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1是本发明一实施例提出的海量特征串集合的匹配方法的流程示意图;
图2为本发明另一实施例提出的海量特征串集合的匹配方法的流程示意图;
图3为本发明另一实施例提出的海量特征串集合的匹配方法的流程示意图;
图4是本发明实施例中确认阶段数据组织关系示意图;
图5为本发明另一实施例提出的海量特征串集合的匹配方法的流程示意图;
图6是本发明一实施例提出的海量特征串集合的匹配装置的结构示意图;
图7是本发明另一实施例提出的海量特征串集合的匹配装置的结构示意图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。相反,本发明的实施例包括落入所附加权利要求书的精神和内涵范围内的所有变化、修改和等同物。
图1是本发明一实施例提出的海量特征串集合的匹配方法的流程示意图。
参见图1,该海量特征串集合的匹配方法包括:预处理阶段和扫描阶段:
其中,预处理阶段的工作流程包括:
S11:接收当前待匹配数据,并生成与当前待匹配数据对应的字符转换函数和对应的位向量掩码表。
在本发明的实施例中,当前待匹配数据为需要对其进行匹配的数据,例如为文本T=t1t2...tn。
在本发明的实施例中,可以生成与当前待匹配数据所支持的编码类型对应的字符转换函数和对应的位向量掩码表。
其中,编码类型包括以下至少之一:GB2312编码、GBK编码,以及UTF-8编码。
可选地,首先需要初始化位向量掩码表,得到初始化的位向量掩码表BMask。依据当前待匹配数据可能支持的编码类型,使用设计好的对应的字符转换函数对位向量掩码表BMask进行赋值。对于每一种可能支持的编码方式,都对应一个位向量掩码表,在匹配阶段对于不同编码方式,使用相对应的位向量掩码表进行匹配。而后将位向量掩码表BMask所有位初始化为零,获取当前待匹配数据中的q-gram字符块,使用选取好的字符转换函数进行求值,对于所求的值,找到位向量掩码表BMask中的相对应行,根据当前字符块在当前待匹配数据中的位置,找到位向量掩码表BMask中的相应列,然后将该位置为1。
具体地,字符转换函数设计原则主要是使掩码表利用尽量少的空间,同时能容纳更多的特征字符串,或者说在同样的掩码表空间下,所设计的字符转换函数可以使过滤阶段的通过率更低。目前,中文常用的编码类型有GB2312,GBK,UTF8。其中,
GB2312是中国国家标准简体中文字符集,全称《信息交换用汉字编码字符集·基本集》,GB2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个字符。其中分一级、二级汉字是按照日常使用频率划分的,经统计,一级汉字的累计使用频度达到了99.9%,而另外的3000多个二级汉字累计频度不到0.1%。
GBK编码,是在GB2312标准基础上的内码扩展规范,使用了双字节编码方案,其编码范围从8140至FEFE(剔除xx7F),共23940个码位,共收录了21003个汉字,完全兼容GB2312标准。
UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。对于某一个字符的UTF-8编码,如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字节均以10开头。UTF-8最多可用到6个字节,编码形式为:
1字节 0xxxxxxx
2字节 110xxxxx 10xxxxxx
3字节 1110xxxx 10xxxxxx 10xxxxxx
4字节 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
5字节 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
6字节 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
对于GB2312和GBK,由于属于扩展关系,常用汉字内码表示是相同的,采用相同的字符转换函数。由GB2312编码方式可知,GB2312每一字节最高位一定为1,这一位对于每个汉字,没有任何区分度,在设计字符转换函数时,如果将其考虑其中,那掩码表的部分空间是固定的,则浪费了其存储空间。所以,在设计字符转换函数时,可以将最高位去掉,字符转换函数设计如公式(1)所示:
Chash_G(a,b,c)→(((a&0x7f)<<14|((b&0x7f)<<7)|(c&0x7f)); (1)
其中,a&0x7f)<<14表示将字符a的低7位左移14位,b&0x7f)<<7表示将字符b的低7位左移7位,c&0x7f表示取字符c的低7位,式(1)表示将a的低7位作为Chash_G(a,b,c)的高7位,将字符b的低7位作为Chash_G(a,b,c)的中间7位,将字符c的低7位作为Chash_G(a,b,c)的低7位,得到一个新的字符Chash_G(a,b,c)。
对于UTF-8,除第一字节,其余各字节均以01开头。可以看出,每个字节的前两字节都没有任何区分度,因此,可以设计字符转换函数如公式(2)所示:
Chash_G(a,b,c)→(((a&0x3f)<<12|((b&0x3f)<<6)|(c&0x3f)); (2)
由式(2)可以看出,字符转换函数将每字节的前两字位均模糊掉,即将a的低6位作为Chash_G(a,b,c)的高6位,将字符b的低6位作为Chash_G(a,b,c)的中间6位,将字符c的低6位作为Chash_G(a,b,c)的低6位,得到一个新的字符Chash_G(a,b,c)。
需要说明的是,此处设计的字符转换函数是按照3-gram(q取3),即将每3个字符转化为一个新字符而设计的,具体q-gram中的q选择几,可以根据实际应用时***内存情况进行选取。例如,当***内存更大时,可以选择4-gram,这样,按照上面原则设计字符转换函数会有更好的效果。
可选地,可以根据当前待匹配数据的所支持的编码类型,选择正确字符转换函数CHash,以及与字符转换函数相对应的已经初始化的位向量掩码表BMask。
一些实施例中,参见图2,在步骤S11后,还包括:
S21:获取特征串集合中长度为预设第一长度的多个字符块。
在本发明的实施例中,特征串集合可以为预先设置好的,例如,给定的特征串集合为P={p1,p2,...,pr},特征串集合中的特征串则可以为pi(1≤i≤r)。
在本发明的实施例中,预设第一长度为预先配置的,例如为QL。
具体地,首先需要初始化预设快表,即将预设快表中所有位置0,需要说明的是,此处设计的预设快表为一个位表,而后,对于特征串集合中每一个特征串,取长度为QL的多个字符块,以触发后续操作。
S22:计算多个字符块中每个字符块的哈希值。
具体地,计算长度为QL的多个字符块的哈希值,得到多个hash值,每个hash值均为整数,设所得的hash值为qvali,其中,i=1,2,…,N,N为字符块的个数。
S23:根据每个字符块的哈希值生成预设快表。
可选地,可以将预设快表中qvali位设置为1,设置方法如公式(3)所示:
QuickBM[qvali/QBM_LINE_BIT]|=1<<(qvali%QBM_LINE_BIT); (3)
其中,常量QBM_LINE_BIT是预设快表每行所包含的bit数,qvali/QBM_LINE_BIT表示需要设置的位对应的是预设快表中的哪一行,在找到预设快表中需要设置的位所属的具体行后,qvali%QBM_LINE_BIT表示该行需要设置的位。需要说明的是,字符块长度QL以及将字符块转换为整数值的方法,可以根据特征串集合的规模进行选择。
在进行位并行过滤匹配前,先进行预设快表搜索,在当前待匹配数据中命中特征串集合中的特征串时,进行跳跃,能够使得类似Shift-And的算法具有跳跃能力。
一些实施例中,参见图3,在步骤S11之前,还包括:
S31:根据特征串集合中的每个特征串的哈希值生成第一哈希表和第二哈希表。
在本发明的实施例中,第一哈希表和第二哈希表为预先配置的,其中,第一哈希表例如为BitMap表,第二哈希表例如为HTab表,HTab表的每一行均为一个HTNode表。
首先需初始化BitMap、HTab、HTNode三类表,以便后续步骤中加速查找特征串(可称为确认阶段初始化)。初始化时,将特征串集合中的每一个特征串通过hash函数计算出每个特征串对应的hash值,记为fvalj,其中,j=1,2,…,K,K为特征串集合中特征串的个数,然后利用fvalj组织BitMap、HTab、HTNode三类表。本文中选择使用著名的FVN hash函数将特征串集合中的每一个特征串转换为hash值。
BitMap表是一个位表,设其有m行,每行有n位,则共有m*n位,将fvalj转换为0到m*n区间的一个值,即可以用公式(4)得到转换值:
fval_cj=fvalj%(m*n); (4)
其中,fval_cj为转换值,取值范围为[0,m*n]。
首先将BitMap表中每一位初始化为0,然后对每一个特征串计算出的fval_cj,用公式(5)将BitMap中fval_cj位设置为1:
BitMap[fval_cj/n]|=1<<(fval_cj%n); (5)
其中,n为BitMap表每行所包含的位数,fval_cj/n表示需要设置的位对应的是BitMap表中的哪一行,在找到BitMap表中需要设置的位所属的具体行后,fval_cj%n表示该行需要设置的位。
HTab是与BitMap具有相同行的hash表,HTab表每一行与BitMap表每一行对应,BitMap表可以看做HTab表前端起到过滤作用的位表,当需要确认待匹配数据对应的fval_cj值在BitMap表中的对应位置为1时,才需要查找HTab表相应的行,否则,说明当前待匹配数据中未命中特征串集合中的特征串,确认过程结束,这极大加快了确认过程。HTab表每一行是一个HTNode表,特征串集合中的所有的特征串分布在各个HTNode表中。
HTNode表中每个节点的特征串的fvalj值不同,相同的fvalj值的特征串被挂到HTNode节点自身的链表上。对于每个HTNode表,依据特征串的fvalj值,将其构建为静态二分查找树。由于确认阶段到需要查找HTNode表时,最终命中的可能性已经很大,使用静态二分查找树,在搜索第一个节点时,附近的几个节点已经加载到catch中,进而,二分查找树的设计在当前场景下能最大化catch的利用率,进而加快最终命中情况的确认过程。
作为一种示例,参见图4,图4为本发明实施例中确认阶段数据组织关系示意图。
通过根据特征串集合中的特征串的哈希值生成第一哈希表和第二哈希表,能够有效提升匹配效率。
扫描阶段包括:
S12:根据特征串集合中的特征串所包含字符个数确定匹配窗口长度,并为当前待匹配数据设置初始偏移值。
在本发明的实施例中,特征串集合可以为预先设置好的,例如,给定的特征串集合为P={p1,p2,...,pr},特征串集合中的特征串则可以为pi(1≤i≤r),其中,本发明实施例默认特征串集合中的每个特征串所包含字符个数相等,即特征串集合中的所有的特征串都是等长的。
可选地,设置当前待匹配数据的偏移值为q,q的初始值为0,特征串集合中所有的特征串所包含的字符个数均为L,预设快表字符块长度为QL(查找预设快表时,需要使用多少个字符计算hash值)。假设字符转换函数将H个字符转换为一个新字符,本发明实施例以H为3示例,即字符转换函数将3个字符转换为一个新字符。
具体地,设置当前待匹配数据的初始偏移值为q,由于特征串集合中所有的特征串所包含的字符个数均为L,则取匹配窗口长度为L。
S13:根据初始偏移值为起点对当前待匹配数据进行偏移并定位,获取匹配窗口长度内以匹配窗口末端为终点,长度为预设第一长度的字符块并作为第一字符块。
在本发明的实施例中,预设第一长度为预先配置的,例如为QL。
具体地,以当前待匹配数据的初始偏移值q为起点,取长度为L的窗口,在匹配窗口长度内以匹配窗口末端为终点,取长度为QL的字符块作为第一字符块,以触发后续步骤。
S14:根据预设快表判断第一字符块是否为特征串集合的子特征串,若是,执行S15,若否,执行S18。
具体地,可以计算长度为QL的第一字符块的hash值,设hash值为qval,并在预设快表QuickBM中查找相对应的位是否被设置过,方法如公式(6)所示:
QuickBM[qval/QBM_LINE_BIT]&(1<<(qval%QBM_LINE_BIT)); (6)
在式(6)的计算结果为1时,表明第一字符块为特征串集合的子特征串,执行S15;在式(6)的计算结果为0时,表明第一字符块不为特征串集合的子特征串,执行S18。
S15:获取匹配窗口长度内以匹配窗口始端为起始,长度为预设第二长度的字符块并作为第二字符块。
在本发明的实施例中,预设第二长度为预先配置的,例如为H。
具体地,在式(6)的计算结果为1时,表明第一字符块为特征串集合的子特征串,则以当前待匹配数据的初始偏移值q为起点,取长度为L的窗口,在匹配窗口长度内以匹配窗口始端为起始,取长度为H的字符块作为第二字符块,以触发后续步骤。
S16:根据对应的字符转换函数计算第二字符块的转换值,并从对应的位向量掩码表读取与转换值对应的位向量并作为当前匹配向量。
可选地,设置初始向量为DI,当前匹配向量为D。根据对应的字符转换函数Chash计算第二字符块的转换值,设为bval,从位向量掩码表BMask中读取与转换值bval对应的位向量,赋值给位向量B,即:
B←BMask[bval]; (7)
以当前匹配向量D为初始状态,用读取到的位向量B以及初始向量DI,对匹配向量进行更新,具体更新过程如公式(8)所示:
D←((D<<H)/DI)&B; (8)
S17:根据当前匹配向量对当前待匹配数据进行特征串匹配。
在本发明的实施例中,可以将当前匹配向量和预设判断向量作与运算,得到运算结果;根据运算结果对当前待匹配数据进行特征串匹配。
其中,预设判断向量为预先设置的,预设判断向量例如为DF。
具体地,将当前匹配向量和预设判断向量作与运算,得到运算结果为:D&DF。若D&DF=0,表明未在当前待匹配数据中命中特征串集合中的特征串,获取匹配窗口长度内以第二字符块终点位置的下一位为起始,长度为预设第二长度的字符块并作为第三字符块,并根据第三字符块对第二字符块进行更新;若D&DF=1,表明在当前待匹配数据中命中特征串集合中的特征串的第二运算结果,获取第二字符块对应的哈希值,并根据哈希值及预设哈希表对命中情况进行确认(具体参见步骤S514~S515)。
S18:以当前读入的第一字符块的起点位置的下一位作为匹配窗口的起点。
可选地,在式(6)的计算结果为0时,表明第一字符块不为特征串集合的子特征串,以当前读入的第一字符块的起点位置的下一位作为匹配窗口的起点,此时,匹配窗口的起点更新为q=q+L-QL+1。
S19:基于新的匹配窗口的起点对当前待匹配数据进行偏移并定位,并在新的匹配窗口的长度内对第一字符块进行更新。
可选地,基于新的匹配窗口的起点对当前待匹配数据进行偏移并定位,并在新的匹配窗口的长度内对第一字符块进行更新,即返回到步骤S13重新执行后续步骤。
由于可以根据当前待匹配数据的编码类型,选择正确字符转换函数CHash,能够在相应的字符集下对当前待匹配数据进行更有效的转换,使得在使用相同位向量掩码表空间的情况下,降低过滤通过率,或者,在相同字符集,相同过滤通过率下,所需的位向量掩码表的空间更小。
增加了预设快表查询部分,预设快表的Hash值计算函数与字符转换函数CHash相互独立,可以利用更多的字节进行预设快表计算,这样预设快表通过率会更低,在预设快表不通过时,整个匹配流程进行了跳跃,增加了算法整体匹配效率。
在更新匹配向量D阶段,扫描文本(当前待匹配数据)时,每次移动H个字符,本文中H取3,这使整体扫面更快。然而,中文的GB2312和GBK均以2个字节表示一个汉字,当两个连续的三字节相同时,这六个字节中间两个字节表示相同汉字的概率也非常大,对于6字节变长的UTF-8编码也类似。因此扫描文本时使用q-gram的连续不重叠方式既加快了扫面文本的速度,同时不会提升过滤通过率。
本实施例中,通过根据特征串集合中的特征串所包含字符个数确定匹配窗口长度,并为当前待匹配数据设置初始偏移值;根据初始偏移值为起点对当前待匹配数据进行偏移并定位,获取匹配窗口长度内以匹配窗口末端为终点,长度为预设第一长度的字符块并作为第一字符块;在第一字符块为特征串集合的子特征串时,获取匹配窗口长度内以匹配窗口始端为起始,长度为预设第二长度的字符块并作为第二字符块;根据对应的字符转换函数计算第二字符块的转换值,并从对应的位向量掩码表读取与转换值对应的位向量并作为当前匹配向量;根据当前匹配向量对当前待匹配数据进行特征串匹配,在第一字符块不为特征串集合的子特征串时,以当前读入的第一字符块的起点位置的下一位作为匹配窗口的起点;基于新的匹配窗口的起点对当前待匹配数据进行偏移并定位,并在新的匹配窗口的长度内对第一字符块进行更新,能够有效利用位向量掩码表的空间,降低过滤通过率,提升匹配速度。
图5为本发明另一实施例提出的海量特征串集合的匹配方法的流程示意图。
参见图5,该海量特征串集合的匹配方法包括:
S501:根据特征串集合中的每个特征串的哈希值生成第一哈希表和第二哈希表。
S502:接收当前待匹配数据,并生成与当前待匹配数据对应的字符转换函数和对应的位向量掩码表。
S503:获取待特征串集合中长度为预设第一长度的多个字符块。
S504:计算多个字符块中每个字符块的哈希值。
S505:根据每个字符块的哈希值生成预设快表。
S506:根据特征串集合中的特征串所包含字符个数确定匹配窗口长度,并为当前待匹配数据设置初始偏移值。
S507:根据初始偏移值为起点对当前待匹配数据进行偏移并定位,获取匹配窗口长度内以匹配窗口末端为终点,长度为预设第一长度的字符块并作为第一字符块。
S508:根据预设快表判断第一字符块是否为特征串集合的子特征串,若是,执行S511,若否,执行S509。
具体地,可以计算长度为QL的第一字符块的hash值,设hash值为qval,并在预设快表QuickBM中查找相对应的位是否被设置过,方法如公式(6)所示:
QuickBM[qval/QBM_LINE_BIT]&(1<<(qval%QBM_LINE_BIT)); (6)
在式(6)的计算结果为1时,表明第一字符块为特征串集合的子特征串,此时,执行S511;在式(6)的计算结果为0时,表明第一字符块不为特征串集合的子特征串,此时,执行S509。
S509:以当前读入的第一字符块的起点位置的下一位作为匹配窗口的起点。
可选地,在第一字符块不为特征串集合的子特征串时,以当前读入的第一字符块的起点位置的下一位作为匹配窗口的起点,此时,匹配窗口的起点更新为q=q+L-QL+1。
S510:基于新的匹配窗口的起点对当前待匹配数据进行偏移并定位,并在新的匹配窗口的长度内对第一字符块进行更新。
可选地,基于新的匹配窗口的起点对当前待匹配数据进行偏移并定位,并在新的匹配窗口的长度内对第一字符块进行更新,即返回到步骤S507重新执行后续步骤。
S511:获取匹配窗口长度内以匹配窗口始端为起始,长度为预设第二长度的字符块并作为第二字符块。
S512:根据对应的字符转换函数计算第二字符块的转换值,并从对应的位向量掩码表读取与转换值对应的位向量并作为当前匹配向量。
S513:将当前匹配向量和预设判断向量作与运算,得到运算结果。
在本发明的实施例中,预设判断向量为预先设置的,预设判断向量例如为DF。
具体地,将当前匹配向量和预设判断向量作与运算,得到运算结果为:D&DF。
S514:在运算结果为未在当前待匹配数据中命中特征串集合中的特征串的第一运算结果时,获取匹配窗口长度内以第二字符块终点位置的下一位为起始,长度为预设第二长度的字符块并作为第三字符块,并根据第三字符块对第二字符块进行更新。
可选地,在运算结果D&DF=0时,表明未在当前待匹配数据中命中特征串集合中的特征串,获取匹配窗口长度内以第二字符块终点位置的下一位为起始,长度为预设第二长度的字符块并作为第三字符块,并根据第三字符块对第二字符块进行更新。
S515:在运算结果为在当前待匹配数据中命中特征串集合中的特征串的第二运算结果时,获取第二字符块对应的哈希值,并根据哈希值及预设哈希表对命中情况进行确认。
可选地,在运算结果D&DF=1时,表明在当前待匹配数据中命中特征串集合中的特征串的第二运算结果。
在本发明的实施例中,预设哈希表包括第一哈希表和第二哈希表,其中,第一哈希表例如为BitMap表,第二哈希表例如为HTab表。
在本发明的实施例中,可以获取第一哈希表的行数和列数,并计算行数和列数的乘积得到乘积值;对哈希值和乘积值进行求余取模运算,得到模值;判断第一哈希表中与模值对应位的位值是否为1;在对应位的位值不为1时,判定命中情况为当前待匹配数据与特征串集合匹配失败;在对应位的位值为1时,根据哈希值判断第二哈希表中是否存在特征串集合中的特征串;在不存在特征串集合中的特征串时,判定命中情况为当前待匹配数据与特征串集合匹配失败;在存在特征串集合中的特征串时,判定命中情况为当前待匹配数据与特征串集合匹配成功。
具体地,首先,计算第二字符块对应的哈希值,设为fval。计算BitMap表中待匹配数据对应位数值fval_c,fval_c=fval%(m*n),其中,BitMap表共m行,每行n位。
而后,查找BitMap表中fval_c对应位的位值是否为1,具体过程参见公式(9)所示:
BitMap[fval_c/n]&(1<<(fval_c%n)); (9)
在式(9)的计算结果为0时,表明当前待匹配数据与特征串集合匹配失败,确认过程结束;在式(9)的计算结果为1时,可以查找HTab表中第fval_c/n行,找到第fval_c/n行对应的HTNode表,用值fval在HTNode表中进行静态二分查找树搜索,当fval不在HTNode表中时,表明当前待匹配数据与特征串集合匹配失败,确认过程结束;否则,搜索键值为fval的HTNode节点构成的链表,对链表中的每个节点,依次比较其含有的特征串是否与第二字符块相同,若是,则表明命中情况为当前待匹配数据与特征串集合匹配成功,返回命中状态。
本实施例中,通过在设计字符转换函数时,考虑了中文的不同编码方式,能够有效利用位向量掩码表的空间,降低过滤通过率,通过利用预设快表与位并行结合的技术,在进行位并行过滤匹配前,先进行预设快表搜索,在当前待匹配数据和特征串集合中的特征串没有命中的情况下,进行跳跃,使得类似Shift-And的算法具有跳跃能力,通过在扫描当前待匹配数据时使用q-gram的连续不重叠方式,能够提升文本的扫描效率,通过在最终确认阶段,设计位表过滤、hash表,以及静态二分查找树相结合的查找结构,能够加快最终当前待匹配数据和特征串集合中的特征串命中情况的确认过程。
图6是本发明一实施例提出的海量特征串集合的匹配装置的结构示意图。
参见图6,该海量特征串集合的匹配装置60包括:接收模块601、第一生成模块602、确定模块603、第一处理模块604、判断模块605、第一获取模块606、第一计算模块607、匹配模块608、第二处理模块609,以及更新模块610。其中,
接收模块601,用于接收当前待匹配数据。
第一生成模块602,用于生成与当前待匹配数据对应的字符转换函数和对应的位向量掩码表。
可选地,第一生成模块602具体用于:生成与当前待匹配数据所支持的编码类型对应的字符转换函数和对应的位向量掩码表。
其中,编码类型包括以下至少之一:GB2312编码、GBK编码,以及UTF-8编码。
确定模块603,用于根据特征串集合中的特征串所包含字符个数确定匹配窗口长度,并为当前待匹配数据设置初始偏移值。
第一处理模块604,用于根据初始偏移值为起点对当前待匹配数据进行偏移并定位,获取匹配窗口长度内以匹配窗口末端为终点,长度为预设第一长度的字符块并作为第一字符块。
判断模块605,用于根据预设快表判断第一字符块是否为特征串集合的子特征串。
第一获取模块606,用于在第一字符块为特征串集合的子特征串时,获取匹配窗口长度内以匹配窗口始端为起始,长度为预设第二长度的字符块并作为第二字符块。
第一计算模块607,用于根据对应的字符转换函数计算第二字符块的转换值,并从对应的位向量掩码表读取与转换值对应的位向量并作为当前匹配向量。
匹配模块608,用于根据当前匹配向量对当前待匹配数据进行特征串匹配。
第二处理模块609,用于在第一字符块不为特征串集合的子特征串时,以当前读入的第一字符块的起点位置的下一位作为匹配窗口的起点。
更新模块610,用于基于新的匹配窗口的起点对当前待匹配数据进行偏移并定位,并在新的匹配窗口的长度内对第一字符块进行更新。
一些实施例中,参见图7,该海量特征串集合的匹配装置60还包括:
可选地,匹配模块608包括:
运算子模块6081,用于将当前匹配向量和预设判断向量作与运算,得到运算结果。
第一获取子模块6082,用于在运算结果为未在当前待匹配数据中命中特征串集合中的特征串的第一运算结果时,获取匹配窗口长度内以第二字符块终点位置的下一位为起始,长度为预设第二长度的字符块并作为第三字符块,并根据第三字符块对第二字符块进行更新。
第二获取子模块6083,用于在运算结果为在当前待匹配数据中命中特征串集合中的特征串的第二运算结果时,获取第二字符块对应的哈希值。
确认子模块6084,用于根据哈希值及预设哈希表对命中情况进行确认。
可选地,预设哈希表包括第一哈希表和第二哈希表,确认子模块6084包括:
获取单元60841,用于获取第一哈希表的行数和列数,并计算行数和列数的乘积得到乘积值;
运算单元60842,用于对哈希值和乘积值进行求余取模运算,得到模值;
第一判断单元60843,用于判断第一哈希表中与模值对应位的位值是否为1;
第一判定单元60844,用于在对应位的位值不为1时,判定命中情况为当前待匹配数据与特征串集合匹配失败;
第二判断单元60845,用于在对应位的位值为1时,根据哈希值判断第二哈希表中是否存在特征串集合中的特征串;
第二判定单元60846,用于在不存在特征串集合中的特征串时,判定命中情况为当前待匹配数据与特征串集合据匹配失败;
所述第二判定单元60846还用于在存在特征串集合中的特征串时,判定命中情况为当前待匹配数据与特征串集合匹配成功。
第二生成模块611,用于根据特征串集合中的每个特征串的哈希值生成第一哈希表和第二哈希表。
第二获取模块612,用于获取所述特征串集合中长度为预设第一长度的多个字符块。
第二计算模块613,用于计算所述多个字符块中每个字符块的哈希值。
第三生成模块614,用于根据所述每个字符块的哈希值生成所述预设快表。
需要说明的是,前述图1-图5实施例中对海量特征串集合的匹配方法实施例的解释说明也适用于该实施例的海量特征串集合的匹配装置60,其实现原理类似,此处不再赘述。
本实施例中,通过根据特征串集合中的特征串所包含字符个数确定匹配窗口长度,并为当前待匹配数据设置初始偏移值;根据初始偏移值为起点对当前待匹配数据进行偏移并定位,获取匹配窗口长度内以匹配窗口末端为终点,长度为预设第一长度的字符块并作为第一字符块判断第一字符块是否为待匹配特征串的子特征串;在第一字符块为特征串集合的子特征串时,获取匹配窗口长度内以匹配窗口始端为起始,长度为预设第二长度的字符块并作为第二字符块;根据对应的字符转换函数计算第二字符块的转换值,并从对应的位向量掩码表读取与转换值对应的位向量并作为当前匹配向量;根据当前匹配向量对当前待匹配数据进行特征串匹配,在第一字符块不为特征串集合的子特征串时,以当前读入的第一字符块的起点位置的下一位作为匹配窗口的起点;基于新的匹配窗口的起点对当前待匹配数据进行偏移并定位,并在新的匹配窗口的长度内对第一字符块进行更新,能够有效利用位向量掩码表的空间,降低过滤通过率,提升匹配速度。
需要说明的是,在本发明的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行***执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
Claims (10)
1.一种海量特征串集合的匹配方法,其特征在于,包括以下步骤:
接收当前待匹配数据,并生成与所述当前待匹配数据对应的字符转换函数和对应的位向量掩码表;
根据特征串集合中的特征串所包含字符个数确定匹配窗口长度,并为当前待匹配数据设置初始偏移值;
根据所述初始偏移值为起点对所述当前待匹配数据进行偏移并定位,获取所述匹配窗口长度内以所述匹配窗口末端为终点,长度为预设第一长度的字符块并作为第一字符块;
根据预设快表判断所述第一字符块是否为所述特征串集合的子特征串;
在所述第一字符块为所述特征串集合的子特征串时,获取所述匹配窗口长度内以所述匹配窗口始端为起始,长度为预设第二长度的字符块并作为第二字符块;
根据所述对应的字符转换函数计算所述第二字符块的转换值,并从所述对应的位向量掩码表读取与所述转换值对应的位向量并作为当前匹配向量;
根据所述当前匹配向量对所述当前待匹配数据进行特征串匹配;
在所述第一字符块不为所述特征串集合的子特征串时,以当前读入的所述第一字符块的起点位置的下一位作为所述匹配窗口的起点;
基于新的匹配窗口的起点对所述当前待匹配数据进行偏移并定位,并在新的所述匹配窗口的长度内对所述第一字符块进行更新。
2.如权利要求1所述的海量特征串集合的匹配方法,其特征在于,所述根据所述当前匹配向量对所述当前待匹配数据进行特征串匹配,包括:
将所述当前匹配向量和预设判断向量作与运算,得到运算结果;
在所述运算结果为未在所述当前待匹配数据中命中所述特征串集合中的特征串的第一运算结果时,获取所述匹配窗口长度内以所述第二字符块终点位置的下一位为起始,长度为预设第二长度的字符块并作为第三字符块,并根据所述第三字符块对所述第二字符块进行更新;
在所述运算结果为在所述当前待匹配数据中命中所述特征串集合中的特征串的第二运算结果时,获取所述第二字符块对应的哈希值,并根据所述哈希值及预设哈希表对命中情况进行确认。
3.如权利要求2所述的海量特征串集合的匹配方法,其特征在于,所述预设哈希表包括第一哈希表和第二哈希表,所述根据所述哈希值及预设哈希表对命中情况进行确认,包括:
获取所述第一哈希表的行数和列数,并计算所述行数和列数的乘积得到乘积值;
对所述哈希值和所述乘积值进行求余取模运算,得到模值;
判断所述第一哈希表中与所述模值对应位的位值是否为1;
在所述对应位的位值不为1时,判定所述命中情况为所述当前待匹配数据与所述特征串集合匹配失败;
在所述对应位的位值为1时,根据所述哈希值判断所述第二哈希表中是否存在所述特征串集合中的特征串;
在不存在所述特征串集合中的特征串时,判定所述命中情况为所述当前待匹配数据与所述特征串集合匹配失败;
在存在所述特征串集合中的特征串时,判定所述命中情况为所述当前待匹配数据与所述特征串集合匹配成功。
4.如权利要求3所述的海量特征串集合的匹配方法,其特征在于,在所述接收当前待匹配数据之前,还包括:
根据所述特征串集合中的每个特征串的哈希值生成所述第一哈希表和所述第二哈希表。
5.如权利要求1所述的海量特征串集合的匹配方法,其特征在于,所述生成与所述当前待匹配数据对应的字符转换函数和对应的位向量掩码表,包括:
生成与所述当前待匹配数据所支持的编码类型对应的字符转换函数和对应的位向量掩码表。
6.如权利要求1所述的海量特征串集合的匹配方法,其特征在于,在所述接收当前待匹配数据之后,还包括:
获取所述特征串集合中长度为预设第一长度的多个字符块;
计算所述多个字符块中每个字符块的哈希值;
根据所述每个字符块的哈希值生成所述预设快表。
7.如权利要求5所述的海量特征串集合的匹配方法,其特征在于,所述编码类型包括以下至少之一:
GB2312编码、GBK编码,以及UTF-8编码。
8.一种海量特征串集合的匹配装置,其特征在于,包括:
接收模块,用于接收当前待匹配数据;
第一生成模块,用于生成与所述当前待匹配数据对应的字符转换函数和对应的位向量掩码表;
确定模块,用于根据特征串集合中的特征串所包含字符个数确定匹配窗口长度,并为当前待匹配数据设置初始偏移值;
第一处理模块,用于根据所述初始偏移值为起点对所述当前待匹配数据进行偏移并定位,获取所述匹配窗口长度内以所述匹配窗口末端为终点,长度为预设第一长度的字符块并作为第一字符块;
判断模块,用于根据预设快表判断所述第一字符块是否为所述特征串集合的子特征串;
第一获取模块,用于在所述第一字符块为所述特征串集合的子特征串时,获取所述匹配窗口长度内以所述匹配窗口始端为起始,长度为预设第二长度的字符块并作为第二字符块;
第一计算模块,用于根据所述对应的字符转换函数计算所述第二字符块的转换值,并从所述对应的位向量掩码表读取与所述转换值对应的位向量并作为当前匹配向量;
匹配模块,用于根据所述当前匹配向量对所述当前待匹配数据进行特征串匹配;
第二处理模块,用于在所述第一字符块不为所述特征串集合的子特征串时,以当前读入的所述第一字符块的起点位置的下一位作为所述匹配窗口的起点;
更新模块,用于基于新的匹配窗口的起点对所述当前待匹配数据进行偏移并定位,并在新的所述匹配窗口的长度内对所述第一字符块进行更新。
9.如权利要求8所述的海量特征串集合的匹配装置,其特征在于,所述匹配模块包括:
运算子模块,用于将所述当前匹配向量和预设判断向量作与运算,得到运算结果;
第一获取子模块,用于在所述运算结果为未在所述当前待匹配数据中命中所述特征串集合中的特征串的第一运算结果时,获取所述匹配窗口长度内以所述第二字符块终点位置的下一位为起始,长度为预设第二长度的字符块并作为第三字符块,并根据所述第三字符块对所述第二字符块进行更新;
第二获取子模块,用于在所述运算结果为在所述当前待匹配数据中命中所述特征串集合中的特征串的第二运算结果时,获取所述第二字符块对应的哈希值;
确认子模块,用于根据所述哈希值及预设哈希表对命中情况进行确认。
10.如权利要求9所述的海量特征串集合的匹配装置,其特征在于,所述预设哈希表包括第一哈希表和第二哈希表,所述确认子模块包括:
获取单元,用于获取所述第一哈希表的行数和列数,并计算所述行数和列数的乘积得到乘积值;
运算单元,用于对所述哈希值和所述乘积值进行求余取模运算,得到模值;
第一判断单元,用于判断所述第一哈希表中与所述模值对应位的位值是否为1;
第一判定单元,用于在所述对应位的位值不为1时,判定所述命中情况为所述当前待匹配数据与所述特征串集合匹配失败;
第二判断单元,用于在所述对应位的位值为1时,根据所述哈希值判断所述第二哈希表中是否存在所述特征串集合中的特征串;
第二判定单元,用于在不存在所述特征串集合中的特征串时,判定所述命中情况为所述当前待匹配数据与所述特征串集合匹配失败;
所述第二判定单元还用于在存在所述特征串集合中的特征串时,判定所述命中情况为所述当前待匹配数据与所述特征串集合匹配成功。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611059646.2A CN106599097B (zh) | 2016-11-24 | 2016-11-24 | 海量特征串集合的匹配方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611059646.2A CN106599097B (zh) | 2016-11-24 | 2016-11-24 | 海量特征串集合的匹配方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106599097A true CN106599097A (zh) | 2017-04-26 |
CN106599097B CN106599097B (zh) | 2021-06-25 |
Family
ID=58593416
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611059646.2A Active CN106599097B (zh) | 2016-11-24 | 2016-11-24 | 海量特征串集合的匹配方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106599097B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110019325A (zh) * | 2018-08-15 | 2019-07-16 | 北京天地和兴科技有限公司 | 一种工业规则的快速匹配方法 |
CN110244973A (zh) * | 2018-03-09 | 2019-09-17 | 高德信息技术有限公司 | 数据更新包的生成方法、装置及数据更新方法、装置 |
CN110620634A (zh) * | 2018-06-19 | 2019-12-27 | 中兴通讯股份有限公司 | 一种前向纠错的切换方法、装置及计算机存储介质 |
CN111159490A (zh) * | 2019-12-13 | 2020-05-15 | 杭州迪普科技股份有限公司 | 一种模式字符串的处理方法、装置及设备 |
CN113239156A (zh) * | 2021-06-04 | 2021-08-10 | 网易(杭州)网络有限公司 | 文本处理方法、装置、计算设备以及介质 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5051745A (en) * | 1990-08-21 | 1991-09-24 | Pkware, Inc. | String searcher, and compressor using same |
US20070162397A1 (en) * | 2005-12-27 | 2007-07-12 | International Business Machines Corporation | Method, apparatus, and program product for processing product evaluations |
CN101359325A (zh) * | 2007-08-01 | 2009-02-04 | 北京启明星辰信息技术有限公司 | 一种快速内容分析的多关键词匹配方法 |
CN101398820A (zh) * | 2007-09-24 | 2009-04-01 | 北京启明星辰信息技术有限公司 | 一种大规模关键词匹配方法 |
US20100194608A1 (en) * | 2009-02-05 | 2010-08-05 | Artan Sertac | Generating a boundary hash-based hierarchical data structure associated with a plurality of known arbitrary-length bit strings and using the generated hierarchical data structure for detecting whether an arbitrary-length bit string input matches one of a plurality of known arbitrary-length bit strings |
CN102053951A (zh) * | 2009-10-28 | 2011-05-11 | 无锡华润上华半导体有限公司 | 一种特殊字符处理方法 |
CN103412858A (zh) * | 2012-07-02 | 2013-11-27 | 清华大学 | 用于文本或网络内容分析的大规模特征匹配的方法 |
CN103544208A (zh) * | 2013-08-16 | 2014-01-29 | 东软集团股份有限公司 | 海量特征串集合的匹配方法及*** |
CN104881439A (zh) * | 2015-05-11 | 2015-09-02 | 中国科学院信息工程研究所 | 一种空间高效的多模式串匹配方法和*** |
CN105554152A (zh) * | 2015-12-30 | 2016-05-04 | 北京神州绿盟信息安全科技股份有限公司 | 一种数据特征提取的方法及装置 |
-
2016
- 2016-11-24 CN CN201611059646.2A patent/CN106599097B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5051745A (en) * | 1990-08-21 | 1991-09-24 | Pkware, Inc. | String searcher, and compressor using same |
US20070162397A1 (en) * | 2005-12-27 | 2007-07-12 | International Business Machines Corporation | Method, apparatus, and program product for processing product evaluations |
CN101359325A (zh) * | 2007-08-01 | 2009-02-04 | 北京启明星辰信息技术有限公司 | 一种快速内容分析的多关键词匹配方法 |
CN101398820A (zh) * | 2007-09-24 | 2009-04-01 | 北京启明星辰信息技术有限公司 | 一种大规模关键词匹配方法 |
US20100194608A1 (en) * | 2009-02-05 | 2010-08-05 | Artan Sertac | Generating a boundary hash-based hierarchical data structure associated with a plurality of known arbitrary-length bit strings and using the generated hierarchical data structure for detecting whether an arbitrary-length bit string input matches one of a plurality of known arbitrary-length bit strings |
CN102053951A (zh) * | 2009-10-28 | 2011-05-11 | 无锡华润上华半导体有限公司 | 一种特殊字符处理方法 |
CN103412858A (zh) * | 2012-07-02 | 2013-11-27 | 清华大学 | 用于文本或网络内容分析的大规模特征匹配的方法 |
CN103544208A (zh) * | 2013-08-16 | 2014-01-29 | 东软集团股份有限公司 | 海量特征串集合的匹配方法及*** |
CN104881439A (zh) * | 2015-05-11 | 2015-09-02 | 中国科学院信息工程研究所 | 一种空间高效的多模式串匹配方法和*** |
CN105554152A (zh) * | 2015-12-30 | 2016-05-04 | 北京神州绿盟信息安全科技股份有限公司 | 一种数据特征提取的方法及装置 |
Non-Patent Citations (2)
Title |
---|
AIN ZUBAIDAH MOHDSALEH: "A Method for Web Application Vulnerabilities Detection by Using Boyer-Moore String Matching Algorithm", 《PROCEDIA COMPUTER SCIENCE》 * |
孙德才: "基于匹配区域特征的相似字符串匹配过滤算法", 《计算机研究与发展》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110244973A (zh) * | 2018-03-09 | 2019-09-17 | 高德信息技术有限公司 | 数据更新包的生成方法、装置及数据更新方法、装置 |
CN110244973B (zh) * | 2018-03-09 | 2022-09-16 | 阿里巴巴(中国)有限公司 | 数据更新包的生成方法、装置及数据更新方法、装置 |
CN110620634A (zh) * | 2018-06-19 | 2019-12-27 | 中兴通讯股份有限公司 | 一种前向纠错的切换方法、装置及计算机存储介质 |
CN110019325A (zh) * | 2018-08-15 | 2019-07-16 | 北京天地和兴科技有限公司 | 一种工业规则的快速匹配方法 |
CN111159490A (zh) * | 2019-12-13 | 2020-05-15 | 杭州迪普科技股份有限公司 | 一种模式字符串的处理方法、装置及设备 |
CN111159490B (zh) * | 2019-12-13 | 2023-05-26 | 杭州迪普科技股份有限公司 | 一种模式字符串的处理方法、装置及设备 |
CN113239156A (zh) * | 2021-06-04 | 2021-08-10 | 网易(杭州)网络有限公司 | 文本处理方法、装置、计算设备以及介质 |
CN113239156B (zh) * | 2021-06-04 | 2022-05-17 | 杭州网易智企科技有限公司 | 文本处理方法、装置、计算设备以及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN106599097B (zh) | 2021-06-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106599097A (zh) | 海量特征串集合的匹配方法和装置 | |
Belazzougui et al. | Alphabet-independent compressed text indexing | |
CN108255958B (zh) | 数据查询方法、装置和存储介质 | |
CN106797446B (zh) | 基于存储器的历史搜索 | |
US8972415B2 (en) | Similarity search initialization | |
JP5985040B2 (ja) | データ解析装置、及びその方法 | |
WO2004079631A2 (en) | Method and arrangement for searching for strings | |
WO2021072874A1 (zh) | 基于双数组的位置查询方法、装置、计算机设备及存储介质 | |
US20140317134A1 (en) | Multi-stage parallel multi-character string matching device | |
CN105589894B (zh) | 文档索引建立方法和装置、文档检索方法和装置 | |
JP2000163442A (ja) | 記号辞書作成方法及び記号辞書検索方法 | |
CN116562297B (zh) | 基于HTrie树的中文敏感词变形体识别方法及*** | |
Boucher et al. | PFP Compressed Suffix Trees∗ | |
JP2009116559A (ja) | 大量配列の一括検索方法及び検索システム | |
CN108628907A (zh) | 一种用于基于Aho-Corasick的Trie树多关键词匹配的方法 | |
KR100417908B1 (ko) | 처리 회로 및 검색 프로세서 회로 | |
JP2008541272A (ja) | 署名生成および関連性を有するマッチングエンジン | |
WO2011073680A1 (en) | Improvements relating to hash tables | |
JP2014232523A (ja) | サブワード有限状態機械を利用する探索装置 | |
JP4208326B2 (ja) | 情報索引装置 | |
Grossi et al. | Motif trie: An efficient text index for pattern discovery with don't cares | |
Ferragina et al. | Learned monotone minimal perfect hashing | |
Roy et al. | A survey of data structures and algorithms used in the contextof compression upon biological sequence | |
JPH07105224A (ja) | 文字配列検索方法 | |
CN111831876B (zh) | 查询方法、设备和存储介质 |
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 |