一种字符串匹配方法、装置、设备及可读存储介质与流程

文档序号:17000372发布日期:2019-03-02 01:44阅读:189来源:国知局
一种字符串匹配方法、装置、设备及可读存储介质与流程
本发明涉及信息科学
技术领域
,更具体地说,涉及一种字符串匹配方法、装置、设备及可读存储介质。
背景技术
:随着计算机的普及以及信息工程的日益发展,从网上获取信息已经成为人们的日常生活和工作一个重要途径,互联网如今逐渐成为信息量超大的资源存储空间。为了从互联网中获取有效的信息,搜索引擎应运而生。搜索引擎被称为信息处理和获取的黑盒子,通过一定的规则在互联网中爬取信息资源,并对信息进行处理和提取,其对外提供的接口方便了用户查询,从而起到指导用户获取信息的作用。在搜索引擎中,字符串匹配是其中的关键技术。用户每次发起搜索请求都需要进行字符串匹配,当用户以关键词查找信息时,搜索引擎会在数据库中进行搜寻,如果找到与用户要求内容相符的信息,便将查询到的这些信息返回给用户,以便用户查看选择。需要说明的是,现有的字符串匹配一般基于距离矩阵判别两个字符串的相似度。在计算过程中,填充距离矩阵时的计算复杂度为n2(n为字符串长度)级别。也就是说,随着字符串长度的增加,距离矩阵的大小和计算复杂度将呈指数级增长,如此将消耗庞大的计算机资源;而当查询请求较多时,需要消耗的计算机资源将是不可估量的,从而会降低字符串匹配效率,增加计算成本。因此,如何提高字符串匹配效率,是本领域技术人员需要解决的问题。技术实现要素:本发明的目的在于提供一种字符串匹配方法、装置、设备及可读存储介质,以提高字符串匹配效率。为实现上述目的,本发明实施例提供了如下技术方案:一种字符串匹配方法,包括:获取目标字符串和待匹配字符串,将所述目标字符串和所述待匹配字符串分别切分为预设长度的子字符串,得到子字符串集合;为所述子字符串集合中的每种子字符串分配哈希值,得到初始哈希序列;按照预设的逻辑运算更新所述初始哈希序列中的每个哈希值,得到目标哈希序列;根据所述目标哈希序列计算所述目标字符串和所述待匹配字符串的相似度,当所述相似度大于预设的相似度阈值时,确定所述目标字符串和所述待匹配字符串相匹配。其中,所述为所述子字符串集合中的每种子字符串分配哈希值,包括:按照预设的递增规则为所述子字符串集合中的每种子字符串分配哈希值。其中,所述按照预设的逻辑运算更新所述初始哈希序列中的每个哈希值,得到目标哈希序列,包括:将所述初始哈希序列中的每个哈希值更新为零,并将更新后的每个哈希值与预设标识值进行异或运算,得到所述目标哈希序列。其中,所述根据所述目标哈希序列计算所述目标字符串和所述待匹配字符串的相似度,包括:采用相似度计算公式计算所述目标字符串和所述待匹配字符串的相似度;其中,所述相似度计算公式为:sim(s1,s2)=1-count(h)/n,sim(s1,s2)表示所述目标字符串和所述待匹配字符串的相似度,s1表示所述目标字符串,s2表示所述待匹配字符串;count(h)表示所述目标哈希序列中的所述目标字符串和所述待匹配字符串具有的不同子字符串的个数;n表示字符串长度,所述字符串长度为所述目标字符串和所述待匹配字符串长度之和的二分之一。其中,所述确定所述目标字符串和所述待匹配字符串相匹配之前,还包括:计算所述目标字符串和所述待匹配字符串的偏移量;判断所述偏移量是否小于预设的偏移量阈值;若是,则执行所述确定所述目标字符串和所述待匹配字符串相匹配的步骤。其中,所述判断所述偏移量是否小于预设的偏移量阈值,包括:判断所述偏移量与字符串长度的比值是否小于预设的偏移量阈值;其中,所述字符串长度为所述目标字符串和所述待匹配字符串长度之和的二分之一。一种字符串匹配装置,包括:获取模块,用于获取目标字符串和待匹配字符串,将所述目标字符串和所述待匹配字符串分别切分为预设长度的子字符串,得到子字符串集合;分配模块,用于为所述子字符串集合中的每种子字符串分配哈希值,得到初始哈希序列;更新模块,用于按照预设的逻辑运算更新所述初始哈希序列中的每个哈希值,得到目标哈希序列;匹配模块,用于根据所述目标哈希序列计算所述目标字符串和所述待匹配字符串的相似度,当所述相似度大于预设的相似度阈值时,确定所述目标字符串和所述待匹配字符串相匹配。其中,还包括:计算模块,用于计算所述目标字符串和所述待匹配字符串的偏移量;判断模块,用于判断所述偏移量是否小于预设的偏移量阈值;执行模块,用于当所述偏移量小于预设的偏移量阈值时,确定所述目标字符串和所述待匹配字符串相匹配。一种字符串匹配设备,包括:存储器,用于存储计算机程序;处理器,用于执行所述计算机程序时实现上述任意一项所述的字符串匹配方法的步骤。一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述任意一项所述的字符串匹配方法的步骤。通过以上方案可知,本发明实施例提供的一种字符串匹配方法,包括:获取目标字符串和待匹配字符串,将所述目标字符串和所述待匹配字符串分别切分为预设长度的子字符串,得到子字符串集合;为所述子字符串集合中的每种子字符串分配哈希值,得到初始哈希序列;按照预设的逻辑运算更新所述初始哈希序列中的每个哈希值,得到目标哈希序列;根据所述目标哈希序列计算所述目标字符串和所述待匹配字符串的相似度,当所述相似度大于预设的相似度阈值时,确定所述目标字符串和所述待匹配字符串相匹配。可见,所述方法首先将目标字符串和待匹配字符串进行切分,得到子字符串集合;进而为子字符串集合中的每种子字符串分配哈希值,并更新每个哈希值;最后基于更新后的哈希值计算目标字符串和待匹配字符串的相似度,并基于相似度确定目标字符串和待匹配字符串是否匹配。其中,该方法基于哈希值判别目标字符串和待匹配字符串是否匹配,其计算复杂度低,消耗的计算机资源较少,可以提高字符串匹配效率,降低计算成本。相应地,本发明实施例提供的一种字符串匹配装置、设备及可读存储介质,也同样具有上述技术效果。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例公开的一种字符串匹配方法流程图;图2为本发明实施例公开的另一种字符串匹配方法流程图;图3为本发明实施例公开的一种字符串匹配装置示意图;图4为本发明实施例公开的一种字符串匹配设备示意图;图5为本发明与现有技术的性能对比示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明实施例公开了一种字符串匹配方法、装置、设备及可读存储介质,以提高字符串匹配效率。参见图1,本发明实施例提供的一种字符串匹配方法,包括:s101、获取目标字符串和待匹配字符串,将目标字符串和待匹配字符串分别切分为预设长度的子字符串,得到子字符串集合;假设目标字符串为content,待匹配字符串为contend,将其分别切分后(子字符串的长度为2),目标字符串对应的子字符串包括:co、on、nt、te、en、nt;待匹配字符串对应的子字符串包括:co、on、nt、te、en、nd,得到的子字符串集合用q表示,则q={co,on,nt,te,en,nt,co,on,nt,te,en,nd}。其中,子字符串的长度可以是大于等于2的任意数,越大意味着精确度越高,但是为了便于计算,一般不取太大;当然,子字符串的长度可以根据实际应用情况灵活调整,比如短的子字符串不适用于较长的切分距离。s102、为子字符串集合中的每种子字符串分配哈希值,得到初始哈希序列;其中,所述为所述子字符串集合中的每种子字符串分配哈希值,包括:按照预设的递增规则为所述子字符串集合中的每种子字符串分配哈希值。需要说明的是,分配哈希值时,以子字符串的种类为基准。即:为子字符串集合中的相同子字符串分配相同的哈希值。分配时可按照下述方式进行:遍历子字符串集合,为遍历到的第一个子字符串co分配哈希值1,为第二个子字符串on分配哈希值2,为第三个子字符串nt分配哈希值3,其他以此类推,直至遍历完子字符串集合中的所有子字符串,此方式即可看作递增规则。其中,当再次遍历到子字符串co时,仍为其分配哈希值1。当然,递增规则可类比等差数列,其初始值(即首项)以及间隔值大小(即公差)可提前预设并灵活更改。当为子字符串集合中的每种子字符串分配完哈希值后,得到的初始哈希序列即为{1,2,3,4,5,6,7},各哈希值与子字符串的对应关系请参见表1。表1基于此,用初始哈希序列中的最大哈希值表示该哈希序列的长度lh,即lh=7。s103、按照预设的逻辑运算更新初始哈希序列中的每个哈希值,得到目标哈希序列;其中,所述按照预设的逻辑运算更新所述初始哈希序列中的每个哈希值,得到目标哈希序列,包括:将所述初始哈希序列中的每个哈希值更新为零,并将更新后的每个哈希值与预设标识值进行异或运算,得到所述目标哈希序列。具体的,将每个初始哈希值初始化为0,并初始哈希值中的最大值作为初始哈希序列的长度;进而遍历子字符串集合,将子字符串集合中的每个子字符串对应的初始哈希值与预设标识值1进行异或运算,当某个子字符串出现多次时,则重复执行异或运算。例如:针对子字符串“te”,首次出现的“te”对应的初始哈希值为4,进行异或运算,即4⊕1=1,得到的哈希值为1,当“te”第二次出现时,将前次得到的哈希值1与预设标识值1进行异或运算,即1⊕1=0,那么最后得到的“te”对应的目标哈希值为0。以此类推,采用异或运算和预设标识值1得到的各字符串、初始哈希值和目标哈希值的对应关系请参见表2。表2初始化哈希序列0000000目标哈希序列0000011s104、根据目标哈希序列计算目标字符串和待匹配字符串的相似度;s105、判断相似度是否大于预设的相似度阈值;若是,则执行s106;若否,则执行s107;s106、确定目标字符串和待匹配字符串相匹配;s107、确定目标字符串和待匹配字符串不匹配。具体的,可采用sim(s1,s2)=1-count(h)/n公式计算目标字符串和待匹配字符串的相似度,其中,sim(s1,s2)表示目标字符串和待匹配字符串的相似度,s1表示目标字符串,s2表示待匹配字符串;count(h)表示目标哈希序列中的目标字符串和待匹配字符串具有的不同子字符串的个数;n表示字符串长度,字符串长度为目标字符串和待匹配字符串长度之和的二分之一。需要说明的是,目标字符串和待匹配字符串具有的不同子字符串的个数可以为估计值。当得到的相似度大于预设的相似度阈值时,确定目标字符串和待匹配字符串相匹配;当得到的相似度不大于预设的相似度阈值时,确定目标字符串和待匹配字符串不匹配。可见,本实施例提供了一种字符串匹配方法,所述方法首先将目标字符串和待匹配字符串进行切分,得到子字符串集合;进而为子字符串集合中的每种子字符串分配哈希值,并更新每个哈希值;最后基于更新后的哈希值计算目标字符串和待匹配字符串的相似度,并基于相似度确定目标字符串和待匹配字符串是否匹配。其中,该方法基于哈希值判别目标字符串和待匹配字符串是否匹配,其计算复杂度低,消耗的计算机资源较少,可以提高字符串匹配效率,降低计算成本。本发明实施例公开了另一种字符串匹配方法,相对于上一实施例,本实施例对技术方案作了进一步的说明和优化。参见图2,本发明实施例提供的另一种字符串匹配方法,包括:s201、获取目标字符串和待匹配字符串,将目标字符串和待匹配字符串分别切分为预设长度的子字符串,得到子字符串集合;s202、为子字符串集合中的每种子字符串分配哈希值,得到初始哈希序列;s203、按照预设的逻辑运算更新初始哈希序列中的每个哈希值,得到目标哈希序列;s204、根据目标哈希序列计算目标字符串和待匹配字符串的相似度;s205、判断相似度是否大于预设的相似度阈值;若是,则执行s206;若否,则执行s209;s206、计算目标字符串和待匹配字符串的偏移量,并执行s207;s207、判断偏移量是否小于预设的偏移量阈值;若是,则执行s208;若否,则执行s209;s208、确定目标字符串和待匹配字符串相匹配;s209、确定目标字符串和待匹配字符串不匹配。在本实施例中,为了进一步提高字符串匹配的准确率,引入偏移量进行相应计算。偏移量可以验证字符的顺序,可以进一步辨别两个字符串是否匹配。当目标字符串和待匹配字符串的相似度大于预设的相似度阈值时,计算目标字符串和待匹配字符串的偏移量;当偏移量小于预设的偏移量阈值时,才确定目标字符串和待匹配字符串相匹配;否则二者不匹配。其中,所述判断所述偏移量是否小于预设的偏移量阈值,包括:判断所述偏移量与字符串长度的比值是否小于预设的偏移量阈值;其中,所述字符串长度为所述目标字符串和所述待匹配字符串长度之和的二分之一。具体的,在偏移量计算原理中,当一个或多个连续字符发生相同偏移时,则认为存在一个偏移量,这里的偏移量只考虑2以内。计算过程包括:初始化2*n/2的x矩阵,用于存储集合q中的每个子字符串的字符偏移量,第一行表示该位字符发生了1个偏移量,第二行表示该位字符发生了2个偏移量(1表示向右偏移,-1表示向左偏移,0表示未偏移)。按照下述公式计算x矩阵中的偏移量:其中,bv为偏移量,i和j为任意下标。举例如下:当计算levenshtein和levenshteoin这两个字符串的偏移量时,其levenshtein对应的子字符串包括:le、ev、ve、en、ns、sh、ht、te、ei、in;co、on、nt、te、en、nt;levenshteoin对应的子字符串包括:le、ev、vn、ns、sh、ht、te、eo、oi、in;可以看出ns、sh、ht、te均发生了偏移,但由于ns、sh、ht、te为连续的四个子字符串,可以认为是发生了一个偏移,即偏移量为1。其中,levenshtein和levenshteoin这两个字符串的偏移矩阵x为:得到两个字符串的偏移量后,通过判断偏移量是否小于预设的偏移量阈值,即可确定二者是否匹配;具体的,可以通过判断偏移量与字符串长度的比值是否小于预设的偏移量阈值来确定两个字符串是否匹配。即:将偏移量与字符串长度作比,判断二者的比值是否小于偏移量阈值。其中,字符串长度为两个字符串长度之和的二分之一。其中,偏移矩阵可按照下述方式获得。确定两个字符串分别对应的子字符串结果q1和q2;依据其计算偏移矩阵的第一行,即判断相应位置子字符串的字符是否向左、向右偏移或未偏移。针对偏移矩阵的每一行,将q1i和q2i+1相比较,相同则偏移矩阵里的x,ij=0,不同则xij=1;再将q1i和q2i-1相比较相同则偏移矩阵里的xij=0,不同则xij=-1,从而可得到偏移矩阵。其中,q1i表示q1中的某个子字符串,q2i表示q2中的某个子字符串,例如:若q1={co、on、nt、te、en、nt},那么其中的各子字符串可顺序表示为:{q11、q12、q13、q14、q15、q16},q2可以此类推进行相应表示,故本说明书在此不再赘述。ij表示偏移矩阵的行和列,当x矩阵如下时,第一行元素(0001111000)可顺序表示为x11、x12、x13、x14、x15、x16、x17、x18、x19、x20。可见,本实施例提供了另一种字符串匹配方法,所述方法首先将目标字符串和待匹配字符串进行切分,得到子字符串集合;进而为子字符串集合中的每种子字符串分配哈希值,并更新每个哈希值;最后基于更新后的哈希值计算目标字符串和待匹配字符串的相似度,并基于相似度确定目标字符串和待匹配字符串是否匹配。其中,该方法基于哈希值判别目标字符串和待匹配字符串的相似度,并参照偏移量判断二者是否匹配,其计算复杂度低,消耗的计算机资源较少,可以提高字符串匹配效率和准确率,降低计算成本。基于上述任意实施例,需要说明的是,所述根据所述目标哈希序列计算所述目标字符串和所述待匹配字符串的相似度,包括:采用相似度计算公式计算所述目标字符串和所述待匹配字符串的相似度;其中,所述相似度计算公式为:sim(s1,s2)=1-count(h)/n,sim(s1,s2)表示所述目标字符串和所述待匹配字符串的相似度,s1表示所述目标字符串,s2表示所述待匹配字符串;count(h)表示所述目标哈希序列中的所述目标字符串和所述待匹配字符串具有的不同子字符串的个数;n表示字符串长度,所述字符串长度为所述目标字符串和所述待匹配字符串长度之和的二分之一。具体的,目标哈希序列可以反映目标字符串和待匹配字符串具有的相同子字符串的个数和不相同字符串的个数。但是仅通过该差异还无法辨别这两个字符串是否相似;例如有一对字符串比较出来的不相同的字符数量是5,对于长度为8的字符串来说,可以很明显确定这两个字符串不相似;但是如果这两个字符串是由几百万个字符组成的dna序列,该差异则可以忽略不计,即确定这两个字符串相似。所以要通过与字符串长度相关的相似度来确定不同字符串之间是否匹配。具体可按照下述方式计算目标字符串s1和待匹配字符串s2的相似度,并判别二者是否匹配,相似度计算公式为:其中,n表示字符串长度,n=(length(s1)+length(s2))/2;count(h)是将目标哈希序列里的每一位都提取出来进行累加运算(也就是值为1的位的个数)。基于相似度进行判断时,可提前预设相似度阈值,即:判断相似度是否大于预设的相似度阈值;当相似度大于预设的相似度阈值时,即确定两个字符串相匹配。其中,相似度阈值可基于不同场景下对于相似度的要求进行设置。下面对本发明实施例提供的一种字符串匹配装置进行介绍,下文描述的一种字符串匹配装置与上文描述的一种字符串匹配方法可以相互参照。参见图3,本发明实施例提供的一种字符串匹配装置,包括:获取模块301,用于获取目标字符串和待匹配字符串,将所述目标字符串和所述待匹配字符串分别切分为预设长度的子字符串,得到子字符串集合;分配模块302,用于为所述子字符串集合中的每种子字符串分配哈希值,得到初始哈希序列;更新模块303,用于按照预设的逻辑运算更新所述初始哈希序列中的每个哈希值,得到目标哈希序列;匹配模块304,用于根据所述目标哈希序列计算所述目标字符串和所述待匹配字符串的相似度,当所述相似度大于预设的相似度阈值时,确定所述目标字符串和所述待匹配字符串相匹配。其中,还包括:计算模块,用于计算所述目标字符串和所述待匹配字符串的偏移量;判断模块,用于判断所述偏移量是否小于预设的偏移量阈值;执行模块,用于当所述偏移量小于预设的偏移量阈值时,确定所述目标字符串和所述待匹配字符串相匹配。其中,所述判断模块具体用于:判断所述偏移量与字符串长度的比值是否小于预设的偏移量阈值;其中,所述字符串长度为所述目标字符串和所述待匹配字符串长度之和的二分之一。其中,所述分配模块具体用于:按照预设的递增规则为所述子字符串集合中的每种子字符串分配哈希值。其中,所述更新模块具体用于:将所述初始哈希序列中的每个哈希值更新为零,并将更新后的每个哈希值与预设标识值进行异或运算,得到所述目标哈希序列。其中,所述匹配模块具体用于:采用相似度计算公式计算所述目标字符串和所述待匹配字符串的相似度;其中,所述相似度计算公式为:sim(s1,s2)=1-count(h)/n,sim(s1,s2)表示所述目标字符串和所述待匹配字符串的相似度,s1表示所述目标字符串,s2表示所述待匹配字符串;count(h)表示所述目标哈希序列中的所述目标字符串和所述待匹配字符串具有的不同子字符串的个数;n表示字符串长度,所述字符串长度为所述目标字符串和所述待匹配字符串长度之和的二分之一。可见,本实施例提供了一种字符串匹配装置,包括:获取模块、分配模块、更新模块以及匹配模块。首先由获取模块获取目标字符串和待匹配字符串,将目标字符串和待匹配字符串分别切分为预设长度的子字符串,得到子字符串集合;然后分配模块为子字符串集合中的每种子字符串分配哈希值,得到初始哈希序列;进而更新模块按照预设的逻辑运算更新初始哈希序列中的每个哈希值,得到目标哈希序列;最后匹配模块根据目标哈希序列计算目标字符串和待匹配字符串的相似度,当相似度大于预设的相似度阈值时,确定目标字符串和待匹配字符串相匹配。如此各个模块之间分工合作,各司其职,从而降低了计算复杂度和计算机资源的消耗,提高了字符串匹配效率和准确率。下面对本发明实施例提供的一种字符串匹配设备进行介绍,下文描述的一种字符串匹配设备与上文描述的一种字符串匹配方法及装置可以相互参照。参见图4,本发明实施例提供的一种字符串匹配设备,包括:存储器401,用于存储计算机程序;处理器402,用于执行所述计算机程序时实现上述任意实施例所述的字符串匹配方法的步骤。下面对本发明实施例提供的一种可读存储介质进行介绍,下文描述的一种可读存储介质与上文描述的一种字符串匹配方法、装置及设备可以相互参照。一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任意实施例所述的字符串匹配方法的步骤。为了进一步体现本发明(基于哈希序列的匹配方法)相对于现有技术(基于距离矩阵的匹配方法)的有益效果,现做如下对比实验。待对比字符串请参见表3。表3待对比字符串距离阈值偏移阈值that0.40.4student0.40.4两种匹配方法的实验结果请参见表4。表4由实验结果可以看出,本发明和距离矩阵输出结果基本一致,且在本次查全率方面,本发明优于现有技术。基于距离矩阵的匹配方法的计算复杂度随字符串的长度增长呈指数级增长,(由于距离矩阵需要填充整个矩阵)。假设字符串长度为n,那么基于距离矩阵的匹配方法的计算复杂度接近于n^2。本发明在匹配长字符串时是明显优于距离矩阵的,本发明的实现过程包括切分内容、分配哈希值、计算哈希序列、计算偏移值和遍历字符序列等6个步骤,算法复杂度接近6n。本发明与现有技术的性能对比请参见图5。从图5可以看出,当字符串的长度(即图5中的匹配内容长度)小于100时,本发明和现有技术基本不存在区别;当字符串的长度大于100时,本发明呈现出了比现有技术更好的性能。可见,在面对大量的长内容匹配时,本发明可以节约计算机资源,提高匹配效率。本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1