一种用于消除字符串模糊匹配冗余的过滤方法

文档序号:6380041阅读:793来源:国知局
专利名称:一种用于消除字符串模糊匹配冗余的过滤方法
技术领域
本发明涉及一种用于字符串匹配的过滤方法,特别是一种用于消除字符串模糊匹配中冗余的过滤方法,尤其适用于诸如中文等大字符集上的字符串匹配。
背景技术
字符串模糊匹配在入侵检测、移动短消息过滤、文本编辑、信息查询、自动索引、计算生物学、信息提取等领域均有重要应用,已经成为改善计算机本身性能的一个重要课题。
设s,t是两个字符串,ed(s,t)是指,把t转变成s所需要的修改次数,即s和t的差距。这里一次修改可以是插入、替换或删除一个字符。由修改的对称性,显然ed(s,t)=ed(t,s)。若ed(s,t)≤k,则称s是t的k-匹配。
显然,ed(s,t)反映了s和t的近似程度。那么,字符串模糊匹配研究的问题是给定长为n的字符串t,长为m的模式串p,一个正整数k<m,要找出所有的j使得t中存在某子串 使ed(s,p)≤k。
解决模糊字符串匹配是一种基于生成动态矩阵的方法,其时间复杂度为O(mn)。自从1980年P.Sellers发表该方法以来,许多人对之进行了改进。这些改进当中,最有效的是以下两种方法。
第一种方法是位向量方法。当今计算机中,整数字长w一般为32或64,因此,可将32或64次的比特运算用一次整数运算来完成,从而将计算机运算速度提高32或64倍。位向量方法正是利用了这一点,它最初由R.Baeza-Yates提出,应用于精确字符串匹配。1992年S.Wu、U.Manber首先将位向量应用于模糊字符串匹配,其时间复杂度为 R.Baeza-Yates等进一步将时间复杂度改进至 使得当m<<w时,对计算机字长的利用率进一步提高。
另一种有效的改进方法是过滤方法,它的原理是在进行字符串匹配前,先检查t是否满足一些必要条件;若满足,进行字符串匹配;否则,说明t中有部分区域肯定不与模式串p相匹配,则跳过这些区域,从而节省了整体搜索时间。
设对字符串t,模式串p进行模糊匹配,一般的匹配方法是从前到后,扫描t中的每个字符,不管t中字符的内容是什么。实际上,这个过程存在冗余。
附图1给出了一个冗余的例子。可以看到,t中第3、4个字符在p中不出现,所以,无论t中前两个字符是什么,均有ed(t1t2t3t4,p)≥2>k,即可断定前四个字符与p不存在满足要求的模糊匹配,所以,扫描前两个字符是多余的。

发明内容
本发明的目的是提供一种进一步改进的用于消除字符串模糊匹配中冗余的过滤方法,它适用于较大的字符集。
实验结果表明对于中文字符串,它的速度比目前世界上最快的过滤方法快10%~60%;比不用过滤方法的中文字符串模糊匹配快5~7倍;本发明的过滤方法非常有效地消除前述冗余现象,在应用于中文字符串时,可以过滤掉80%~85%的字符,大大提高了匹配效率。
本发明是这样实现的一种用于消除字符串模糊匹配中冗余的过滤方法,包括对字符串,长度为m的模式串进行模糊匹配,所允许的模糊度为k,当前正在扫描字符串中的第j个字符,所述方法还包括判断步骤从j+m-1往前扫描,出现在模式串中的字符为有用字符,其他字符为无用字符,当发现了多于模糊度的无用字符时,跳转至最近的一个有用字符处,开始新的匹配。
本发明设定对字符串t,长度为m的模式串p进行模糊匹配,允许的模糊度为k,并设当前正在扫描t中第j个字符。本发明过滤方法的过程为1、设置无用字符计数器(bad)为0,最近一个有用字符的位置(last)为m。
2、从后往前,对t中从第j+m-1到第j的每个字符,执行下列判断若当前字符在p中不出现,则bad增1;若bad大于k于,则跳转至3。
若当前字符在p中出现,则令last=当前字符的位置减去j;若last+bad小于k+1,则跳转至3。
3、如果bad大于k,则说明从第j到第j+last的所有字符都可以略过;否则说明本次过滤未发现可略过的字符,应从第j个字符开始进行正常的匹配。


