CN102799600B - 一种基于编码关联的多模式匹配算法及系统 - Google Patents
一种基于编码关联的多模式匹配算法及系统 Download PDFInfo
- Publication number
- CN102799600B CN102799600B CN201210113672.4A CN201210113672A CN102799600B CN 102799600 B CN102799600 B CN 102799600B CN 201210113672 A CN201210113672 A CN 201210113672A CN 102799600 B CN102799600 B CN 102799600B
- Authority
- CN
- China
- Prior art keywords
- value
- keyword
- character
- pattern string
- matching
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于编码关联的多模式匹配算法及系统。所述系统包括:关键字组输入模块,用于获取匹配关键字集合;Goto函数生成模块,用于生成辅助结构Goto函数;FailedJump函数生成模块,用于生成辅助结构FailedJump函数;匹配执行模块,用于读取搜索对象并对其进行多关键字匹配。本算法的特色在于:通过字符拆分,优化了Wang算法在Unicode编码、中文语义环境下的空间存储结构;通过利用编码关联,消除了Wang算法在编码转换后的错位匹配,并提升了Wang算法的最大跳转值,从而提升了当前编码环境下Wang算法的运行速度。本发明算法可广泛应用于对以Unicode为编码方式的关键信息扫描定位、各类电子文档中的关键字匹配检查等计算机产品中。
Description
技术领域
本发明属于文本内容处理与查找技术领域,特别涉及一种基于编码关联的多模式匹配算法及系统。
背景技术
电子文档,伴随着信息技术的发展与PC电脑的普及,已成为当今社会中信息的重要载体。由于电子文档的大量应用与广泛普及,对于电子文档的相关信息处理技术,如电子文档中指定关键字的索引建立、一些涉密文件的指定关键字检查等,变的愈发重要。多模式匹配算法作为一种快速的在目标内容段中寻找指定关键字的算法,是对电子文档进行关键字信息处理的核心技术,所使用多模式匹配算法的空间性能,将直接决定整个电子文档关键信息处理系统的可行性,而所使用多模式匹配算法的时间性能,将直接决定整个电子文档关键信息处理系统的执行效率。
对于电子文档的关键字信息处理,第一步是解析并提取出电子文档中的有效内容字段,由于常用的电子文档,如微软Word2003系列中的doc、ppt、xls等类型文件,对于中文字符,都使用Unicode方式对其进行编码,且主流的电子文档内容解码器,大部分也采用Unicode编码作为其提取信息后的编码载体,因此,直接使用获取的Unicode编码作为下一步匹配中模式串的编码环境,可以避免繁琐而耗时的编码类型转换(如果将Unicode编码通过API函数转换为ASCII或UTF8等编码,其时间消耗一般都大于对当前文本匹配串进行一次多模式匹配的时间消耗。),在时间、空间与稳定性上,都是较好的选择。综上,对于电子文档的中文关键字查找,其最常见而且最有效的编码环境,便是Unicode编码环境,因此有必要针对于电子文档关键字查找中的Unicode编码环境,针对性的设计更加实用而高效的多模式匹配算法,以实现对于电子文档中关键字处理的可行性与高效性。
多模式匹配算法作为计算机的基本算法之一,经历了长时间的发展,先后产生了多种巧妙的算法,如A-C算法、W-M算法、Wang算法等,这些算法的设计思路虽然各不相同,但都遵循着算法领域的通用规律,即或用空间消耗来换取时间效益,或用时间消耗来换取空间效益。以下将分别介绍上述三种算法。
A-C算法通过使用输入关键字集合构造自动状态机,来实现对多个关键字的并行匹配,参见图1,为使用关键字组:{arda,apple,care}构造的自动状态机。除了利用自动状态机来进行匹配串的字符状态转换,A-C算法还分别使用Failed函数与Output函数,来分别进行当字符失配时的跳转状态确定与匹配信息的输出与记录,两个函数的功能与生成方法分别如下:
1.失效函数(Failed函数):Failed(now)=Next,标识着在now节点发生失配的情况下,自动状态机的下一个转换状态Next。这个状态节点的特征是:从此状态节点向上直到根节点(状态0)所经历的所有输入字符路径,与从产生失效状态的节点now向上所经历的输入字符串或其子串完全相同。如果此类节点有多个,则选择这些节点中深度最大的节点。如果不存在满足条件的状态节点,则失效函数指向0状态节点。
2.输出函数(Output函数):用于当某个关键字匹配完成后,输出当前的匹配信息以及其它的一些标示码,需要注意的是,如果关键字集合中元素间存在着包含与被包含关系,则应在到达输出状态时同时输出当前的匹配关键字与其所包含的子关键字信息,以防止输出遗漏。
W-M算法则在初始化阶段,生成三个辅助表:SHIFT[h]表、HASH[h]表与PREFIX表。其中,SHIFT[h]表用于确定当前匹配窗口内Length个字符集合的哈希值h所对应的最大跳转距离;HASH[h]表标示关键字中最后Length个字符的哈希值为h的所有关键字的链表,是当SHIFT[h]值为0时的所有可能发生匹配的关键字的集合;而PREFIX表由各个关键字的一定长度的前缀字符的哈希值生成,用于进一步比较过滤当前窗口下具有相同后缀HASH值的关键字,以减少实际比较的次数。W-M算法通过上述三个辅助表,来实现多模式下关键字的快速跳转。W-M算法的流程步骤如下所示:
1.计算当前扫描窗口的最后Length个字符的哈希值h。
2.如果SHIFT[h]>0,则向后跳跃SHIFT[h],并转第1步继续;否则进行第3步。
3.计算当前匹配窗口的前缀的散列值prefix_hash,排除部分局部匹配的情况。
4.对于HASH[h]指向的列表的每个字符串,依次从后向前匹配当前窗口内字符,检查是否存在匹配。
5.将当前窗口向后移动一个字符,转1继续进行匹配,直到扫描完全部文件内容。
Wang算法属于A-C算法族,也是通过构造自动状态机来实现多模式匹配的字符状态转换,其在自动状态机构造上与A-C算法的实现相似,但是为A-C算法自动状态机的逆向形式,同样以模式串组:{arda,apple,care}为例,Wang算法构造的自动状态机参见图2。除了构造反向自动状态机,Wang算法还生成了利用了失配坏字符思想的失效跳转函数FailedJump,用于当失配发生时,对算法进行辅助的快速跳跃。
Wang算法的比较方式为从当前窗口的最右边,依次向左进行比较,如发生匹配,则输出或者记录匹配信息,如发生字符失配,则考察Wang算法当前窗口的最右边字符的下一个字符,读取此字符在FailedJump函数中的对应跳转值,进行快速的跳转。参见图3,为Wang算法跳转规则的公式表达形式,其中s为当前失配字符距当前模式串最左端的距离,z为匹配串长度,minlen为模式串组中的最小模式串长度。
分析上述三种算法,可以看到,Wang算法充分使用了坏字符思想,其可获取的最大跳转距离为minlen+1(minlen为模式串组中最短模式串长度),而W-M算法最大跳转距离为minlen,A-C算法由于每次只读入一个字节,且没有辅助的字符跳转函数,因此其跳转距离恒为1。考虑到关键信息检索环境为中文环境,由于中文环境的大字符集特点,失配的情况将较多出现,Wang算法取得其最大跳转值的几率相对较高,其平均跳转距离期望值也要大于W-M算法与A-C算法。因此其平均检索速度在中文语义下理论上应高于W-M算法与A-C算法,是一种更适用于中文语义环境下的多模式匹配算法。
由于Wang算法使用自动状态机来实现多模式匹配得状态转移。可以计算,在Unicode编码环境下,每个自动状态机的节点,都需要存放256*256个下一个状态的信息,如果以32位大小的指针来存储这些信息的话,则每个节点需要占用4*256*256=261244byte,大约是0.25M的空间,设模式串的个数为100,模式串的平均长度为10,则此自动状态机的节点所占用的空间将膨胀为:
Space=100*10*0.25M=250M
可见,此空间消耗已经相当惊人,由于空间消耗过于严重,在Unicode编码的大字符集环境下,直接使用Wang算法已经失去了实用性与可行性。而如果对从文档中提取的内容字段或从内容提取工具提取的内容字段进行编码转换,将其转换为单字节编码方式的ASCII编码或UTF8编码,又将额外的带来更高的时间消耗与空间复杂性,使算法的时间效益降低,流程变的复杂。
一种解决Wang算法空间膨胀问题的有效而巧妙的方法是使用编码字符拆分,即将文件内容段的每个以Unicode编码方式编码的字符拆分为两个相邻的编码范围在0至255之间的单字节码值,根据Wang算法存储空间的特点,编码拆分之后,Wang算法的主要存储空间消耗,将缩小为原来的1/256,在解决了存储空间膨胀问题的同时,也避免了繁琐的编码转换。编码拆分之后,由于拆码模式串长度将变为原有模式串长度的2倍,因此将原未拆码环境下的FailedJump函数最大跳转值换算为当前拆码环境下的跳转值:
MaxLengthI=2(minlen+1)=2minlen+2
此处,minlen为未拆码前的关键字组中最小关键字长度,而拆码环境下,Wang算法的FailedJump函数所能获取的最大跳转长度:
MaxLengthII=2minlen+1
由于在中文语义的大字符集环境下,局部匹配很难发生,因此实际的算法运行环境十分近似于算法运行时的最优情况,即完全不发生局部匹配,且匹配串中任意字符都不出现在关键字模式串中,此时算法的运行效率,将直接取决于FailedJump函数的最大跳转值,由于编码拆分后,FailedJump函数的最大跳转值变小,因此,Wang算法的运行效率将受到一定影响,下面给出在前面提到的最优情况下的分析:
在Unicode编码的最优运行情况下,设关键字组中最短模式串长度为N,目标匹配串长度为M,每次操作耗时为Δt,此时在Wang算法通过一次失配比较,就可以跳过N+1个字节,所以整个匹配过程的总时间消耗为:
Timel=Δt*M/(N+1)
编码拆分之后,关键字组中最短模式长度变为2N,匹配串长度为2M,此时Wang算法通过一次失配比较,可以跳过2N+1个字节(因为Wang算法考察的为当前窗口的下一个字符),所以整个匹配过程的总时间消耗为:
Time2=Δt*2M/(2N+1)
所以,两种情况下的时间消耗比值Rate为:
Rate=Time1/Time2=(2N+1)/(2N+2)
如上式,可知,编码拆分后的时间消耗,变为拆分之前的(2N+2)/(2N+1)倍,则当N值很小时,匹配耗时将会有较大膨胀。如令N=3,对应最短关键字在编码拆分后的长度为6,此时Rate=8/7,即时间消耗变为编码拆分前的8/7=1.14倍。可见,强制编码拆分虽然避免了繁琐的编码转换,同时解决了Wang算法的存储空间消耗过大问题,但是对于Wang算法的时间性能,将产生一定影响。
综上,有必要针对与电子文档最常使用的Unicode编码环境,设计一种新的多模式匹配算法,在保证此算法在Unicode编码环境下的消耗空间可用的情况下,还应有着更优秀的时间性能,使相关电子产品在实用的前提下,同时能够适应各种时效性要求较高的电子文档关键字处理环境,拥有更高的运行速度。
发明内容
为解决Wang算法在中文语义、Unicode编码环境下的空间膨胀问题,同时保证算法的运行效率,本发明提出了一种基于编码关联的多模式匹配算法及系统,所述具体方案如下:
一种建立反向自动状态机Goto函数的方法,所述方法包括:
根据预设的关键字分隔符,分割输入的多关键字组,得到分割后的子关键字集合;
根据已分割后的子关键字集合,将集合中每个子关键字各个字符的码值进行拆分,即将一个以Unicode为编码方式的中文汉字,看做为两个编码范围在0至255的单字节,分割关键字编码后,得到编码范围缩小,同时关键字长度加倍的拆码模式串,再使用此拆码模式串,以此模式串的最后字节为起点,反向输入自动状态机,生成状态转移函数Goto函数。
一种建立失效跳转函数FailedTable函数的方法,所述方法包括:
根据预设的关键字分隔符,分割输入的多关键字组,得到分割后的子关键字集合;
根据分割后各关键字集合,对各个关键字中字符的码值进行拆分,生成拆码模式串;构造长度为当前编码范围(转码后的码值范围为0-255)大小的失效跳转表FailedTable,FailedTable表的初始值设定为2minLen+2,其中minLen为当前关键字集合中未拆码前的最小模式串长度。
根据输入拆码后的关键字集合中各拆码元素,以拆码模式串中每个原Unicode编码的低半位字符的对应跳转值,替换FailedTable表中角标与当前拆码模式串的编码值相等位置的跳转值,设JumpLen为当前码值对应的跳转值,PatterLen为当前拆码模式串的长度,i为当前码值位置到当前拆码模式串最末尾字节的字节距,则拆码模式串中每个码值对应的跳转值计算方程为:
JumpLen=PatterLen-i,
如FailedTable表中同一角标位置的跳转值对应于多个拆码模式串中码值,则选择最小跳转值改写FailedTable表的对应项。
一种应用于电子文档中多模式匹配的系统,所述系统装置包括:
初始化模块,使用以分隔符作为分割标志的多关键字组为输入,对划分后的得到的关键字集合中元素进行编码拆分,依次输入自动状态机,生成Goto函数,再以每个码值拆分编码后的低位编码,生成FailedJump函数。
文本内容提取模块,用于提取电子文档或其它信息载体中的有效内容,作为多关键字匹配的目标文本对象。
匹配执行模块,以从电子文档中获取的以Unicode为编码方式的有效内容段做为输入,使用初始化模块中得到的Goto函数与FailedJump函数,对文档有效内容进行并行多关键字匹配。
本发明所提供的技术方案的有益效果是:
通过对以Unicode作为编码方式的关键字进行以字节为单位的码值拆分,在避免了繁琐的编码转换的同时,优化了Wang算法的存储结构,解决了Wang算法在Unicode编码环境下的存储空间膨胀问题;通过利用Unicode编码下的字符关联性,优化了Wang算法中FailedJump函数的结构,改良其跳转规则,使改良算法在同等的编码环境下相较于传统Wang算法,有着更高的处理速度。
附图说明
图1是A-C算法的自动状态机构成图。
图2是Wang算法的逆向自动状态机构成图。
图3是Wang算法跳转规则的公式表达形式。
图4是发明改良算法的跳转说明图。
图5是传统Wang算法的跳转说明图。
图6是使用输入关键字组创建自动状态机与失效跳转函数的流程图。
图7是使用发明中多模式匹配系统对电子文档进行多关键字匹配的流程图。
图8是实施例例子中发明算法的失效跳转函数FailedJump函数跳转表。
图9是实施例例子中传统Wang算法的失效跳转函数FailedJump函数跳转表。
具体实施方式
为使本发明之目的、技术方案和优点阐述更加清晰,下面将结合附图,对本发明做进一步的详细描述。
本发明所述建立自动状态机与失效跳转函数的方法具体如下:根据预设的关键字串分隔符,分割输入的连接关键字组,得到分割后的子关键字集合;根据所获取子关键字集合中各个元素的成员字符,进行字节拆分,反向生成状态转移函数Goto函数;根据所获取子关键字集合中各个元素的成员字符,进行字节拆分,并使用每个码值拆分后的低位字节,生成失效跳转函数FailedJump函数。
其中,根据所获取子关键字集合中各个元素的成员字符,进行字节拆分,并反向生成状态转移函数Goto函数,具体为:
根据获取的已分割的关键字集合,依次将每个子关键字字符的各个码值进行以字节为单位的拆分,即将一个以Unicode为编码方式的中文汉字,看做为两个编码范围在0至255的单字节编码,拆分关键字编码后,得到编码范围缩小,同时关键字长度加倍的拆码模式串SplitStr[i],i为关键字模式串组的子模式串编号,拆码后的模式串编号与其拆码前的模式串编号一一对应。再使用当前i值对应的拆码模式串SplitStr[i],以模式串的最后字节为起点,反向输入自动状态机,生成状态转移函数Goto函数。由于Goto函数的存储空间的最大消耗:用于存放下一结点状态信息的Next数组,其大小为当前码制编码的取值范围,因此,拆码之后,由于编码范围缩小,Next数组所占存储空间也减小,具体减小为原有存储大小的1/256。因此,由于Next数组为存储空间的主要消耗,可知拆码之后Goto函数的整体空间消耗也将降为原有消耗的大约1/256。
其中,根据所获取子关键字串组,进行字节拆分,并使用每个码值拆分后的低位字节,生成失效跳转函数FailedJump函数,具体为:
构造长度为字符拆码后的编码范围(拆码后的码值范围为0-255)大小的失效跳转表FailedTable,不同于在当前编码环境下的Wang算法,发明所提到算法的FailedTable表的初始值设定为2minLen+2,其中minLen为模式串组以Unicode为编码方式,尚未进行编码拆分前的最小模式串长度。第一个加数之所以为2minLen,是因为由于进行了编码拆分,模式串最短长度已变为原来的2倍,即在拆分模式串组中,其最短长度为2minLen,则传统Wang算法中,其默认跳转值在此编码环境下应为2minLen+1,而改良算法的第二个加数之所以由传统Wang算法的1增长为2,是因为Unicode编码的两个字节是一个整体,同一个码值拆分得到的两个单字节,其本身具有关联性,因此,可利用此关联性,在生成失效跳转表时,只使用每个模式串中原字符拆分后得到中的第二个字节作为考察码值,在某次匹配失效后,则直接对FailedTable表输入当前窗口最右端字符位置向右偏移2个位置处的字符,如此字符不在任何子拆分模式串中出现,则可将当前考察窗口最左端到当前输入字符之间的2minLen+2个拆分字符全部跳过,因此其跳转的最大距离为2minLen+2。参见图4,为改良算法的跳转说明图,参见图5,为传统Wang算法的跳转说明图。在此情况下,设模式串组中最短模式串长度为N,目标匹配串长度为M,每次操作耗时为Δt,则对关键字模式串与匹配串进行编码拆分之后,最短模式串长度在当前编码环境下变为2N,而匹配串长度则变为2M。此时在最优情况下,发明所述算法的时间消耗为:
TimeI=Δt*2M/(2N+2)=Δt*M/(N+1)
而同等编码环境下,传统Wang算法的时间消耗为:
TimeII=Δt*2M/(2N+1)
可以计算,在Unicode编码、编码拆分解析的环境下,改良算法较Wang算法速度的提升率为:
RateI=(1/TimeI)/(1/TimeII)
=[Δt*2M/(2N+1)]/[Δt*M/(N+1)]
=(2N+2)/(2N+1)
当最短模式长度为2时,即最短关键字是两个汉字的单词,RateAdd=6/5=1.2即WA-W算法在此情况下的速度为Wang算法的1.2倍,即较Wang算法提速约20%。
同上述环境,则未进行拆码前在直接Unicode编码环境下,Wang算法的时间消耗为:
TimeIII=Δt*M/(N+1)
则此情况下,改良算法与直接在Unicode编码环境下使用Wang算法的速度比值为:
RateII=(1/TimeI)/(1/TimeIII)=1
上述论述所使用之最优情况,为匹配串当前读入字符在自动状态机第一层节点即无法匹配,然后直接读取失配后相应的考察字符对应的跳转值的情况,由于中文的大字符集语义、系统实际使用时所遇到的关键字频率较小,在实际情况中遇到的环境,是非常逼近于理论上的最优情况的,综上,可知本发明实施例所提供之技术方案,在解决了Unicode编码环境下的A-C算法族普遍存在的空间膨胀问题的同时,也最大程度补偿了因优化存储空间而造成的算法运行效率上的损失,且在同等编码环境下,本发明所提供之技术方案在运行效率上也要优于传统Wang算法,有着更高的处理速度,具体内容请参见如下实施例:
实施例1
参见图6,本发明实施例提供了一种建立自动状态机与失效跳转函数的方法。该方法利用对Unicode编码字符进行编码拆分,生成Goto函数,从而优化了传统Wang算法的存储空间,利用编码字符关联,生成Failedjump函数,补偿了因优化存储空间而造成的运行效率损失,并提升了在同等编码环境下的算法运行速度,具体步骤如下:
101:输入关键字模式组,根据预设的关键字组分隔符,分割输入的关键字组,得到分割后的关键字集合;
其中关键字模式组,为以预先设定好的分隔符对多关键字模式串进行连接得到的整体模式串,为了方便选取多关键字后的整体输入。
例如,以关键字组合{成都,重庆}为例,预设分隔符为‘丨’,则输入模式连接串为“成都丨重庆”,以‘丨’为分隔符分割后,得到用于下一步处理的{成都,重庆}子关键字。
102:以分割后获取的子关键字为输入,生成反向Goto函数。
其中,在生成反向Goto函数之前,应先对各个子关键字编码值进行以字节为单位的编码拆分,得到拆码模式串,再以此拆码模式串来生成反向Goto函数,反向Goto函数的生成同传统Wang算法相同。
103:同样以分割后获取的子关键字为输入,生成辅助跳转函数FailedTable函数,具体内容包括:
103A:生成容量为当前编码范围大小(0-255)的数组。
103B:初始化步骤103A中生成的数组,将数组中的所有值填充为拆分后模式串组中以字节为长度单位的最小模式串长度2minle n+2。
以101所提到例子为例,模式串组{成都,重庆}在Unicode编码方式下,为{0x10620xfd90,0xcd91 0x865e};其最小模式串长度为2,编码拆分后,模式串组变为{0x100x62 0xfd 0x90,0xcd 0x91 0x86 0x5e},此时最小模式串长度变为2*2=4,因此202生成的数组中初始化值为4+2=6。
103C:根据输入拆码模式串组中各拆码模式串,以拆码模式串中每个原Unicode编码的低半位字符的对应跳转值,替换FailedTable表中角标与当前拆码模式串的编码值相等位置的跳转值,具体为:
201:设JumpLen为当前码值对应的跳转值,PatterLen为当前拆码模式串的长度,i为当前码值位置到当前拆码模式串最末尾字节的字节距,则转码模式串中每个码值对应的跳转值计算方程为:
JumpLen=PatterLen-i,
202:如FailedTable表中同一角标位置的跳转值对应于多个拆码模式串中码值,则选择最小跳转值改写FailedTable表的对应项。
实施例2
参见图7,本发明实施例提供了一种应用于电子文档中多模式匹配的系统,利用初始化模块生成的两个函数,对从电子文档或其它环境获取的以Unocode为编码方式的有效内容段,进行快速的并行多关键字匹配,其系统包括:
初始化模块,使用步骤102与步骤103所述方法初始化生成Goto函数与FailedTable函数。
文本内容提取模块,用于提取电子文档或其它信息载体中的有效内容,作为多关键字匹配的目标文本对象。
其中,输出的被检测的目标文本对象,应为从以文本内容提取模块获取的、以Unicode编码作为中文编码方式的电子文档(doc、xls、ppt以及部分txt文件)中直接获取的内容段以及以Unicode编码作为文本抽取内容载体的文本抽取器(pdf、ceb抽取器)的输出内容段,且不经过转码,直接作为被匹配对象。
匹配执行模块,使用初始化模块所生成的Goto函数与FailedTable函数,对输入被检测的目标文本对象,进行快速的多模式并行匹配。
例如,输入多关键字组仍为{成都,重庆},而获取的文本内容为以Unicode为编码方式的“梦里不知身是客,一响贪欢”,则初始化模块生成Goto函数的第一层入口值为(0x90,0x5e),所生成失效FailedTable函数结构参见图8。文本内容提取模块提取有效文本内容在计算机内部的编码为:“0xa6 0x68 0xcc 0x910x0d 0x4e 0xe5 0x77 0xab 0x8e0x2f 0x66 0xa2 0x5b 0x0c 0xff0x00 0x4e 0xcd 0x54 0x2a 0x8d 0x22 0x6b”。
匹配起始位置为输入匹配串的第minlen个字符,对于拆码匹配串,为第2minlen个字符,即当前例子的‘0x91’字符,由于‘0x91’不在Goto函数第一层入口,因此属于失配情况,则本发明算法考察当前窗口的隔一个位置的字符,即‘0x4e’,将‘0x4e’作为FailedTable函数输入,获取其安全跳转至为6,则当前窗口右边界跳至字符‘0x8e’继续进行。
作为对比,图9给出了在当前编码环境下的传统Wang算法的FailedTable函数,当字符‘0x91’发生失配后,Wang算法读取当前窗口下一个字符0x0d的跳转值,通过图9,可知此跳转值为5,因此窗口右边界跳至字符‘0xab’处继续进行,同时可以看到,0xab实际为某字符的高半位字符,而Goto函数的第一层,由拆码模式串组中各模式串的最后一个字节的低半位生成,此类比较或不匹配,即使匹配,也是错位匹配,将产生额外的操作数,因此,可以看到,理论上的一般情况下,本发明算法相较于传统Wang算法,可以获取更大的跳转距离,因此有着更高效的运行效率。
当发生某个模式串的匹配,则记录匹配信息,然后将窗口向右移动一位继续进行,如此反复,直至扫描完整个匹配串。
本发明实施例所提供的技术方案,可以广泛应用于文档文本处理与信息处理等领域,如对PC机电子文档的关键字索引建立、敏感信息检查,也可以用于以Unicode为编码方式的中文关键字过滤与搜索等产品中。
本发明实施例中的具体步骤,可以通过软件变成实现,相应的软件程序可存储于可读取的存储介质中,如光盘、硬盘、移动存储介质等。
以上为本发明的具体实施例,但并不用以限制本发明,对于本技术领域的普通技术人员来说,凡在不脱离本发明原理的前提下,所做的任何修改、等同替换、改进等,均应包含在本发明的保护发明范围之内。
Claims (7)
1.一种应用于电子文档中多模式匹配的方法,其特征在于,所述方法包括:
根据预设的关键字分隔符,分割输入的多关键字组,得到分割后的子关键字集合;
根据所得关键字组,进行字符的字节拆分,并反向生成状态转移函数Goto函数;
根据所得关键字组,进行字符的字节拆分,并使用每个码值拆分后得到的低位字节,生成失效跳转函数FailedJump函数,具体为:
依次将关键字集合中元素的各个字符码值进行拆分,生成拆码模式串;构造长度为当前编码范围大小的失效跳转表FailedTable,FailedTable表的初始值为当前关键字模式串组中模式串拆分前的最小模式串长度minLen的两倍再加二,即2minLen+2;
依次计算各个拆码模式串的偶数位字符,即原来以Unicode编码的字符码值的低半位字符的对应跳转值,并用此跳转值重写FailedTable表中角标与当前拆码模式串的码值相等位置的跳转值,如FailedTable表同一位置值有多个对应的拆码模式串跳转值,则选取其中跳转值最小者,替换FailedTable表中对应位置的值。
2.如权利要求1所述的应用于电子文档中多模式匹配的方法,其特征在于,根据预设的关键字分隔符,分割输入的多关键字组,得到分割后的子关键字集合,具体为:
以Unicode编码为编码方式,设定指定的分隔符,依次以分隔符对同样以Unicode编码为编码方式的输入多关键字组进行划分,以得到待查找的关键字的集合。
3.如权利要求1所述的应用于电子文档中多模式匹配的方法,其特征在于,根据所得关键字组,进行字符的字节拆分,并反向生成状态转移函数Goto函数,具体为:
依次输入关键字集合中各个关键字,将每个关键字字符的各个码值进行拆分,即将一个以Unicode为编码方式的中文汉字,看做两个编码范围在0至255之间的单字节,分割关键字编码后,得到编码范围缩小,同时关键字长度加倍的拆码模式串,再使用此拆码模式串,以此模式串最后字节为起点,反向输入自动状态机,以生成状态转移函数Goto函数。
4.如权利要求1所述的应用于电子文档中多模式匹配的方法,其特征在于,根据所得关键字组,进行字符的字节拆分,并使用每个码值拆分后得到的低位字节,生成失效跳转函数FailedJump函数,具体为:
分别输入拆码模式串组中各拆码模式串,以拆码模式串中每个原Unicode编码的低半位字符的对应跳转值,替换FailedTable表中角标与当前拆码模式串的码值相等位置的跳转值,拆码模式串中每个码值对应的跳转值计算方程为:
JumpLen=PatterLen–i,
其中JumpLen为当前码值对应的跳转值,PatterLen为当前拆码模式串的长度,为以Unicode为编码方式的同模式串长度的2倍,i为当前码值位置到当前拆码模式串最末尾字节的距离,单位为字节距离;
如FailedTable表中同一角标位置的跳转值对应于多个拆码模式串中码值,则选择最小跳转值改写FailedTable表的对应项。
5.一种应用于电子文档中多模式匹配的系统,其特征在于,所述系统包括:
初始化模块,用于分隔输入多关键字组,获取关键字集合,并初始化算法所需要的两个函数:Goto函数与FailedJump函数;
文本内容提取模块,用于提取电子文档或其它信息载体中的有效内容,作为多关键字匹配的目标文本对象;
匹配执行模块,以从电子文档中获取的以Unicode为编码方式的有效内容段作为输入,使用初始化模块中得到的Goto函数与FailedJump函数,依据设定执行算法,对文档有效内容进行多关键字匹配;
所述初始化模块具体包括:
划分关键字单元,使用预设分隔符对输入关键字组进行关键字元素划分;
Goto函数生成单元,使用划分后的关键字组,进行编码拆分,生成Goto函数;
FailedJump函数生成单元,使用划分后的关键字组,进行编码拆分,并以每个码值拆分编码后的低位编码,生成FailedJump函数,具体为:
依次将关键字集合中元素的各个字符码值进行拆分,生成拆码模式串;构造长度为当前编码范围大小的失效跳转表FailedTable,FailedTable表的初始值为当前关键字模式串组中模式串拆分前的最小模式串长度minLen的两倍再加二,即2minLen+2;
依次计算各个拆码模式串的偶数位字符,即原来以Unicode编码的字符码值的低半位字符的对应跳转值,并用此跳转值重写FailedTable表中角标与当前拆码模式串的码值相等位置的跳转值,如FailedTable表同一位置值有多个对应的拆码模式串跳转值,则选取其中跳转值最小者,替换FailedTable表中对应位置的值。
6.如权利要求5所述的一种应用于电子文档中多模式匹配的系统,其特征在于,所述文本内容提取模块具体执行流程为:
根据当前待检查电子文档的文件类型,选择对应的文件内容提取函数,获取待检查类型电子文档中的有效内容段,作为关键字匹配的输入主体。
7.如权利要求5所述的一种应用于电子文档中多模式匹配的系统,其特征在于,所述匹配执行模块具体执行流程为:
以获取的文本内容有效字段为输入,使用初始化模块生成的Goto函数与FailedJump函数,依据预设算法规则,对输入文本进行多关键字匹配,如果发现匹配关键字,则记录匹配信息,用于进一步的处理分析。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210113672.4A CN102799600B (zh) | 2012-04-10 | 2012-04-10 | 一种基于编码关联的多模式匹配算法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210113672.4A CN102799600B (zh) | 2012-04-10 | 2012-04-10 | 一种基于编码关联的多模式匹配算法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102799600A CN102799600A (zh) | 2012-11-28 |
CN102799600B true CN102799600B (zh) | 2017-04-05 |
Family
ID=47198712
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210113672.4A Active CN102799600B (zh) | 2012-04-10 | 2012-04-10 | 一种基于编码关联的多模式匹配算法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102799600B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105337932A (zh) * | 2014-06-30 | 2016-02-17 | 杭州迪普科技有限公司 | 一种web应用防护方法及装置 |
CN106874294A (zh) * | 2015-12-14 | 2017-06-20 | 阿里巴巴集团控股有限公司 | 一种信息匹配方法及装置 |
CN107798004B (zh) * | 2016-08-29 | 2022-09-30 | 中兴通讯股份有限公司 | 关键词查找方法、装置及终端 |
CN108133052A (zh) * | 2018-01-18 | 2018-06-08 | 广州汇智通信技术有限公司 | 一种多关键字的搜索方法、系统、介质及设备 |
CN111814009B (zh) * | 2020-06-28 | 2022-03-01 | 四川长虹电器股份有限公司 | 一种基于搜索引擎检索信息的模式匹配方法 |
CN112800722B (zh) * | 2021-02-09 | 2024-04-26 | 柳州智视科技有限公司 | 基于语义理解的文字组织编码方法 |
CN112784127B (zh) * | 2021-03-12 | 2023-12-05 | 清华大学 | 多字符串模式匹配方法、装置、计算机设备及存储介质 |
-
2012
- 2012-04-10 CN CN201210113672.4A patent/CN102799600B/zh active Active
Non-Patent Citations (3)
Title |
---|
一种基于中文的多模式匹配算法;侯整风等;《仪器仪表学报》;20110630;第32卷(第6期);第83,84页 * |
改进的中文字串多模式匹配算法;沈洲等;《情报学报》;20020228;第21卷(第1期);第27-32页 * |
改进的多模式匹配算法;王永成等;《计算机研究与发展》;20020131;第39卷(第1期);第56页 * |
Also Published As
Publication number | Publication date |
---|---|
CN102799600A (zh) | 2012-11-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102799600B (zh) | 一种基于编码关联的多模式匹配算法及系统 | |
Gagie et al. | Optimal-time text indexing in BWT-runs bounded space | |
TWI480746B (zh) | 使用經結構化之資料儲存器達到較快速全文檢索 | |
CN104252469B (zh) | 用于模式匹配的方法、设备和电路 | |
EP0595064A2 (en) | Method and means providing static dictionary structures for compressing character data and expanding compressed data | |
Amir et al. | Text indexing and dictionary matching with one error | |
CN101576929B (zh) | 一种快速词条提示的实现方法 | |
CN103049709B (zh) | 基于生成元扩展彩虹表的密码恢复系统及其恢复方法 | |
CN102541995A (zh) | 对散列序列矩阵的索引和查询 | |
Amir et al. | Pattern matching in hypertext | |
US20130226885A1 (en) | Path-decomposed trie data structures | |
Barsky et al. | A survey of practical algorithms for suffix tree construction in external memory | |
Grossi et al. | Compressed su x arrays and su x trees with applications to text indexing and string matching | |
CN101251845A (zh) | 利用改进的Wu-Manber算法进行多模式串匹配的方法 | |
Bannai et al. | Indexing the bijective BWT | |
CN100361128C (zh) | 一种用于文本或网络内容分析的多关键词匹配方法 | |
CN102760173B (zh) | 一种自下而上的xml分支模式匹配方法 | |
Sohrabi et al. | Finding similar documents using frequent pattern mining methods | |
JPH0869476A (ja) | 検索システム | |
CN109828785B (zh) | 一种采用gpu加速的近似代码克隆检测方法 | |
JP5120263B2 (ja) | パターンマッチング装置及び方法 | |
CN113495901B (zh) | 一种面向可变长数据块的快速检索方法 | |
Belazzougui et al. | Compressed string dictionary look-up with edit distance one | |
KR101089722B1 (ko) | 프리픽스 트리 기반 색인 방법 및 장치, 그 기록 매체 | |
Chayapathi | Survey and comparison of string matching algorithms |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |