CN102750379B - 一种基于过滤型的字符串快速匹配方法 - Google Patents
一种基于过滤型的字符串快速匹配方法 Download PDFInfo
- Publication number
- CN102750379B CN102750379B CN201210211829.7A CN201210211829A CN102750379B CN 102750379 B CN102750379 B CN 102750379B CN 201210211829 A CN201210211829 A CN 201210211829A CN 102750379 B CN102750379 B CN 102750379B
- Authority
- CN
- China
- Prior art keywords
- string
- pattern
- text string
- index
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于过滤型的字符串快速匹配方法,该方法先对模式串进行预处理:将模式串前缀P0切分成k+s个长度为h的模式串子块,将每一个模式串子块的长度延长k+q-1,分别记为Q1、Q2、…、Qk+s;然后从文本串起始位置开始,每隔h长度依次读取文本串的q个字符作为文本串索引,文本串索引分别标记为d1、d2,...dn/h;再创建匹配数组B[d,j]:如果某一个文本串索引di属于Qj,则匹配数组B[di,j]=1;计算k+s个连续的文本串索引与模式串子块的匹配个数,最后检测近似匹配。本方法结合了动态规划算法与过滤算法,并且增加了新的过滤策略,缩短近似匹配的平均时间,使得匹配性能有了较大的提高。
Description
技术领域
本发明涉及字符串匹配技术领域,特别是涉及一种基于过滤型的字符串快速匹配方法,属于信息检索领域和计算生物学领域。
背景技术
字符串匹配问题可以界定为从给定的符号序列中找出一个具有某种属性的模式,最简单的例子是从给定的字符序列中找出一个给定的字符串。“近似匹配”一般是指在允许模式和文本字符串之间存在某些细微的差异。“匹配”一般是指“近似匹配”。字符串匹配是计算机科学中最古老、研究最广泛的问题之一,并且,字符串匹配的应用也随处可见。近年来,学术界对字符串匹配的研究兴趣与日俱增,特别是在发展迅猛的信息检索领域和计算生物学领域。同时,近似匹配的应用也越来越广泛。例如,信息检索中对拼写错误的纠正,在计算生物学中的序列比对,在信号处理中对传输错误的纠正,等等。之所以有上述现象,不仅因为在这两个研究领域中需要处理的文本规模越来越大,而且由于需要在文本中进行越来越复杂的搜索。
现在对近似匹配的研究主要基于距离模型,在该模型中需要一个可以度量两个字符串相似度的距离函数。在近似匹配中,通常给出模式串和一个对应的阀值k,其中,k指定了模式串和匹配结果之间允许的最大距离。近似匹配的定义如下:在编辑距离模型下,给定一个整数k和两个字符串分别为Pattern[1…m]、Text[1…n],找出文本串Text中的所有子串p,使得编辑距离edit(Pattern,p)≤k。在实际应用中,很多问题是用了编辑距离模型或者使用其变体。
已有的近似匹配方法分为四类:第一类是基于动态规划方法;第二类是基于NFA搜索;第三类是基于位并行技术,这是当前应用最成功的一类方法。最后一类是基于过滤的方法,它用一个快速的过滤算法跳过文本中那些不可能存在成功匹配的大块区域,然后再利用一个非过滤算法来验证剩下的区域是否存在成功匹配。这类方法也是最快的算法之一。
提出的算法就是利用过滤的思想,使得算法的效率大为提高。
发明内容
本发明的目的在于提供快速近似模式匹配的一种方法,尤其是克服机器字长的限制,提供一种适用于长模式串近似匹配的算法。
对于给定的文本串和模式串,本发明一种基于过滤型的字符串快速匹配方法是在文本串中寻找与模式串具有一定相似度的子串。字符串匹配问题就是在一个大的文本串中搜索某个模式串的所有出现位置。本发明用过滤思想过滤掉了文本串中那些不能产生成功匹配的区域,从而提高了算法在平均情况下的效率。
为实现上述目的,本发明采用如下技术方案:
一种基于过滤型的字符串快速匹配方法,包括如下步骤:
(1)对模式串进行预处理:记模式串长度为(k+s)h的前缀为P0,将P0切分成k+s个长度为h的模式串子块,将每一个模式串子块的长度延长k+q-1,则两个连续模式串子块之间存在长度为k+q-1的重叠部分;这k+s个延长之后的模式串子块分别记为Q1、Q2、…、Qk+s;其中m为模式串字符的个数;k为把模式串转变成文本串某个子串所需要的最少操作次数,简称编辑距离,0≦k﹤m;s为在匹配过程中文本串索引(文本串索引的说明在步骤2中)与模式串子块的因子精确匹配的最少个数,1≦s﹤m;q是文本串索引的长度,q≦h;
(2)创建文本串索引:从文本串起始位置开始,每隔h长度依次读取文本串的q个字符作为文本串索引,文本串索引分别标记为d1、d2,…dn/h;q≦h;
(3)创建匹配数组B[d,j]:如果某一个文本串索引di属于Qj,则B[di,j]=1;否则B[di,j]=0;为每个文本串创建长度为m’的数组M,用于记录文本串索引的匹配个数,记di对应的数组为Mdi[1…m’],Mdi[1…m’]初始化为0;其中m’=k+s;
(4)计算k+s个连续的文本串索引与模式串子块的匹配个数:将文本串索引与模式串子块进行匹配;在记录匹配情况的过程中,若出现Mdi[j]≤j-k(这里有j>k)的情况,则停止构建该数组,转而继续构建下一个索引的数组Mdi+1;若元素Mdi[m’]≥s,则需要进一步检测近似匹配,继续下一步;
(5)检测近似匹配:若存在近似匹配,则待检测的区域位于文本串的j-(k+s)h-2k-q+2至j+m-(k+s-1)h+k-q部分,并用动态规划算法检测该区域,如果检测出近似匹配,则给出近似匹配的所有出现位置,否则报告该区域不存在近似匹配。
字符串是定义在有限字母表上的字符序列。文本串是一个字符串,模式串也是一个字符串。字符串匹配问题就是在一个大的文本串中搜索某个模式串的所有出现位置。给定字符串x,y和z,称x是xy的一个前缀,x是yx的一个后缀,x是yxz的一个因子。
本发明的原理:如果把文本串分成k+s片,那么对于任意一个成功的近似匹配,至少有s片在文本串中是精确匹配的。利用上述思想,本发明通过构造q-gram索引计算文本串中已精确匹配的子串个数,确定在该g-gram索引某段区域是否有存在近似匹配的可能。g-gram索引指的是在建立索引时对文本Text切分时采用长度为q、滑动距离为d的滑动窗口,切分得到长度为q的子串。为了计算q-gram与模式串的匹配个数,引入匹配数组B[d,j],如果某一个q-gram d属于Qj,则B[d,j]=1;否则B[d,j]=0。这样,对于每一个q-gramd,B[d,*]给出了每一块d的匹配信息。
在确定了某段区域有存在近似匹配的可能之后,就需要对该段区域进行验证。应用比较广泛的验证算法是基于位并行技术的,比如BPM算法。但是该方法适用于完成模式串长度比较短时的近似匹配验证。本发明选取的验证算法是基于动态规划矩阵的DP算法。该算法的思想是:通常模式串在文本中成功匹配的数目是很少的,因此,在编辑距离矩阵M中,每一列的值从上往下计算很快就达到k+1(即不匹配了),如果某个矩阵元素的值大于k+1,那么搜索结果就不会依赖于这个元素。如果一个矩阵元素的值小于或等于k,那么这个元素就称为活动的。该方法只计算到每一列的最后一个活动元素,不需要再对后面的元素进行计算。
本发明与现有的近似匹配算法相比,具有以下显著优点:
(1)近似搜索中大量使用位并行方法,很多很好的结果都是使用位并行方法得到。然而位并行算法适用于模式串较短的情况,但是现实需求中很多搜索都是对长模式串进行。如果模式串的长度超过了计算机的字长,那么匹配的效果将变得非常的糟糕。而本近似搜索算法非常适合长模式串的近似匹配,当模式串的长度m和阀值k的比值增加时,其效率也相应的提高。
(2)在未增加新的过滤策略之前,近似匹配算法的时间开销主要是计算数组M以及用DP算法验证可能的匹配区域。通过增加过滤策略,简化了匹配时计算每个q-gram索引与模式串中每个块的匹配时间,从而大大缩短了计算数组M的时间。在最好情况下,本算法能比原算法能缩短一半的匹配时间。
(3)过滤算法只能提高算法在平均情况下的效率,它的优势在于可能不需要检查文本中的每个字符。过滤算法的效率和它能过滤掉的文本大小有关,并且对错误水平非常的敏感。大多数过滤算法在错误水平较低时工作得很好,否则就很差。而本过滤算法在错误水平较高时,依然保持了良好的性能。实验显示,当错误水平较高时,本算法比同类算法所需的匹配时间能减少一半。
附图说明
图1是构造索引对文本串的处理示意图;
图2是模式串的处理示意图。
具体实施方式:
为了更好地理解本发明,下面结合实施例对本发明作进一步说明,但本发明要求保护的范围并不局限于实施例表示的范围。
实施案例1:手机短信分类
近些年,我国加快了社会信息化和数字化的发展步伐,人们每天要处理的信息越来越多。各应用服务商为了提醒或者让客户尽快了解相关信息会以短信的方式通知客户,如电子商务网商品推荐、网上银行信息回馈、各种扣费通知还有用户本身的聊天信息等。但随着人们接触的业务越来越多,这些信息变得繁杂难以管理。大家需要一种很方便、松散、有效的方式分类短信,摆脱直接打开收件箱应对各类信息的窘况。应用本发明“一种基于过滤型的字符串快速匹配方法”能够实现用模版来分类短息的功能。当用户需要划分一个新的信息类别,只需要提供一条或者多条该类型的信息,***就能利用近似匹配的办法自动分类将来收到的短信,应用步骤如下:
(1)用户建立一个新的信息类,提供一条或若干条短信作为该类的样本,这些样本就是该类的模式串。而新的短信内容则作为目标文本串,如果某类模式串与该文本串相匹配则该文本串属于该类。
(2)假设短信样本的长度是m=32,短信文本串索引的长度q=2;用户设定相似度是k=4,在匹配过程中短信索引与模式串子块的因子精确匹配的最少个数s=2;则其中如图2所示,对模式串进行预处理:记模式串长度为(k+s)h=24的前缀为P0,将P0切分成k+s=6个长度为h=4的模式串子块,将每一个模式串子块的长度延长k+q-1=5,则两个连续模式串子块之间存在长度为k+q-1=5的重叠部分;这k+s=6个延长之后的模式串子块分别记为Q1,Q2,…,Q6;
(3)如图1所示,对于新的短信,假设其长度是128;创建短信的索引:从短信起始位置开始,每隔h=4长度依次读取短信的q=2个字符作为新短信索引,短信索引分别标记为d1、d2,…d32;
(4)创建匹配数组B[d,j],如果某一个短信索引di属于Qj,则B[di,j]=1;否则B[di,j]=0;为每个短信创建长度为m’的数组M,用于记录短信索引的匹配个数,记di对应的数组为Mdi[6],Mdi[6]初始化为0;
(5)计算k+s=6个连续的短信索引与模式串子块的匹配个数:将短信索引与模式串子块进行匹配;在记录匹配情况的过程中,若出现Mdi[b]≤b-4(这里有b>4)的情况,则停止构建该数组,转而继续构建下一个索引的数组Mdi+1;若元素Mdi[6]≥2,则需要进一步检测近似匹配,继续下一步;
(6)检测近似匹配:若存在近似匹配,则待检测的区域位于短信的j-32至j+14部分(j是某一次匹配中连续6个索引最后一个索引的在日记文档的结束位置),并用动态规划算法检测该区域,如果检测出近似匹配,则给出近似匹配的所有出现位置,否则报告该区域不存在近似匹配。一个短信可以属于多个类,只要匹配成功就证明该短信的部分内容符合某类的模版要求。
实施案例2:日记文档模糊搜索
随着计算机技术的迅速发展和生活速度的加快,相对于以往用纸笔写日记、完成工作文档的情况,人们现在更偏向于用计算机完成文本工作。主要有三个原因:1)计算机技术使人们完成文本工作更容易和快捷;2)计算机日记更具有娱乐色彩,如编辑心情;3)满足人们随手记录的要求。相比于一天结束后完成一篇日记或者工作报告,即时记录更符合人们的需求,随着手机硬件技术、手写字识别和语音识别技术的发展,我们更方便更直接地记录日常信息,通过计算机识别技术,这些多媒体信息将会转化为文本进行存储。
对于这些比较随意散乱、文学性不强的文档,应用本发明“一种过滤型快速近似模式匹配方法”可以满足用户模糊搜索日志的需求,应用步骤如下:
(1)用户指定日记文档作为本实施例中的文本串,输入查询语句作为本发明中的模式串;
(2)查询语句的长度记为m=16,用户设定查询相似度k=2,在匹配过程中日记文档索引与查询语句子块的因子精确匹配的最少个数s为1,日记文档索引的长度q=3;则对查询语句进行预处理:记查询语句的长度为(k+s)h=12的前缀为P0,将P0切分成k+s=3个长度为4的查询语句子块,将每一个查询语句子块的长度延长k+q-1=4,则两个连续查询语句子块之间存在长度为4的重叠部分;这3个延长之后的查询语句子块分别记为Q1,Q2,Q3;
(3)创建日记文档索引:假设日记的长度是1000。从日记文档起始位置开始,每隔4个字符依次读取日记文档的3个字符作为日记文档索引,日记文档索引分别标记为d1、d2,...d250;
(4)创建匹配数组B[d,j],如果某一个日记文档索引di属于Qj,则B[di,j]=1;否则B[di,j]=0;为每个日记文档创建长度为3的数组M,用于记录日记文档索引的匹配个数,记di对应的数组为Mdi[3],Mdi[3]初始化为0;
(5)计算3个连续的日记文档索引与查询语句子块的匹配个数:将日记文档索引与查询语句子块进行匹配;在记录匹配情况的过程中,若出现Mdi[b]≤b-2(这里有b>2)的情况,则停止构建该数组,转而继续构建下一个索引的数组Mdi+1;若元素Mdi[m’]≥s=1,则需要进一步检测近似匹配,继续下一步;
(6)检测近似匹配:若存在近似匹配,则待检测的区域位于日记文档的j-17至j+7(j是某一次匹配中连续3个索引最后一个索引的在日记文档的结束位置)部分,并用动态规划算法检测该区域,如果检测出近似匹配,则给出近似匹配的所有出现位置,否则报告该区域不存在近似匹配。只要存在某处匹配成功的文档作为候选文档提供用户详细查看。
Claims (3)
1.一种基于过滤型的字符串快速匹配方法,其特征在于包括如下步骤:
(1)对模式串进行预处理:记模式串长度为(k+s)h的前缀为P0,将P0切分成k+s个长度为h的模式串子块,将每一个模式串子块的长度延长k+q‐1,则两个连续模式串子块之间存在长度为k+q‐1的重叠部分;这k+s个延长之后的模式串子块分别记为Q1、Q2、…、Qk+s;其中m为模式串字符的个数;k为把模式串转变成文本串某个子串所需要的最少操作次数,简称编辑距离,0≦k﹤m;s为在匹配过程中文本串索引与模式串子块的因子精确匹配的最少个数,1≦s﹤m;q是文本串索引的长度,q≦h;
(2)创建文本串索引:从文本串起始位置开始,每h长度依次读取文本串的q个字符作为文本串索引,文本串索引分别标记为d1、d2,…dn/h;q≦h;n为文本串的长度;
(3)创建匹配数组B[d,j]:如果某一个文本串索引di属于Qj,则匹配数组B[di,j]=1;否则匹配数组B[di,j]=0;为每个文本串创建长度为m’的数组M,用于记录文本串索引的匹配个数,记di对应的数组为Mdi[m’],Mdi[m’]初始化为0;其中m’=k+s;
(4)计算k+s个连续的文本串索引与模式串子块的匹配个数:将文本串索引与模式串子块进行匹配;在记录匹配情况的过程中,若出现Mdi[j]≤j-k的情况,则停止构建该数组,转而继续构建下一个索引的数组Mdi+1;若元素Mdi[m’]≥s,则需要进一步检测近似匹配,继续下一步;
(5)检测近似匹配:若存在近似匹配,则待检测的区域位于文本串的w‐(k+s)h‐2k‐q+2至w+m‐(k+s‐1)h+k‐q部分,并用动态规划算法检测该区域,如果检测出近似匹配,则给出近似匹配的所有出现位置,否则报告该区域不存在近似匹配;所述w为某一次匹配中连续k+s索引最后一个索引的在文本串中的结束位置;
所述文本串为字符串,模式串为字符串。
2.根据权利要求1所述的基于过滤型的字符串快速匹配方法,其特征在于:所述字符串是定义在有限字母表上的字符序列。
3.根据权利要求1所述的基于过滤型的字符串快速匹配方法,其特征在于:给定字符串x,y和z,称x是xy的一个前缀,x是yx的一个后缀,x是yxz的一个因子。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210211829.7A CN102750379B (zh) | 2012-06-25 | 2012-06-25 | 一种基于过滤型的字符串快速匹配方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210211829.7A CN102750379B (zh) | 2012-06-25 | 2012-06-25 | 一种基于过滤型的字符串快速匹配方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102750379A CN102750379A (zh) | 2012-10-24 |
CN102750379B true CN102750379B (zh) | 2014-07-02 |
Family
ID=47030564
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210211829.7A Expired - Fee Related CN102750379B (zh) | 2012-06-25 | 2012-06-25 | 一种基于过滤型的字符串快速匹配方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102750379B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103544139A (zh) * | 2012-07-13 | 2014-01-29 | 江苏新瑞峰信息科技有限公司 | 一种基于中文检索的正向分词方法及装置 |
CN103577598B (zh) * | 2013-11-15 | 2017-02-15 | 曙光信息产业(北京)有限公司 | 模式串与文本串的匹配方法和装置 |
CN107451125B (zh) * | 2017-08-19 | 2021-05-18 | 洪志令 | 一种针对顺序无关项组进行快速相近语义匹配的方法 |
CN109062792A (zh) * | 2018-07-21 | 2018-12-21 | 东南大学 | 一种基于串匹配和特征匹配的开源代码检测方法 |
CN109241360B (zh) * | 2018-08-21 | 2021-08-20 | 创新先进技术有限公司 | 组合字符串的匹配方法及装置和电子设备 |
CN109271419B (zh) * | 2018-09-03 | 2021-06-22 | 河北工业大学 | 一种无间隙约束的在线串匹配方法 |
CN111832554A (zh) * | 2019-04-15 | 2020-10-27 | 顺丰科技有限公司 | 一种图像检测方法、装置及存储介质 |
CN111159490B (zh) * | 2019-12-13 | 2023-05-26 | 杭州迪普科技股份有限公司 | 一种模式字符串的处理方法、装置及设备 |
CN111814009B (zh) * | 2020-06-28 | 2022-03-01 | 四川长虹电器股份有限公司 | 一种基于搜索引擎检索信息的模式匹配方法 |
CN117494231A (zh) * | 2023-11-15 | 2024-02-02 | 山东农业大学 | 一种基于大数据的分布式数据管理监测*** |
-
2012
- 2012-06-25 CN CN201210211829.7A patent/CN102750379B/zh not_active Expired - Fee Related
Non-Patent Citations (5)
Title |
---|
"On using q-gram locations in approximate string matching";Erkki Sutinen et al.;《Lecture Notes in Computer Science》;19951231;第979卷;327-340 * |
"一种快速近似模式匹配算法";李拥军等;《华南理工大学学报(自然科学版)》;20120630;第40卷(第6期);103-108 * |
Erkki Sutinen et al.."On using q-gram locations in approximate string matching".《Lecture Notes in Computer Science》.1995,第979卷327-340. |
孙德才等."基于匹配区域特征的相似字符串匹配过滤算法".《计算机研究与发展》.2010,第47卷(第4期),663-670. |
李拥军等."一种快速近似模式匹配算法".《华南理工大学学报(自然科学版)》.2012,第40卷(第6期),103-108. |
Also Published As
Publication number | Publication date |
---|---|
CN102750379A (zh) | 2012-10-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102750379B (zh) | 一种基于过滤型的字符串快速匹配方法 | |
CN109241274B (zh) | 文本聚类方法及装置 | |
US8577155B2 (en) | System and method for duplicate text recognition | |
CN109947904B (zh) | 一种基于Spark环境的偏好空间Skyline查询处理方法 | |
US20150142760A1 (en) | Method and device for deduplicating web page | |
CN101950312B (zh) | 一种互联网网页内容解析方法 | |
CN103049568A (zh) | 对海量文档库的文档分类的方法 | |
CN108647322B (zh) | 基于词网识别大量Web文本信息相似度的方法 | |
CN103345496B (zh) | 多媒体信息检索方法和*** | |
CN103258000A (zh) | 对网页中高频关键词进行聚类的方法及装置 | |
CN101694670A (zh) | 一种基于公共子串的中文Web文档在线聚类方法 | |
CN101976253A (zh) | 一种中文变异文本匹配识别方法 | |
Klampfl et al. | Unsupervised document structure analysis of digital scientific articles | |
CN105677661A (zh) | 一种检测社交媒体重复数据的方法 | |
CN107341199B (zh) | 一种基于文献信息共性模式的推荐方法 | |
CN106055539A (zh) | 姓名消歧的方法和装置 | |
JP5558514B2 (ja) | 多重範囲スキャンでのnソートクエリを最適に処理する方法及び装置 | |
CN105488471B (zh) | 一种字形识别方法及装置 | |
CN101515286B (zh) | 基于图像特征多级过滤的图像匹配方法 | |
WO2008073820A1 (en) | Identifying relationships among database records | |
CN103631769A (zh) | 一种判断文件内容与标题间一致性的方法及装置 | |
CN101963972A (zh) | 情感关键词提取方法及*** | |
CN116562297B (zh) | 基于HTrie树的中文敏感词变形体识别方法及*** | |
CN105989033A (zh) | 一种基于资讯指纹的资讯去重方法 | |
Xue et al. | Dealing with imbalanced dataset: A re-sampling method based on the improved SMOTE algorithm |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20140702 Termination date: 20210625 |
|
CF01 | Termination of patent right due to non-payment of annual fee |