图1是BPM匹配方法中存在冗余的示意图。
图2是本发明过滤方法的原理图。
图3是采用本发明过滤方法与其他模糊匹配方法的性能比较示意图。
具体实施例方式
图2中称出现在p中的字符为有用字符,其他字符为无用字符。该图显示在从j+m-1往前扫描的过程中,发现了多于k个的无用字符,那么可以跳转至最近的一个有用字符处,开始新的匹配。
图3中BPM是一个经典的采用位向量方法的模糊匹配方法,ABNDM是采用另一种过滤方法改进了BPM得到的方法,BPM-BM是采用本发明过滤方法改进了BPM得到的算法。该图显示BPM-BM比BPM快5~7倍,比ABNDM快10%~4倍。
下面结合附图1说明本发明过滤方法如何消除前述的冗余。
假设附图1中的字符串t为“abefabcdxyz......”,要在其中找出与模式串p=“abcd”的k=1的模糊匹配。
初始时,当前匹配位置为第1个字符。令bad=0,last=4。
扫描t中第4个字符“f”,它在p中不出现,则bad增1,此时bad大于k不成立,继续扫描。
扫描t中第3个字符“e”,它在p中也不出现,则bad增1,此时bad=2,bad大于k成立,跳出扫描。
因为bad大于k成立,说明可以往后略过last=4个字符,跳转至第5个字符。
下面说明存在k=1的模糊匹配时本过滤的执行情况。
此时当前扫描位置为第5个字符。令bad=0,last=4。
扫描第8个字符“d”,它在p中出现,则令last=8-5=3,此时last+bad=3,k+1=2,last+bad<k+1不成立,继续扫描。
扫描第7个字符“c”,它在p中出现,则令last=7-5=2,此时last+bad=2,k+1=2,last+bad<k+1仍然不成立,继续扫描。
扫描第6个字符“b”,它在p中出现,则令last=6-5=1,此时last+bad=1,k+1=2,last+bad<k+1成立,跳出扫描。
因为bad大于k不成立,说明本次过滤未发现可略过的字符,应从第5个字符开始进行正常的匹配,也就是说,这时应该应用普通的从前往后逐个扫描的算法,比如BPM。
权利要求
1.一种用于消除字符串模糊匹配中冗余的过滤方法,包括对字符串,长度为m的模式串进行模糊匹配,所允许的模糊度为k,当前正在扫描字符串中的第j个字符,其特征在于所述方法还包括判断步骤从第j+m-1个字符往前扫描,出现在模式串中的字符为有用字符,其他字符为无用字符,当发现了多于模糊度的无用字符时,跳转至最近的一个有用字符处,开始新的匹配。
2.如权利要求1所述用于消除字符串模糊匹配中冗余的过滤方法,其特征在于该方法进一步包括以下步骤设置无用字符计数器为0,最近一个有用字符的位置为m,对字符串中从第j+m-1到第j的每个字符,从后往前扫描;若当前字符在模式串中不出现,则将无用字符计数器增1,若无用字符计数器大于模糊度,则从第j到第j+last的所有字符都可以略过;若当前字符在模式串中出现,则设置最近一个有用字符的位置为当前字符的位置减去j,若无用字符计数器与最近一个有用字符位置的和小于k+1,则过滤未发现可略过的字符,应从第j个字符开始进行正常的匹配。
3.如权利要求2所述用于消除字符串模糊匹配中冗余的过滤方法,其特征在于所述无用字符计数器大于k不成立,继续扫描;无用字符计数器大于k成立,跳出扫描。
4.如权利要求2所述用于消除字符串模糊匹配中冗余的过滤方法,其特征在于所述无用字符计数器与最近一个有用字符位置的和小于k+1不成立,继续扫描;无用字符计数器与最近一个有用字符位置的和小于k+1成立,跳出扫描。
5.如权利要求2所述用于消除字符串模糊匹配中冗余的过滤方法,其特征在于所述从第j个字符开始进行正常的匹配是从前往后逐个扫描字符串中的每一个字符。
全文摘要
本发明涉及一种用于消除字符串模糊匹配中冗余的过滤方法,所述方法是从第j+m-1个字符往前扫描,出现在模式串中的字符为有用字符,其他字符为无用字符,当发现了多于模糊度的无用字符时,跳转至最近的一个有用字符处,开始新的匹配。对于中文字符串,它的速度比目前世界上最快的过滤方法快10%~60%;比不用过滤方法的中文字符串模糊匹配快5~7倍;本发明的过滤方法非常有效地消除前述冗余现象,在应用于中文字符串时,可以过滤掉80%~85%的字符,大大提高了匹配效率。
文档编号G06F17/22GK1538322SQ0315820
公开日2004年10月20日 申请日期2003年9月8日 优先权日2003年4月14日
发明者陈开渠, 赵洁, 彭志威 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1