CN108984695B - 一种字符串匹配方法及装置 - Google Patents

一种字符串匹配方法及装置 Download PDF

Info

Publication number
CN108984695B
CN108984695B CN201810725855.9A CN201810725855A CN108984695B CN 108984695 B CN108984695 B CN 108984695B CN 201810725855 A CN201810725855 A CN 201810725855A CN 108984695 B CN108984695 B CN 108984695B
Authority
CN
China
Prior art keywords
character string
target
candidate
string
slice
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
Application number
CN201810725855.9A
Other languages
English (en)
Other versions
CN108984695A (zh
Inventor
夏涛
陈洋
杨强
陈志刚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
iFlytek Co Ltd
Original Assignee
iFlytek Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by iFlytek Co Ltd filed Critical iFlytek Co Ltd
Priority to CN201810725855.9A priority Critical patent/CN108984695B/zh
Publication of CN108984695A publication Critical patent/CN108984695A/zh
Application granted granted Critical
Publication of CN108984695B publication Critical patent/CN108984695B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请公开了一种字符串匹配方法及装置,所述方法包括:获取待匹配的目标字符串,并确定用于匹配的目标候选集;然后确定一个字符串过滤阈值,其中,该字符串过滤阈值是目标字符串与每一相似字符串至少要匹配上的切片个数,相似字符串是目标候选集中与目标字符串相似的一个第一候选字符串;当确定了字符串过滤阈值后,便可以从目标候选集中匹配出各个相似字符串,使相似字符串与目标字符串的相同切片的数量至少达到字符串过滤阈值。本申请通过字符串过滤阈值,可以快速准确的匹配到相似字符串。

Description

一种字符串匹配方法及装置
技术领域
本申请涉及自然语言处理技术领域,尤其涉及一种字符串匹配方法及装置。
背景技术
实际应用中,对于某个字符串,期望能从包含大量候选字符串的超大候选集中,找到与该字符串相似的候选字符串。
在一种现有技术方案中,首先利用倒排索引中倒排链表之间的重合信息,获取gram辨识度指标,然后将gram辨识度指标与倒排链表长度比例进行整合,形成综合指标,最后根据该综合指标通过泛化前缀过滤器获取候选集,通过计算候选集中的字符串真实的编码距离获取检索结果,即获取相似字符串。
可见,现有技术方案定义了gram辨识度指标,但是,这种辨识度指标,实现起来复杂,不具有很强的操作性,特别是基于辨识度指标整合而成的综合指标策略,工程化起来较难,整体执行效率较低,从而导致相似字符串的获取效率不高。
发明内容
本申请实施例的主要目的在于提供一种字符串匹配方法及装置,不但能够提高字符串的匹配效率,且字符串匹配结果具有较高的准确性。
本申请实施例提供了一种字符串匹配方法,包括:
获取待匹配的目标字符串;
确定目标候选集,其中,所述目标候选集包括多个第一候选字符串;
确定字符串过滤阈值,其中,所述字符串过滤阈值是所述目标字符串与相似字符串至少要匹配上的切片个数,所述相似字符串是所述目标候选集中与所述目标字符串相似的一个第一候选字符串;
根据所述字符串过滤阈值,从所述目标候选集中匹配出所述相似字符串。
可选的,所述确定目标候选集,包括:
根据所述目标字符串的长度以及预设的编辑距离阈值,从原始字符串集合中筛选出多个第一候选字符串,形成目标候选集;其中,所述编辑距离阈值是所述目标字符串转换成所述相似字符串所需的最多编辑次数。
可选的,所述确定字符串过滤阈值,包括:
根据所述目标字符串的长度以及预设的编辑距离阈值,确定字符串过滤阈值;其中,所述编辑距离阈值是所述目标字符串转换成所述相似字符串所需的最多编辑次数。
可选的,所述根据所述目标字符串的长度以及预设的编辑距离阈值,确定字符串过滤阈值,包括:
若按照选定的目标操作策略对所述目标字符串进行
Figure BDA0001719699000000021
次的字符操作,则确定由所述
Figure BDA0001719699000000022
次的字符操作产生的不同于所述目标字符串的新切片个数;
其中,
Figure BDA0001719699000000023
为所述编辑距离阈值,所述
Figure BDA0001719699000000024
次的字符操作包括至少一种操作类型、且所述操作类型的操作次数由所述目标字符串的长度与
Figure BDA0001719699000000025
确定,所述目标操作策略对应产生的新切片个数小于所述目标字符串的切片总数;
将所述目标字符串的切片总数与所述目标操作策略对应产生的新切片个数之间的差值,作为字符串过滤阈值。
可选的,按照下述方式选定所述目标操作策略:
按照对至少两个待选操作策略的策略排序结果,依次选择每一待选操作策略,并将当前选择的待选操作策略作为当前策略,其中,所述至少两个待选操作策略是按照对应产生的新切片个数进行降序排序的;
若按照所述当前策略对所述目标字符串进行
Figure BDA0001719699000000026
次的字符操作,则确定由所述
Figure BDA0001719699000000027
次的字符操作产生的不同于所述目标字符串的新切片个数;
判断所述当前策略对应产生的新切片个数是否小于所述目标字符串的切片总数;
若是,则将所述当前策略作为所述目标操作策略;
若否,则将下一待选操作策略作为所述当前策略,继续执行若按照所述当前策略对所述目标字符串进行
Figure BDA0001719699000000028
次的字符操作的步骤。
可选的,所述至少两个待选操作策略包括第一策略、第二策略、第三策略中排序在前的至少一个策略以及第四策略,其中,所述第四策略对应产生的新切片个数小于所述目标字符串的切片总数。
可选的,所述根据所述字符串过滤阈值,从所述目标候选集中匹配出所述相似字符串,包括:
将所述目标字符串的各个目标切片与各个第一候选字符串的候选切片进行匹配,将匹配上的目标切片作为命中切片;
选择N个命中切片,其中,N=m-M+1,m是命中切片的总数,M是所述字符串过滤阈值;
对于所述N个命中切片,确定每一命中切片所属的至少一个第一候选字符串,将确定的每一第一候选字符串作为第二候选字符串;
若所述第二候选字符串包括的命中切片个数大于或等于M,则将所述第二候选字符串作为所述相似字符串。
可选的,所述将所述目标字符串的各个目标切片与各个第一候选字符串的候选切片进行匹配,包括:
将所述目标字符串的各个目标切片,与候选切片集中的候选切片进行匹配,其中,所述候选切片集由各个第一候选字符串的不同切片组成;
相应地,所述选择N个命中切片,包括:
确定所述候选切片集中每一命中切片所属的第一候选字符串的个数;
将所述候选切片集中每一命中切片对应的字符串个数进行升序排序,并获取排序在前的N个命中切片。
可选的,所述将所述目标字符串的各个目标切片与各个第一候选字符串的候选切片进行匹配,包括:
将所述目标字符串的各个目标切片,与每一切片子集中的候选切片进行匹配,其中,所述切片子集由对应长度区间下的第一候选字符串的不同切片组成,所述长度区间对应一个字符串长度范围,不同长度区间对应的字符串长度范围不重叠;
相应地,所述选择N个命中切片,包括:
确定所述切片子集中每一命中切片所属的第一候选字符串的个数;
将所述切片子集中每一命中切片对应的字符串个数进行升序排序,并获取排序在前的N个命中切片。
本申请实施例还提供了一种字符串匹配装置,包括:
字符串获取单元,用于获取待匹配的目标字符串;
候选集确定单元,用于确定目标候选集,其中,所述目标候选集包括多个第一候选字符串;
过滤阈值确定单元,用于确定字符串过滤阈值,其中,所述字符串过滤阈值是所述目标字符串与相似字符串至少要匹配上的切片个数,所述相似字符串是所述目标候选集中与所述目标字符串相似的一个第一候选字符串;
字符串匹配单元,用于根据所述字符串过滤阈值,从所述目标候选集中匹配出所述相似字符串。
可选的,所述候选集确定单元,具体用于根据所述目标字符串的长度以及预设的编辑距离阈值,从原始字符串集合中筛选出多个第一候选字符串,形成目标候选集;其中,所述编辑距离阈值是所述目标字符串转换成所述相似字符串所需的最多编辑次数。
可选的,所述过滤阈值确定单元,具体用于根据所述目标字符串的长度以及预设的编辑距离阈值,确定字符串过滤阈值;其中,所述编辑距离阈值是所述目标字符串转换成所述相似字符串所需的最多编辑次数。
可选的,所述过滤阈值确定单元包括:
字符操作子单元,用于若按照选定的目标操作策略对所述目标字符串进行
Figure BDA0001719699000000031
次的字符操作,则确定由所述
Figure BDA0001719699000000032
次的字符操作产生的不同于所述目标字符串的新切片个数;其中,
Figure BDA0001719699000000033
为所述编辑距离阈值,所述
Figure BDA0001719699000000034
次的字符操作包括至少一种操作类型、且所述操作类型的操作次数由所述目标字符串的长度与
Figure BDA0001719699000000035
确定,所述目标操作策略对应产生的新切片个数小于所述目标字符串的切片总数;
阈值确定子单元,用于将所述目标字符串的切片总数与所述目标操作策略对应产生的新切片个数之间的差值,作为字符串过滤阈值。
可选的,所述装置还包括:
目标策略选定单元,用于选定所述目标操作策略:
其中,所述目标策略选定单元包括:
当前策略确定子单元,用于按照对至少两个待选操作策略的策略排序结果,依次选择每一待选操作策略,并将当前选择的待选操作策略作为当前策略,其中,所述至少两个待选操作策略是按照对应产生的新切片个数进行降序排序的;
切片个数确定子单元,用于若按照所述当前策略对所述目标字符串进行
Figure BDA0001719699000000041
次的字符操作,则确定由所述
Figure BDA0001719699000000042
次的字符操作产生的不同于所述目标字符串的新切片个数;
目标策略确定子单元,用于判断所述当前策略对应产生的新切片个数是否小于所述目标字符串的切片总数;若是,则将所述当前策略作为所述目标操作策略;若否,则将下一待选操作策略作为所述当前策略,触发所述切片个数确定子单元的功能。
可选的,所述字符串匹配单元包括:
切片匹配子单元,用于将所述目标字符串的各个目标切片与各个第一候选字符串的候选切片进行匹配,将匹配上的目标切片作为命中切片;
切片选择子单元,用于选择N个命中切片,其中,N=m-M+1,m是命中切片的总数,M是所述字符串过滤阈值;
候选串确定子单元,用于对于所述N个命中切片,确定每一命中切片所属的至少一个第一候选字符串,将确定的每一第一候选字符串作为第二候选字符串;
字符串匹配子单元,用于若所述第二候选字符串包括的命中切片个数大于或等于M,则将所述第二候选字符串作为所述相似字符串。
本申请实施例还提供了一种字符串匹配装置,包括:处理器、存储器、系统总线;
所述处理器以及所述存储器通过所述系统总线相连;
所述存储器用于存储一个或多个程序,所述一个或多个程序包括指令,所述指令当被所述处理器执行时使所述处理器执行上述字符串匹配方法中的任意一种实现方式。
本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在终端设备上运行时,使得所述终端设备执行上述字符串匹配方法中的任意一种实现方式。
本申请实施例还提供了一种计算机程序产品,所述计算机程序产品在终端设备上运行时,使得所述终端设备执行上述字符串匹配方法中的任意一种实现方式。
本申请实施例提供的一种字符串匹配方法及装置,获取待匹配的目标字符串,并确定用于匹配的目标候选集;然后确定一个字符串过滤阈值,其中,该字符串过滤阈值是目标字符串与每一相似字符串至少要匹配上的切片个数,相似字符串是目标候选集中与目标字符串相似的一个第一候选字符串;当确定了字符串过滤阈值后,便可以从目标候选集中匹配出各个相似字符串,使相似字符串与目标字符串的相同切片的数量至少达到字符串过滤阈值。本实施例通过字符串过滤阈值,可以快速准确的匹配到相似字符串。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种字符串匹配方法的流程示意图;
图2a为本申请实施例提供的删除1个字块的字符串示意图;
图2b为本申请实施例提供的删除2个字块的字符串示意图;
图2c为本申请实施例提供的删除3个字块的字符串示意图之一;
图2d为本申请实施例提供的删除3个字块的字符串示意图之二;
图2e为本申请实施例提供的删除3个字块的字符串示意图之三;
图3a为本申请实施例提供的替换1个字块的字符串示意图;
图3b为本申请实施例提供的替换2个字块的字符串示意图;
图3c为本申请实施例提供的替换3个字块的字符串示意图之一;
图3d为本申请实施例提供的替换3个字块的字符串示意图之二;
图3e为本申请实施例提供的替换3个字块的字符串示意图之三;
图4为本申请实施例提供的字符串过滤阈值的确定方法的流程示意图;
图5a为本申请实施例提供的字符替换示意图之一;
图5b为本申请实施例提供的字符替换示意图之二;
图6为本申请实施例提供的字符替换示意图之三;
图7为本申请实施例提供的字符替换示意图之四;
图8为本申请实施例提供的字符删除示意图;
图9为本申请实施例提供的根据字符串过滤阈值进行字符串筛选的流程示意图;
图10为本申请实施例提供的一种字符串匹配装置的组成示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
第一实施例
参见图1,为本实施例提供的一种字符串匹配方法的流程示意图,该字符串匹配方法包括以下步骤:
S101:获取待匹配的目标字符串。
在本实施例中,需要基于一个已有字符串,匹配出与之相似的一个或多个字符串,对于需要进行字符串匹配的该已有字符串,本实施例将该已有字符串定义为目标字符串。
S102:确定目标候选集,其中,所述目标候选集包括多个第一候选字符串。
在实际应用中,为了实现字符串匹配,需要预先构建一个字符串候选集Cad,该字符串候选集Cad中通常包括大量的候选字符串,这样,当需要对目标字符串进行字符串匹配时,可以从该字符串候选集Cad中匹配出与目标字符串相似的一个或多个候选字符串。
由于该字符串候选集Cad可能是一个庞大的候选字符串集合,可以从字符串候选集Cad中初选一个字符串子集、且该字符串子集中应至少包括大部分与目标字符串相似的候选字符串,用于作为目标字符串的匹配对象,本实施例将初选而成的字符串子集定义为目标候选集,需要说明的是,对于初选而形成的目标候选集,其筛选方式将在后续第二实施例中介绍。可以理解的是,与字符串候选集Cad相比,目标候选集是一个相对较小的字符串集合,从中匹配出与目标字符串相似的候选字符串,将在一定程度上提高匹配效率。
当然,本实施例也可以直接将该字符串候选集Cad作为目标候选集,此外,为便于区分,将目标候选集中的每个候选字符串定义为第一候选字符串。
S103:确定字符串过滤阈值,其中,所述字符串过滤阈值是所述目标字符串与相似字符串至少要匹配上的切片个数,所述相似字符串是所述目标候选集中与所述目标字符串相似的一个第一候选字符串。
为了实现字符串匹配,本实施例需要预先将目标字符串以及目标候选集中的每个第一候选字符串,分别进行切片处理,这里采用one gap gram切片方式,是跳一字的切片方式。为便于理解one gap gram切片方式,以字符串“我在中国”为例,为了不丢失边界字符信息,将字符串头尾扩充成“x我在中国x”,这样可以保证每个字符信息的平等,即对于“我在中国”中的每个字符,保证其左右都有字符与之进行组合,当对“x我在中国x”进行切片处理后,得到的各个切片为{x我,x在,我在,我中,在中,在国,中国,中x,国x},切片总数是2*length+1=9,其中,length为字符串“我在中国”的长度4。
在本实施例中,将与目标字符串相似的每个第一候选字符串称为相似字符串,而字符串过滤阈值MergThreshold是一个大于或等于1的整数,它表示目标字符串与每个相似字符串至少要匹配上的切片个数。
需要说明的是,后续将通过第三实施例说明本步骤S103的具体实现方式。
S104:根据所述字符串过滤阈值,从所述目标候选集中匹配出所述相似字符串。
对目标字符串进行切片操作后,由于目标字符串的字符长度为Lq,将得到2*Lq+1个切片,记作
Figure BDA0001719699000000061
为便于描述,这里将目标字符串的每一切片定义为目标切片,将所有目标切片形成的切片集合定义为目标切片集G,并且,将目标候选集的第一候选字符串的每一切片定义为候选切片,将所有候选切片形成的切片集合定义为候选切片集F。
可以利用目标字符串的2*Lq+1个目标切片,对目标候选集的各个第一候选字符串进行切片匹配,具体来讲,对于目标切片集G中的各个目标切片,或许其全部包含在候选切片集F中,或者其部分包含在候选切片集F中,这里将包含在候选切片集F中的每一目标切片称为命中切片,记做{hit_slice1,hit_slice2,...hit_slicem},其中命中切片的个数为m。
可以得出的是,
Figure BDA0001719699000000062
其中,L{hit_slice1,hit_slice2,...hit_slicem}表示目标字符串中的命中切片的个数m,
Figure BDA0001719699000000063
表示目标字符串的切片总数2*Lq+1。
在本实施例中,字符串过滤阈值MergThreshold是目标字符串与每一相似字符串至少要匹配上的切片个数,因此,对于目标候选集中的各个第一候选字符串,只要第一候选字符串中至少存在MergThreshold个命中切片,即该第一候选字符串中有MergThreshold个候选切片与目标字符串的MergThreshold个目标切片相同,则该第一候选字符串即为目标字符串的相似字符串。
需要说明的是,后续将通过第四实施例说明本步骤S104的具体实现方式。
综上,本实施例提供的一种字符串匹配方法,获取待匹配的目标字符串,并确定用于匹配的目标候选集;然后确定一个字符串过滤阈值,其中,该字符串过滤阈值是目标字符串与每一相似字符串至少要匹配上的切片个数,相似字符串是目标候选集中与目标字符串相似的一个第一候选字符串;当确定了字符串过滤阈值后,便可以从目标候选集中匹配出各个相似字符串,使相似字符串与目标字符串的相同切片数量至少达到字符串过滤阈值。本实施例通过字符串过滤阈值,可以快速准确的匹配到相似字符串。
第二实施例
需要说明的是,本实施例将对第一实施例中S102中“确定目标候选集”的实现方式进行介绍。
步骤S102可以基于预设的编辑距离阈值确定目标候选集。编辑距离是通过插入、删除和替换三种操作将某个字符串完全变换成另外一个字符串的代价,一般来说,编辑距离越小,两个字符串的相似度越大。在本实施例中,可以预先设置一个编辑距离阈值
Figure BDA0001719699000000071
该编辑距离阈值
Figure BDA0001719699000000072
可以是目标字符串转换成相似字符串所需的最多编辑次数,该编辑距离阈值
Figure BDA0001719699000000073
可以由用户设定、也可以使用系统默认值,该编辑距离阈值
Figure BDA0001719699000000074
是实现匹配操作的关键参数。可以理解的是,编辑距离阈值
Figure BDA0001719699000000075
越大,从目标候选集中匹配到的相似字符串越多,反之,编辑距离阈值
Figure BDA0001719699000000076
越小,从目标候选集中匹配到的相似字符串越少。
例如,假设目标字符串为“中国在东方”,若用户期望能匹配到譬如“中国在亚洲东方”等具有两个字以内差距的候选字符串作为相似字符串,由于目标字符串“中国在东方”通过插入“亚洲”两个字变换成候选字符串“中国在亚洲东方”,所以变换代价为2。如果预设的编辑距离阈值
Figure BDA0001719699000000077
为2,将能找到候选字符串“中国在亚洲东方”。
在本实施例的一种实现方式中,步骤S102具体可以根据目标字符串的长度以及预设的编辑距离阈值,从原始字符串集合中筛选出多个第一候选字符串,形成目标候选集。
在本实现方式中,可以将第一实施例中提及的字符串候选集Cad定义为原始字符串集合。当设置了编辑距离阈值
Figure BDA0001719699000000078
之后,便可以从字符串候选集Cad中选取一些候选字符串而形成目标候选集。具体实现时,如果目标字符串的字符长度为Lq,可以从字符串候选集Cad中筛选出字符长度属于
Figure BDA0001719699000000079
区间内的各个候选字符串,使这些候选字符串形成目标候选集,其中的每一候选字符串即为第一候选字符串。可以理解的是,通过字符串长度进行了候选过滤,便可以得到符合长度要求的候选字符串了。
进一步地,本实施例中的目标候选集可以以另一种形式进行表示,为此,需要离线执行以下3个初始化操作:
操作1、将字符串候选集Cad中每一候选字符串进行数字索引化,数字索引化是指将每个候选字符串进行编号。假设字符串候选集Cad为[我在中国,我喜欢冬天,我会唱歌],并假设编号是顺序增长且从0开始的,则对字符串候选集Cad进行数字索引化后为[0,1,2]。
操作2、在上述字符串候选集Cad中,预先将字符串候选集Cad中每个候选字符串进行切片处理,这里采用第一实施例中提及的one gap gram切片方式,是跳一字的切片方式。
操作3、预先设置多个长度节点,从而形成长度节点序列,可以将长度节点序列中每个长度节点进行编号,比如n0、n1、n2....nk。在该长度节点序列中,每个长度节点对应一个字符串长度范围,如下表1所示。
表1
节点编号 n0 n1 n2 n3 nk
长度范围 [0,s) [s,2s) [2s,3s) [3s,4s) …. [ks,(k+1)s]
其中,[0,s)、[s,2s)、[2s,3s)....[ks,(k+1)s]分别代表不同长度节点对应的字符串长度范围。实际应用时,可以根据需求为s设置一个值,比如10,如表2所示:
表2
节点编号 n0 n1 n2 n3 nk
长度范围 [0,10) [10,20) [20,30) [30,40) …. [k*10,(k+1)*10]
需要说明的是,上述每个长度节点的步长均相等,即步长均为s,当然,每个长度节点的步长也可以部分或全部不同。
接下来,基于上述初始化操作结果,使目标候选集中的各个第一候选字符串在其包含的切片下以数字索引的方式表示,下面具体介绍。
具体来讲,对于目标候选集中的各个第一候选字符串,首先,确定每个第一候选字符串属于上述操作3中哪个长度节点对应的字符串长度范围。
例如,假设目标候选集中有5个第一候选字符串,其索引分别为0、1、2、3、4,并且各个第一候选字符串的字符串长度,分别在表1所示节点n0和n1对应的字符串长度范围内,其中,节点n0下有索引为1、3、4这三个第一候选字符串,节点n1下有索引为0、2这两个第一候选字符串。
然后,由于上述初始化操作2已经对各个第一候选字符串进行了切片处理,因而需要确定每一长度节点下的不同候选切片以及每一候选切片所属的第一候选字符串的索引,并且,可以进一步对每一不同候选切片进行单向散列哈希化,得到对应于每一候选切片的哈希值,这样,每一长度节点将对应一个或多个候选切片的哈希值、且每一哈希值对应于一个或多个第一候选字符串的数字索引。此外,每一候选切片可以对应一个切片下挂链表,该切片下挂链表中保存着对应候选切片所属的每一第一候选字符串的数字索引。
例如,以上个例子中的节点n0为例,对于节点n0下索引为1、3、4的第一候选字符串,可以确定这3个第一候选字符串所包含的各个不同的候选切片,假设包含切片1、切片2和切片3,其中,切片1分别属于索引为1、3、4的第一候选字符串,切片2属于索引为1的第一候选字符串,切片3分别属于索引为1、4的第一候选字符串;此外,还要将节点n0下的每一不同候选切片进行单向散列哈希化,得到对应于每一候选切片的哈希值,然后将各个候选切片的哈希值,存入节点n0对应的哈希表中。这样,节点n0对应的哈希表中存储有3个哈希值,切片1的哈希值对应索引1、3、4,切片2的哈希值对应索引1,切片3的哈希值对应索引1、4。此外,还可以将目标字符串的索引存入节点n0的下挂链表中。
可见,通过上述方式,可以确定每一长度节点下的各个候选切片,以及每一候选切片下的第一候选字符串的数字索引。需要说明的是,这种表达方式将应用于后续第四实施例中。
第三实施例
需要说明的是,本实施例将对第一实施例中S103中“确定字符串过滤阈值”的实现方式进行介绍。
步骤S103可以基于预设的编辑距离阈值确定字符串过滤阈值MergThreshold,其中,编辑距离阈值MergThreshold是目标字符串转换成相似字符串所需的最多编辑次数,编辑距离阈值MergThreshold的相关介绍,请参见上述第二实施例,在此不再赘述。
在本实施例中的一种实现方式中,步骤S103具体可以根据目标字符串的长度以及预设的编辑距离阈值,确定字符串过滤阈值。
需要说明的是,当目标字符串中需要被匹配到的切片个数越少,那么,对目标候选集的过滤条件越弱,这样,从目标候选集中匹配到的相似字符串就会越多。基于此,在本实施例中,由于对目标字符串的最多编辑次数是编辑距离阈值
Figure BDA0001719699000000091
可以确定
Figure BDA0001719699000000092
次编辑最多能够产生多少个新切片,而新切片的最多个数n还与目标字符串的长度相关,因此可以根据目标字符串的长度以及
Figure BDA0001719699000000093
次编辑对应的字符编辑方式,确定新切片的最多个数n,那么,便可以将“目标字符串的切片总数与新切片最多个数n之间的差值”作为字符串过滤阈值MergThreshold,便可以得到较小的字符串过滤阈值MergThreshold,进而可以匹配到更多的相似字符串。如第一实施例所述,MergThreshold表示目标字符串与每一相似字符串之间至少要匹配到的切片个数,如果目标候选集中某个第一候选字符串中的匹配切片个数达到MergThreshold,则可以认为这个第一候选字符串为目标字符串的相似字符串。
为了确定MergThreshold,在这之前,需要对不同编辑操作(删除操作、替换操作和插入操作)能够产生的新切片个数进行统计分析,介绍如下。
为便于描述,将被编辑操作前的字符串定义为字符串1,将被编辑操作后的字符串称为字符串2。此外,将两个字符之间的距离定义为gap,那么,当两个字符连续(不间隔字符)时,称gap小于1,当两个字符之间间隔一个字符时,称gap等于1,当两个字符之间间隔至少两个字符时,称gap大于1。
下面基于不同的操作类型,对编辑操作后产生的新切片个数进行总结。
一、删除操作
情况(1):相比于字符串1,字符串2少了一个字符。
例如,字符串1是“我想听刘德华的忘情水”,字符串2是“我想听德华的忘情水”,其中,字符串2少了一个字符“刘”。
对字符串2进行切片操作,得到的切片序列为:
“我想听德华的忘情水”=>[x我,x想,我想,我听,想听,想德,听德,听华,德华,德的,华的,华忘,的忘,的情,忘情,忘水,情水,情x,水x]
其中,“想德”和“听华”是产生的新切片。
情况(2):相比于字符串1,字符串2少了2个字符,这2个字符之间的gap小于1。
例如,字符串1是“我想听刘德华的忘情水”,字符串2是“我想德华的忘情水”,其中,字符串2少了一个字符“听”和“刘”。
对字符串2进行切片操作,得到的切片序列为:
“我想德华的忘情水”=>[x我,x想,我想,我德,想德,想华,德华,德的,华的,华忘,的忘,的情,忘情,忘水,情水,情x,水x]
其中,“我德”、“想德”、“想华”是产生的新切片。
情况(3):相比于字符串1,字符串2少了2个字符,这2个字符之间的gap等于1。
例如,字符串1是“我想听刘德华的忘情水”,字符串2是“我听德华的忘情水”,其中,字符串2少了一个字符“想”“刘”。
对字符串2进行切片操作,得到的切片序列为:
“我听德华的忘情水”=>[x我,x听,我听,我德,听德,听华,德华,德的,华的,华忘,的忘,的情,忘情,忘水,情水,情x,水x]
其中,“x听”、“我德”、“听华”是产生的新切片。
情况(4):相比于字符串1,字符串2少了2个字符,这2个字符之间的gap大于1。
例如,字符串1是“我想听刘德华的忘情水”,字符串2是“我想听德华的情水”,其中,字符串2少了一个字符“刘”“忘”。
对字符串2进行切片操作,得到的切片序列为:
“我想听德华的情水”=>[x我,x想,我想,我听,想听,想德,听德,听华,德华,德的,华的,华情,的情,的水,情水,情x,水x]
其中,“想德”、“听华”、“华情”、“的水”是产生的新切片。
对上述删除操作下的4种少字情况进行分析可知,与字符串1相比,当字符串2少了n个字符时,将产生约2n个新切片,如后续表1所示。
为了便于理解上述结论,下面结合图例进行说明,并仍以字符串1为“我想听刘德华的忘情水”为例进行说明。
如图2a所示的删除1个字块的字符串示意图,假设深色字块“德”是字符串2与字符串1相比时所少的1个字块,当字符串2少1个字时,会产生2个新切片,箭头所指的字符组合即为新切片。
如图2b所示的删除2个字块的字符串示意图,假设深色字块“德”和“忘”是字符串2与字符串1相比时所少的2个字块,当字符串2少2个字且这2字之间的gap大于1时,会产生4个新切片,箭头所指的字符组合即为新切片。
如图2c所示的删除3个字块的字符串示意图,其中“x”是字符串边缘扩充字符,假设深色字块“我”、“德”和“忘”是字符串2与字符串1相比时所少的3个字块,当字符串2少3个字且每相邻2个字之间的gap大于1时,会产生5个新切片,箭头所指的字符组合即为新切片。
可见,当缺少字块靠边时,比如图2c所示的“我”,缺少“我”并不能导致产生2个新切片,因此,当缺少字块之间的gap大于1时,如果想要缺少字块后能生成最多的新切片,缺少字块不能靠边。基于此,当字符串1的长度为L时,若字符串2最多缺少m=(L-3)/3+1个字块、且相邻字块之间的gap大于1,将产生最多数量的新切片且新切片个数为2n,如后续表1所示。
如图2d所示的删除3个字块的字符串示意图,假设深色字块“德”、“华”和“的”是字符串2与字符串1相比时所少的3个字块,当字符串2少3个字且每相邻2个字之间的gap小于1时,由于没有靠边的缺少字符,因而会产生3个新切片,箭头所指的字符组合即为新切片。通过类似分析可知,当缺少1个字块时且该字块不靠边时,会产生2个新切片;当缺少2个或2个以上字块(比如3个、4个)时,若相邻两个缺少字块之间的gap小于或等于1、且缺少字块不靠边时,将产生3个新切片,如后续表1所示。
如图2e所示的删除3个字块的字符串示意图,其中“x”是字符串边缘扩充字符,假设深色字块“我”、“想”和“听”是字符串2与字符串1相比时所少的3个字块,当字符串2少3个字且每相邻2个字之间的gap小于1后,由于存在靠边的缺少字符,因而会产生2个新切片,箭头所指的字符组合即为新切片。通过类似分析可知,当缺少1个字块时且该字块靠边时,会产生1个新切片;当缺少2个或2个以上字块(比如3个、4个)时,若相邻两个缺少字块之间的gap小于或等于1、且缺少字块靠边时,将最多产生2个新切片,如后续表1所示。
二、替换/插入操作
情况(1):相比于字符串1,字符串2中替换或插入了1个字符。
例如,字符串1是“我想听刘德华的忘情水”,字符串2是“我想听刘德花的忘情水”,其中,字符“华”替换成了“花”,由此产生的新切片为:
“我想听刘德花的忘情水”=>[...,刘花,德花,花的,花忘,...]
又例如,字符串1是“我想听刘德华的忘情水”,字符串2是“我想听刘德华的哦忘情水”,其中,插入了字符“哦”,由此产生的新切片为:
“我想听刘德华的哦忘情水”=>[...,华哦,的哦,哦忘,哦情,...]
情况(2):相比于字符串1,字符串2中替换或插入了2个字符、且这两个字符之间的gap小于或等于1。
例如,字符串1是“我想听刘德华的忘情水”,字符串2是“我想听刘得花的忘情水”,其中,字符“德”替换成了“得”,字符“华”替换成了“花”,且“得”和“花”之间的gap小于1,由此产生的新切片为:
“我想听刘得花的忘情水”=>[...,听得,刘得,刘花,得花,得的,花的,花忘,...]
又例如,字符串1是“我想听刘德华的忘情水”,字符串2是“我想听流德花的忘情水”,其中,字符“刘”替换成了“流”,字符“华”替换成了“花”,且“流”和“花”之间的gap等于1,由此产生的新切片为:
“我想听流德花的忘情水”=>[...,想流,听流,流德,流花,德花,花的,花忘,...]
又例如,字符串1是“我想听刘德华的忘情水”,字符串2是“我想听刘德华的哦啊忘情水”,其中,插入了字符“哦”和“啊”,且“哦”和“啊”之间的gap小于1,由此产生的新切片为:
“我想听刘德华的哦啊忘情水”=>[...,华哦,的哦,的啊,哦啊,哦忘,啊忘,啊情,...]
又例如,字符串1是“我想听刘德华的忘情水”,字符串2是“我想听刘德华的哦忘啊情水”,其中,插入了字符“哦”和“啊”,且“哦”和“啊”之间的gap等于1,由此产生的新切片为:
“我想听刘德华的哦忘啊情水”=>[...,华哦,的哦,哦忘,哦啊,忘啊,啊情,啊水,...]
情况(3):相比于字符串1,字符串2中替换或插入了2个字符、且这两个字符之间的gap大于1。
例如,字符串1是“我想听刘德华的忘情水”,字符串2是“我想亭刘德花的忘情水”,其中,字符“听”替换成了“亭”,字符“华”替换成了“花”,且“亭”和“花”之间的gap大于1,由此产生的新切片为:
“我想亭刘德花的忘情水”=>[...,我亭,想亭,亭刘,亭德,刘花,德花,花的,花忘,...]
又例如,字符串1是“我想听刘德华的忘情水”,字符串2是“我像听刘德花的忘情水”,其中,字符“想”替换成了“像”,字符“华”替换成了“花”,且“像”和“花”之间的gap大于1,由此产生的新切片为:
“我像听刘德花的忘情水”=>[...,x像,我像,像听,像刘,刘花,德花,花的,花忘,...]
又例如,字符串1是“我想听刘德华的忘情水”,字符串2是“我想听刘德华的哦忘情啊水”,其中,插入了字符“哦”和“啊”,且“哦”和“啊”之间的gap大于1,由此产生的新切片为:
“我想听刘德华的哦忘情啊水”=>[...,华哦,的哦,哦忘,哦情,忘啊,情啊,啊水,啊x,...]
对上述替换/插入操作下的3种情况进行分析可知,与字符串1相比,当字符串2替换或插入了n个字符时,将产生约4n个新切片,如后续表1所示。
为了便于理解上述结论,下面结合图例进行说明,并仍以字符串1为“我想听刘德华的忘情水”为例进行说明。
如图3a所示的替换1个字块的字符串示意图,假设深色字块“的”是字符串1中被替换的1个字块,替换后的字符串为字符串2,当替换1个字块后,会产生4个新切片,箭头所指的字符组合即为新切片。同样地,当在字符串1中插入1个新字块时,也会产生4个新切片。
如图3b所示的替换2个字块的字符串示意图,假设深色字块“刘”和“的”是字符串1中被替换的2个字块,替换后的字符串为字符串2,当替换2个字块、且这2个字块之间的gap大于1时,会产生8个新切片,箭头所指的字符组合即为新切片。同样地,当在字符串1中插入2个字块、且这2个字块之间的gap大于1时,也会产生8个新切片。
如图3c所示的替换3个字块的字符串示意图,假设深色字块“我”、“刘”和“的”是字符串1中被替换的3个字块,替换后的字符串为字符串2,当替换3个字块、且这3个字块之间的gap大于1时,会产生11个新切片,箭头所指的字符组合是相比于图3b增加的新切片。同样地,当在字符串1中插入3个字块、且这3个字块之间的gap大于1时,也会产生11个新切片。
可见,当替换/插入字块靠边时,比如图3c所示的“我”,替换/插入“我”并不能导致产生4个新切片,因此,当替换/插入字块之间的gap大于1时,如果想要替换/插入字块后能生成最多的新切片,替换/插入字块不能靠边。基于此,当字符串1的长度为L时,若字符串2中最多替换/插入了m=(L-3)/3+1个字符、且相邻字符之间的gap大于1,将产生最多数量的新切片且切片数量为4n,如后续表1所示。
如图3d所示的替换3个字块的字符串示意图,假设深色字块“德”、“华”和“的”是字符串1中被替换的3个字块,替换后的字符串为字符串2,当替换3个字块、且每相邻2个字块之间的gap小于1时,会产生9个新切片,箭头所指即为新切片。同样地,当在字符串1中插入3个字块、且每相邻2个字块之间的gap小于1时,也会产生9个新切片。
可见,如果相邻的替换/插入字块之间的gap小于1、且替换/插入字块不靠边,在此前提下,当字符串1的长度为L时,若最多替换/插入m=L-2个字块,将产生最多数量的新切片且切片数量为4n-(2n-3),如后续表1所示。
通过类似分析可知,如果相邻的替换/插入字块之间的gap等于1、且替换/插入字块不靠边,在此前提下,当字符串1的长度为L时,若最多替换/插入m=(L-1)/2个字块,将产生最多数量的新切片且切片数量为4n-(n-1),如后续表1所示。
如图3e所示的替换3个字块的字符串示意图,假设深色字块“我”、“想”和“听”是字符串1中被替换的3个字块,替换后的字符串为字符串2,当替换3个字块、且每相邻2个字块之间的gap小于1时,会产生8个新切片,箭头所指即为新切片。同样地,当在字符串1中插入3个字块、且这3个字块之间的gap小于1时,也会产生8个新切片。
可见,如果相邻的替换/插入字块之间的gap小于1、且某个替换/插入字块靠边,在此前提下,当字符串1的长度为L时,若最多替换/插入m=L-1个字块,将产生最多数量的新切片且切片数量为4n-(2n-2),如后续表1所示。
通过类似分析可知,如果相邻的替换/插入字块之间的gap等于1、且替换/插入字块靠边,在此前提下,当字符串1的长度为L时,若最多替换/插入m=L/2个字块,将产生最多数量的新切片且切片数量为4n-n,如后续表1所示。
表1
Figure BDA0001719699000000131
通过表1可以看出,当产生新切片数量越多的时候,对字符串1进行替换/插入/删除操作的组合方式越多。
例如,当产生的新切片个数小于或等于12的时候,至少有以下几种操作方式:
1、3个替换/插入操作,比如产生条件是表1中的条件4;
2、4个替换/插入操作,比如产生条件是表1中的条件5或者条件7;
3、4个替换/插入操作,比如产生条件是表1中的条件9或者条件10。
又例如,当产生的新切片个数小于或等于2的时候,比如产生条件是表1中的条件3。
基于表1中对新切片的产生个数以及产生条件的归纳总结,如图4所示,在本实施例中,上述“根据所述目标字符串的长度以及预设的编辑距离阈值,确定字符串过滤阈值”,具体可以包括:
S401:若按照选定的目标操作策略对目标字符串进行
Figure BDA0001719699000000141
次的字符操作,则确定由
Figure BDA0001719699000000142
次的字符操作产生的不同于目标字符串的新切片个数。
在本实施例中,可以为目标字符串选定一个目标操作策略,利用该目标操作策略可以对目标字符串进行
Figure BDA0001719699000000143
次的字符操作,该
Figure BDA0001719699000000144
次的字符操作可以包括至少一种操作类型,具体地,该
Figure BDA0001719699000000145
次的字符操作可以包括上述表1中的替换操作、插入操作和删除操作中的至少一种操作类型。
其中,当定义目标字符串中的每个字符为原始字符时,那么,插入操作是指在目标字符串中插入一个字符,替换操作是指将目标字符串中的一个原始字符替换为另一字符(该字符与被替换的原始字符不同),删除操作是指删除目标字符串中的一个原始字符。
需要说明的是,如表1所示,当需要对目标字符串进行删除、替换、插入等操作时,由于每种操作类型对应产生的新切片个数与目标字符串的长度有关,故而,本步骤S401中
Figure BDA0001719699000000146
次的字符操作所涉及的每种操作类型的操作次数是由目标字符串的长度与
Figure BDA0001719699000000147
共同确定的。
S402:将目标字符串的切片总数与目标操作策略对应产生的新切片个数之间的差值,作为字符串过滤阈值。
由于字符串过滤阈值MergThreshold是指目标字符串与相似字符串至少要匹配上的切片个数,因此,目标操作策略对应产生的新切片个数应小于目标字符串的切片总数,这样,便可以通过本步骤S402将二者之差作为字符串过滤阈值MergThreshold。
可以理解的是,当使用步骤S401中的目标操作策略对目标字符串进行
Figure BDA0001719699000000148
次的字符操作时,可以确定因
Figure BDA0001719699000000149
次的字符操作而产生的不同于目标字符串的新切片个数,即确定可以产生多少个新切片。一种期望的结果是,希望目标操作策略对应产生的新切片个数是一个最大值,这样便可以计算得到最小的字符串过滤阈值MergThreshold,进而可以从目标候选集中匹配出更多的相似字符串。
为此,本实施例基于表1预先制定两个或两个以上的待选操作策略,在实际应用中,可以采用逐步退化的方式,从这些待选操作策略中选定一个策略作为目标操作策略,尽量使目标操作策略对应的新切片个数最大,具体实现时,可以包括以下步骤A-C。
步骤A:按照对至少两个待选操作策略的策略排序结果,依次选择每一待选操作策略,并将当前选择的待选操作策略作为当前策略,其中,所述至少两个待选操作策略是按照对应产生的新切片个数进行降序排序的。
可以根据表1的结论,制定两个或两个以上的待选操作策略,且每一种待选操作策略对应不同的新切片个数,可以将这些待选操作策略按照其对应的新切片个数进行降序排序,以便按照排序结果逐一使用每一待选操作策略对目标字符串进行
Figure BDA0001719699000000151
次的字符操作。
步骤B:若按照所述当前策略对目标字符串进行
Figure BDA0001719699000000152
次的字符操作,则确定由该
Figure BDA0001719699000000153
次的字符操作产生的不同于目标字符串的新切片个数。
按照上述策略排序结果,对目标字符串依次实施每一待选操作策略,对于当前实施的策略,确定其对应产生的新切片个数。
步骤C:判断所述当前策略对应产生的新切片个数是否小于目标字符串的切片总数;若是,则将所述当前策略作为所述目标操作策略;若否,则将下一待选操作策略作为所述当前策略,继续执行步骤B。
如果当前策略对应产生的新切片个数小于目标字符串的切片总数,说明当前策略实施于目标字符串是可行的,此时可以将当前策略作为目标操作策略,反之,说明当前策略实施于目标字符串是不可行的,此时应使用下一待选操作策略作为当前策略,以判断其可行性,从而以这种逐步退化的方式最终确定出目标操作策略。
在本实施例中,预先设置了四个策略,按照其对应产生的新切片数量进行降序排序后,依次为第一策略、第二策略、第三策略以及第四策略,然而,为了最终选定一个目标操作策略,当第一策略、第二策略、第三策略均不可行时,可以选择第四策略,因为第四策略对应产生的新切片个数一定小于目标字符串的切片总数。基于此,关于上述步骤A中提及的至少两个待选操作策略,可以包括第一策略、第二策略、第三策略中排序在前的至少一个策略以及第四策略。
接下来,当上述步骤B中的当前策略分别为第一策略、第二策略、第三策略、第四策略时,对步骤B中如何“按照当前策略对目标字符串进行
Figure BDA0001719699000000154
次的字符操作”进行介绍。
(1)、若当前策略为第一策略,则按照下述方式对目标字符串进行
Figure BDA0001719699000000155
次的字符操作,具体包括以下步骤B11-B13:
步骤B11:计算m=(L-3)/3+1,其中,L为目标字符串的长度。
如表1所示的“新切片个数”一栏,选择4n的产生条件即条件4,对目标字符串进行字符操作,因而需要计算该操作的最多操作次数m=(L-3)/3+1。
步骤B12:若
Figure BDA0001719699000000156
小于或等于m,则对目标字符串进行
Figure BDA0001719699000000157
次插入操作或
Figure BDA0001719699000000158
次替换操作。
其中,替换或插入操作应对应于表1条件4中的“gap大于1,且替换/插入字符不靠边”,因此,当插入操作所插入的字符或替换操作所替换后的字符被定义为第一字符时,那么,相邻两个第一字符之间至少间隔目标字符串的两个原始字符,并且第一字符不在字符串边缘。
关于替换操作(插入操作类似),为便于理解,现举例说明,假设目标字符串的长度L=10,则m=(L-3)/3+1=3。由于
Figure BDA0001719699000000159
是对目标字符串进行字符操作的总次数,如果
Figure BDA00017196990000001510
小于或等于3,则应替换目标字符串中的
Figure BDA00017196990000001511
个原始字符。
步骤B13:若
Figure BDA00017196990000001512
大于m,则对所述目标字符串进行m次插入操作或m次替换操作,对于剩下的
Figure BDA00017196990000001513
次操作,先进行第一操作,当无法进行第一操作时进行第二操作,当无法进行所述第二操作时进行第三操作。
本步骤中的替换操作或插入操作与步骤B12相同,相关介绍请参见步骤B12,在此不再赘述。关于替换操作(插入操作类似),为便于理解,现举例说明,如图5a所示的字符替换示意图,图中所示目标字符串的长度L=10,则m=(L-3)/3+1=3,如果
Figure BDA0001719699000000161
大于3,可以替换目标字符串中的3个原始字符,图中深色字块“第一字符”即为替换后的3个字符。
此时,还剩下
Figure BDA0001719699000000162
次操作,基于上述插入或替换操作的操作结果,先进行第一操作,第一操作是使相邻两个第一字符之间保留至少一个原始字符,第一操作可以通过插入或替换操作来实现。例如,如图5b所示的字符替换示意图,通过第一操作替换2个原始字符、且相邻两个第一字符之间仍存在原始字符。
当第一操作可以实施
Figure BDA0001719699000000163
次则结束,但如果无法再实施第一操作且还剩下操作次数,则基于第一操作的操作结果实施第二操作,第二操作是使边缘字符不是原始字符。例如,可以删除图5b中边缘位置的原始字符,并且最多可以删除3个原始字符,即依次可以删除标号为1、2、3的原始字符。
如果无法再实施第二操作且还剩下操作次数,则基于第二操作的操作结果实施第三操作,第三操作是使相邻两个第一字符之间不保留原始字符。例如,可以通过替换操作替换掉图5b中标号为4、5的原始字符。
如果无法再实施第三操作且还剩下操作次数,则可以认为剩下的字符操作是表1条件3对应的靠边删除操作、且认为该删除操作已被实施。
可以理解的是,当按照第一策略对目标字符串进行
Figure BDA0001719699000000164
次的字符操作后,接下来,需要确定因该
Figure BDA0001719699000000165
次的字符操作对应产生的新切片个数,以便当新切片个数小于目标字符串的切片总数时,将第一策略作为目标操作策略,进而可以通过步骤S302计算字符串过滤阈值MergThreshold。例如,假设目标字符串的长度为10,则其切片总数为2*10+1=21,假设编辑距离阈值
Figure BDA0001719699000000166
为5,则需要对目标字符串进行5次字符操作,以图5b所示的前5次字符操作为例,这5次操作产生的新切片个数为16,由于新切片个数16小于目标字符串的切片总数21,因而可以将第一策略作为目标操作策略,然后通过步骤S302计算得到字符串过滤阈值MergThreshold=21–16=5。
需要说明的是,若采用第一策略得到的新切片个数不小于目标字符串的切片总数,即计算得到的MergThreshold为0或负数,将舍弃第一策略,接下来验证下一策略比如第二策略是否可以作为目标操作策略。
(2)、若当前策略为第二策略,则按照下述方式对目标字符串进行
Figure BDA0001719699000000167
次的字符操作,具体包括以下步骤B21-B23:
步骤B21:计算m=(L-1)/2,其中,L为所述目标字符串的长度。
如表1所示的“新切片个数”一栏,选择4n–(n-1)的产生条件即条件6,对目标字符串进行字符操作,因而需要计算该操作的最多操作次数(L-1)/2。
步骤B22:若
Figure BDA0001719699000000168
小于或等于m,则对所述目标字符串进行
Figure BDA0001719699000000169
次插入操作或
Figure BDA00017196990000001610
次替换操作。
其中,替换或插入操作应对应于表1条件6中的“gap等于1,且替换/插入字符不靠边”,因此,当插入操作所插入的字符或替换操作所替换后的字符被定义为第一字符时,那么,相邻两个第一字符之间应间隔目标字符串的一个原始字符,并且第一字符不在字符串边缘。
关于替换操作(插入操作类似),为便于理解,现举例说明,假设目标字符串的长度L=10,则m=(L-1)/2=4。由于
Figure BDA00017196990000001612
是对目标字符串进行字符操作的总次数,如果
Figure BDA00017196990000001611
小于或等于4,则应替换目标字符串中的
Figure BDA0001719699000000171
个原始字符。
步骤B23:若
Figure BDA0001719699000000172
大于m,则先对所述目标字符串进行m次插入操作或m次替换操作,再进行
Figure BDA0001719699000000173
次删除操作。
本步骤中的替换操作或插入操作与步骤B22相同,相关介绍请参见步骤B12,在此不再赘述。关于替换操作(插入操作类似),为便于理解,现举例说明,如图6所示的字符替换示意图,图中所示目标字符串的长度L=10,则m=(L-1)/2=4,由于
Figure BDA0001719699000000175
是对目标字符串进行字符操作的总次数,如果
Figure BDA0001719699000000174
大于4,则应替换目标字符串中的4个原始字符。
当对目标字符串进行m次插入操作或m次替换操作后,此时,还剩下
Figure BDA0001719699000000176
次操作,可以对经插入或替换操作后的字符串进行
Figure BDA0001719699000000177
次的删除操作,该删除操作所删除的字符是边缘原始字符,比如先删除如图6中标号为1或2的原始字符。
可以理解的是,当按照第二策略对目标字符串进行
Figure BDA0001719699000000178
次的字符操作后,接下来,需要确定因该
Figure BDA0001719699000000179
次的字符操作对应产生的新切片个数,以便当新切片个数小于目标字符串的切片总数时,将第二策略作为目标操作策略,进而可以通过步骤S302计算字符串过滤阈值MergThreshold。例如,假设目标字符串的长度为10,则其切片总数为2*10+1=21,假设编辑距离阈值
Figure BDA00017196990000001710
为5,则需要对目标字符串进行5次字符操作,以图6所示的前5次字符操作为例,这5次操作包括4次替换操作和1次删除操作,这5次操作产生的新切片个数为4n-(n-1)+2=4*4–(4-1)+2=13+2=15,由于新切片个数15小于目标字符串的切片总数21,因而可以将第二策略作为目标操作策略,然后通过步骤S302计算得到字符串过滤阈值MergThreshold=21–15=6。
需要说明的是,若采用第二策略得到的新切片个数不小于目标字符串的切片总数,即计算得到的MergThreshold为0或负数,将舍弃第二策略,接下来验证下一策略比如第三策略是否可以作为目标操作策略。
(3)、若当前策略为第三策略,则按照下述方式对目标字符串进行
Figure BDA00017196990000001711
次的字符操作,具体包括以下步骤B31-B33:
步骤B31:计算m=L-2,其中,L为目标字符串的长度。
如表1所示的“新切片个数”一栏,选择4n–(2n-3)的产生条件即条件5,对目标字符串进行字符操作,因而需要计算该操作的最多操作次数L-2。
步骤B32:若
Figure BDA00017196990000001712
小于或等于m,则对所述目标字符串进行
Figure BDA00017196990000001713
次插入操作或
Figure BDA00017196990000001714
次替换操作。
其中,替换或插入操作应对应于表1条件5中的“gap小于1,且替换/插入字符不靠边”,因此,当插入操作所插入的字符或替换操作所替换后的字符被定义为第一字符时,那么,相邻两个第一字符之间不间隔目标字符串的任何原始字符,即各个第一字符连续,并且第一字符不在字符串边缘。
关于替换操作(插入操作类似),为便于理解,现举例说明,假设目标字符串的长度L=10,则m=L-2=8。由于
Figure BDA00017196990000001715
是对目标字符串进行字符操作的总次数,如果
Figure BDA00017196990000001717
小于或等于8,则应替换目标字符串中的
Figure BDA00017196990000001716
个原始字符。
步骤B33:若
Figure BDA00017196990000001718
大于m,则先对所述目标字符串进行m次插入操作或m次替换操作,再进行
Figure BDA00017196990000001719
次删除操作。
本步骤中的替换操作或插入操作与步骤B32相同,相关介绍请参见步骤B12,在此不再赘述。关于替换操作(插入操作类似),为便于理解,现举例说明,假设所示目标字符串的长度L=10,则m=L-2=8,由于
Figure BDA0001719699000000181
是对目标字符串进行字符操作的总次数,如果
Figure BDA0001719699000000182
大于8,则应替换目标字符串中的8个原始字符。
当对目标字符串进行m次插入操作或m次替换操作后,此时,还剩下
Figure BDA0001719699000000183
次操作,可以对经插入或替换操作后的字符串进行
Figure BDA0001719699000000184
次的删除操作,该删除操作所删除的字符是边缘原始字符。
可以理解的是,当按照第三策略对目标字符串进行
Figure BDA0001719699000000185
次的字符操作后,接下来,需要确定因该
Figure BDA0001719699000000186
次的字符操作对应产生的新切片个数,以便当新切片个数小于目标字符串的切片总数时,将第三策略作为目标操作策略,进而可以通过步骤S302计算字符串过滤阈值MergThreshold。例如,假设目标字符串的长度为10,则其切片总数为2*10+1=21,假设编辑距离阈值
Figure BDA0001719699000000187
为5,则需要对目标字符串进行5次字符操作,以图7所示的前5次字符操作为例,这5次操作是均为替换操作,这5次操作产生的新切片个数为4n-(2n-3)=4*5–(2*5-3)=13,由于新切片个数13小于目标字符串的切片总数21,因而可以将第二策略作为目标操作策略,然后通过步骤S302计算得到字符串过滤阈值MergThreshold=21–13=8。
需要说明的是,若采用第三策略得到的新切片个数不小于目标字符串的切片总数,即计算得到的MergThreshold为0或负数,将舍弃第三策略,接下来验证下一策略比如第四策略是否可以作为目标操作策略。
(4)、若当前策略为第四策略,则按照下述方式对目标字符串进行
Figure BDA0001719699000000188
次的字符操作,具体包括以下步骤B41:
步骤B41:对所述目标字符串进行
Figure BDA0001719699000000189
次删除操作,其中,所述删除操作所删除的是包含边缘原始字符在内的
Figure BDA00017196990000001810
个连续原始字符。
可以理解的是,当按照第四策略对目标字符串进行
Figure BDA00017196990000001811
次的字符删除操作后,接下来,需要确定因该
Figure BDA00017196990000001812
次的字符删除操作对应产生的新切片个数,以便当新切片个数小于目标字符串的切片总数时,将第四策略作为目标操作策略,进而可以通过步骤S302计算字符串过滤阈值MergThreshold。例如,假设目标字符串的长度为10,则其切片总数为2*10+1=21,假设编辑距离阈值
Figure BDA00017196990000001813
为5,则需要对目标字符串进行5次字符删除操作,以图8所示的前5次字符删除操作为例,这5次操作产生的新切片个数为2,由于新切片个数2小于目标字符串的切片总数21,因而可以将第四策略作为目标操作策略,然后通过步骤S302计算得到字符串过滤阈值MergThreshold=21–2=19。
可见,通过上述逐步退化的方式,最终可以确定出字符串过滤阈值MergThreshold,接下来,便可以根据字符串过滤阈值MergThreshold,从目标候选集中匹配出所述相似字符串,具体实现请参见下面第四实施例。
第四实施例
需要说明的是,本实施例将对第一实施例中的S104“根据所述字符串过滤阈值,从所述目标候选集中匹配出所述相似字符串”的实现方式进行介绍。
参见图9,为本实施例提供的根据字符串过滤阈值进行字符串筛选的流程示意图,包括以下步骤:
S901:将目标字符串的各个目标切片与各个第一候选字符串的候选切片进行匹配,将匹配上的目标切片作为命中切片。
按照第二实施例介绍的one gap gram的切片处理方式,预先将目标字符串以及各个第一候选字符串进行切片处理,如第一实施例所述,将目标字符串的每一切片定义为目标切片,将第一候选字符串的每一切片定义为候选切片。
在本步骤中,对于目标字符串的每一目标切片q,需要将该目标切片q与各个候选切片进行匹配,确定是否存在一个候选切片与目标切片q相同,若存在,说明该目标切片q被匹配上,并将匹配上的目标切片q定义为命中切片。这样,在目标字符串的各个目标切片中,可能不存在命中切片、也可能存在一个或多个命中切片。
在本实施例中,本步骤S901可以存在以下两种具体实现方式:
在第一种实现方式中,步骤S901具体可以将目标字符串的各个目标切片,与候选切片集中的候选切片进行匹配,将匹配上的目标切片作为命中切片,其中,所述候选切片集由各个第一候选字符串的不同切片组成。
在本实现方式中,预先将目标候选集中的各个第一候选字符串进行切片处理,这些切片中可能存在重复的切片,故而将这些切片进行合并处理,从而得到多个不同的候选切片,将这些不同候选切片形成的集合定义为候选切片集。
对于目标字符串的每一目标切片q,需要将目标切片q与候选切片集进行切片匹配,确定候选切片集中是否存在一个候选切片与目标切片q相同,若存在,说明目标切片q被匹配上,该匹配上的目标切片q即为命中切片,这样,在候选切片集中,或者不存在命中切片、或者存在一个或多个命中切片。
在第二种实现方式中,步骤S901具体可以将目标字符串的各个目标切片,与每一切片子集中的候选切片进行匹配,将匹配上的目标切片作为命中切片,其中,所述切片子集由对应长度区间下的第一候选字符串的不同切片组成,所述长度区间对应一个字符串长度范围,不同长度区间对应的字符串长度范围不重叠。
在本实现方式中,参见上述第二实施例操作3的介绍,预先划分了多个长度节点,也即划分了多个长度区间,每一长度区间对应一个字符串长度范围,且各个字符串长度范围不重叠,基于此,对应目标候选集中的各个第一候选字符串,可以确定每一第一候选字符串的长度,从而确定其所属的长度区间,这样,在每一长度区间下,或者不存在第一候选字符串、或者存在一个或多个候选字符串。故而,可以以长度区间为单位,预先将每一长度区间下的各个第一候选字符串进行切片处理,这些切片中可能存在重复的切片,故而将这些切片进行合并处理,从而得到多个不同的候选切片,将每一长度区间下的这些不同候选切片形成的集合定义为切片子集,这样,便形成了一个或多个切片子集、且每一切片子集对应一个长度区间。
对于目标字符串的每一目标切片q,以每一切片子集为单位,需要将目标切片q与切片子集进行切片匹配,确定切片子集中是否存在一个候选切片与目标切片q相同,若存在,说明目标切片q被匹配上,该匹配上的目标切片q即为命中切片,这样,在每一切片子集中,或者不存在命中切片、或者存在一个或多个命中切片。
S902:选择N个命中切片,其中,N=m-M+1,m是命中切片的总数,M是所述字符串过滤阈值。
在本实施例中,字符串过滤阈值M即上述MergThreshold,是目标字符串与相似字符串至少要匹配上的切片个数,也就是说,第一候选字符串中只要存在M或M以上个命中切片,那么该第一候选字符串就是目标字符串的相似字符串。
可以理解的是,在m个命中切片中,无论去除其中哪M-1个命中切片,在剩下的N=m-M+1个命中切片中,必然有1个属于相似字符串,例如,假设M=4,在9个命中切片中,无论去除其中哪3个命中切片,在剩下的6个命中切片中,必然有1个命中切片属于相似字符串。因此,可以从m个命中切片中选择N=m-M+1个命中切片,在目标候选集中,只要包含这N个命中切片中的任一切片的第一候选字符串,均有可能是相似字符串,因此可以将这些第一候选字符串从目标候选集中筛选出来,这样不会遗漏任何相似字符串。
在本实施例中,本步骤S902具体可以从m个命中切片中随机选择N个命中切片,也可以按照下述方式选择N个命中切片,具体介绍如下。
在本实施例中,当步骤S901采用其第一种实现方式时,本步骤S902具体可以包括:确定所述候选切片集中每一命中切片所属的第一候选字符串的个数;将所述候选切片集中每一命中切片对应的字符串个数进行升序排序,并获取排序在前的N个命中切片。
具体来讲,对于m个命中切片中的每一命中切片,该命中切片必然属于目标候选集中的一个或多个第一候选字符串,可以统计该命中切片所属的第一候选字符串的个数,使得每一命中切片均对应一个字符串个数,可以将各个字符串个数按照从小到大进行排序,并获取排序在前的N个字符串个数对应的命中切片,这样,便从候选切片集中对应筛选出N个命中切片。
在本实施例中,当步骤S901采用其第二种实现方式时,本步骤S902具体可以包括:确定所述切片子集中每一命中切片所属的第一候选字符串的个数;将所述切片子集中每一命中切片对应的字符串个数进行升序排序,并获取排序在前的N个命中切片。
具体来讲,可以以每一切片子集为单位,对于切片子集中的每一命中切片,该命中切片必然属于目标候选集中的一个或多个第一候选字符串,可以统计该命中切片所属的第一候选字符串的个数,使得每一命中切片均对应一个字符串个数,可以将各个字符串个数按照从小到大进行排序,并获取排序在前的N个字符串个数对应的命中切片,这样,便分别从每一切片子集中对应筛选出N个命中切片。
需要说明的是,当通过上述升序排序方式获取N个命中切片时,可以使后续S903得到的第二候选字符串个数尽量小,且这些第二候选字符串中能够包含所有的相似字符串,这样,可以提高相似字符串的筛选速度。
其中,为了实现排序,需要确定每一命中切片所属的第一候选字符串,具体实现时,可以基于第二实施例中提及的切片下挂链表,具体来讲,每一命中切片都有一个切片下挂链表,该切片下挂链表中保存着对应命中切片所属的每一第一候选字符串的数字索引,比如,命中切片1下的切片下挂链表中保存在索引1、2、4,说明命中切片1是第一候选字符串1、第一候选字符串2、以及第一候选字符串4中的一个切片。进而,可以以每一命中切片对应的切片下挂链表中的索引个数,确定每一命中切片所属的第一候选字符串的个数,比如,当命中切片1下的切片下挂链表中保存在索引1、2、4时,命中切片1所属的第一候选字符串的个数为3。
S903:对于所述N个命中切片,确定每一命中切片所属的至少一个第一候选字符串,将确定的每一第一候选字符串作为第二候选字符串。
当选中N个命中切片后,由于其中每一命中切片对应的切片下挂链表中保存着该命中切片所属的各个第一候选字符串的数字索引,因此,可以通过该数字索引从目标候选集中找到对应的第一候选字符串,本实施例将找到的每一第一候选字符串定义为第二候选字符串。
S904:若所述第二候选字符串包括的命中切片个数大于或等于M,则将所述第二候选字符串作为所述相似字符串。
对于每一第二候选字符串,确定该第二候选字符串中的切片中是否至少包括M个命中切片,M为字符串过滤阈值,若是,该第二候选字符串即为目标字符串的相似字符串。
可见,通过字符串过滤阈值,可以从目标候选集中快速、准确的筛选出目标字符串的相似字符串。
第五实施例
参见图10,为本实施例提供的一种字符串匹配装置的组成示意图,该字符串匹配装置1000包括:
字符串获取单元1001,用于获取待匹配的目标字符串;
候选集确定单元1002,用于确定目标候选集,其中,所述目标候选集包括多个第一候选字符串;
过滤阈值确定单元1003,用于确定字符串过滤阈值,其中,所述字符串过滤阈值是所述目标字符串与相似字符串至少要匹配上的切片个数,所述相似字符串是所述目标候选集中与所述目标字符串相似的一个第一候选字符串;
字符串匹配单元1004,用于根据所述字符串过滤阈值,从所述目标候选集中匹配出所述相似字符串。
在本实施例的一种实现方式中,所述候选集确定单元1002,具体用于根据所述目标字符串的长度以及预设的编辑距离阈值,从原始字符串集合中筛选出多个第一候选字符串,形成目标候选集;其中,所述编辑距离阈值是所述目标字符串转换成所述相似字符串所需的最多编辑次数。
在本实施例的一种实现方式中,所述过滤阈值确定单元1003,具体用于根据所述目标字符串的长度以及预设的编辑距离阈值,确定字符串过滤阈值;其中,所述编辑距离阈值是所述目标字符串转换成所述相似字符串所需的最多编辑次数。
在本实施例的一种实现方式中,所述过滤阈值确定单元1003包括:
字符操作子单元,用于若按照选定的目标操作策略对所述目标字符串进行
Figure BDA0001719699000000211
次的字符操作,则确定由所述
Figure BDA0001719699000000212
次的字符操作产生的不同于所述目标字符串的新切片个数;其中,
Figure BDA0001719699000000215
为所述编辑距离阈值,所述
Figure BDA0001719699000000213
次的字符操作包括至少一种操作类型、且所述操作类型的操作次数由所述目标字符串的长度与
Figure BDA0001719699000000214
确定,所述目标操作策略对应产生的新切片个数小于所述目标字符串的切片总数;
阈值确定子单元,用于将所述目标字符串的切片总数与所述目标操作策略对应产生的新切片个数之间的差值,作为字符串过滤阈值。
在本实施例的一种实现方式中,所述装置1000还包括:
目标策略选定单元,用于选定所述目标操作策略:
其中,所述目标策略选定单元包括:
当前策略确定子单元,用于按照对至少两个待选操作策略的策略排序结果,依次选择每一待选操作策略,并将当前选择的待选操作策略作为当前策略,其中,所述至少两个待选操作策略是按照对应产生的新切片个数进行降序排序的;
切片个数确定子单元,用于若按照所述当前策略对所述目标字符串进行
Figure BDA0001719699000000221
次的字符操作,则确定由所述
Figure BDA0001719699000000222
次的字符操作产生的不同于所述目标字符串的新切片个数;
目标策略确定子单元,用于判断所述当前策略对应产生的新切片个数是否小于所述目标字符串的切片总数;若是,则将所述当前策略作为所述目标操作策略;若否,则将下一待选操作策略作为所述当前策略,触发所述切片个数确定子单元的功能。
在本实施例的一种实现方式中,所述至少两个待选操作策略包括第一策略、第二策略、第三策略中排序在前的至少一个策略以及第四策略,其中,所述第四策略对应产生的新切片个数小于所述目标字符串的切片总数。
在本实施例的一种实现方式中,所述字符串匹配单元1004包括:
切片匹配子单元,用于将所述目标字符串的各个目标切片与各个第一候选字符串的候选切片进行匹配,将匹配上的目标切片作为命中切片;
切片选择子单元,用于选择N个命中切片,其中,N=m-M+1,m是命中切片的总数,M是所述字符串过滤阈值;
候选串确定子单元,用于对于所述N个命中切片,确定每一命中切片所属的至少一个第一候选字符串,将确定的每一第一候选字符串作为第二候选字符串;
字符串匹配子单元,用于若所述第二候选字符串包括的命中切片个数大于或等于M,则将所述第二候选字符串作为所述相似字符串。
在本实施例的一种实现方式中,所述切片匹配子单元,具体用于将所述目标字符串的各个目标切片,与候选切片集中的候选切片进行匹配,其中,所述候选切片集由各个第一候选字符串的不同切片组成;
相应地,所述切片选择子单元,具体用于确定所述候选切片集中每一命中切片所属的第一候选字符串的个数;将所述候选切片集中每一命中切片对应的字符串个数进行升序排序,并获取排序在前的N个命中切片。
在本实施例的一种实现方式中,所述切片匹配子单元,具体用于将所述目标字符串的各个目标切片,与每一切片子集中的候选切片进行匹配,其中,所述切片子集由对应长度区间下的第一候选字符串的不同切片组成,所述长度区间对应一个字符串长度范围,不同长度区间对应的字符串长度范围不重叠;
相应地,所述切片选择子单元,具体用于确定所述切片子集中每一命中切片所属的第一候选字符串的个数;将所述切片子集中每一命中切片对应的字符串个数进行升序排序,并获取排序在前的N个命中切片。
进一步地,本申请实施例还提供了一种字符串匹配装置,包括:处理器、存储器、系统总线;
所述处理器以及所述存储器通过所述系统总线相连;
所述存储器用于存储一个或多个程序,所述一个或多个程序包括指令,所述指令当被所述处理器执行时使所述处理器执行上述字符串匹配方法中的任意一种实现方式。
进一步地,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在终端设备上运行时,使得所述终端设备执行上述字符串匹配方法中的任意一种实现方式。
进一步地,本申请实施例还提供了一种计算机程序产品,所述计算机程序产品在终端设备上运行时,使得所述终端设备执行上述字符串匹配方法中的任意一种实现方式。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到上述实施例方法中的全部或部分步骤可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者诸如媒体网关等网络通信设备,等等)执行本申请各个实施例或者实施例的某些部分所述的方法。
需要说明的是,本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (15)

1.一种字符串匹配方法,其特征在于,包括:
获取待匹配的目标字符串;
确定目标候选集,其中,所述目标候选集包括多个第一候选字符串;
根据所述目标字符串的长度以及预设的编辑距离阈值,确定字符串过滤阈值;其中,所述字符串过滤阈值是所述目标字符串与相似字符串至少要匹配上的切片个数,所述相似字符串是所述目标候选集中与所述目标字符串相似的一个第一候选字符串,所述编辑距离阈值是所述目标字符串转换成所述相似字符串所需的最多编辑次数;
根据所述字符串过滤阈值,从所述目标候选集中匹配出所述相似字符串。
2.根据权利要求1所述的方法,其特征在于,所述确定目标候选集,包括:
根据所述目标字符串的长度以及预设的编辑距离阈值,从原始字符串集合中筛选出多个第一候选字符串,形成目标候选集。
3.根据权利要求1所述的方法,其特征在于,所述根据所述目标字符串的长度以及预设的编辑距离阈值,确定字符串过滤阈值,包括:
若按照选定的目标操作策略对所述目标字符串进行
Figure FDA0002816520000000011
次的字符操作,则确定由所述
Figure FDA0002816520000000018
次的字符操作产生的不同于所述目标字符串的新切片个数;
其中,
Figure FDA0002816520000000012
为所述编辑距离阈值,所述
Figure FDA0002816520000000013
次的字符操作包括至少一种操作类型、且所述操作类型的操作次数由所述目标字符串的长度与
Figure FDA0002816520000000014
确定,所述目标操作策略对应产生的新切片个数小于所述目标字符串的切片总数;
将所述目标字符串的切片总数与所述目标操作策略对应产生的新切片个数之间的差值,作为字符串过滤阈值。
4.根据权利要求3所述的方法,其特征在于,按照下述方式选定所述目标操作策略:
按照对至少两个待选操作策略的策略排序结果,依次选择每一待选操作策略,并将当前选择的待选操作策略作为当前策略,其中,所述至少两个待选操作策略是按照对应产生的新切片个数进行降序排序的;
若按照所述当前策略对所述目标字符串进行
Figure FDA0002816520000000015
次的字符操作,则确定由所述
Figure FDA0002816520000000016
次的字符操作产生的不同于所述目标字符串的新切片个数;
判断所述当前策略对应产生的新切片个数是否小于所述目标字符串的切片总数;
若是,则将所述当前策略作为所述目标操作策略;
若否,则将下一待选操作策略作为所述当前策略,继续执行若按照所述当前策略对所述目标字符串进行
Figure FDA0002816520000000017
次的字符操作的步骤。
5.根据权利要求4所述的方法,其特征在于,所述至少两个待选操作策略包括第一策略、第二策略、第三策略中排序在前的至少一个策略以及第四策略,其中,所述第四策略对应产生的新切片个数小于所述目标字符串的切片总数。
6.根据权利要求1至5任一项所述的方法,其特征在于,所述根据所述字符串过滤阈值,从所述目标候选集中匹配出所述相似字符串,包括:
将所述目标字符串的各个目标切片与各个第一候选字符串的候选切片进行匹配,将匹配上的目标切片作为命中切片;
选择N个命中切片,其中,N=m-M+1,m是命中切片的总数,M是所述字符串过滤阈值;
对于所述N个命中切片,确定每一命中切片所属的至少一个第一候选字符串,将确定的每一第一候选字符串作为第二候选字符串;
若所述第二候选字符串包括的命中切片个数大于或等于M,则将所述第二候选字符串作为所述相似字符串。
7.根据权利要求6所述的方法,其特征在于,所述将所述目标字符串的各个目标切片与各个第一候选字符串的候选切片进行匹配,包括:
将所述目标字符串的各个目标切片,与候选切片集中的候选切片进行匹配,其中,所述候选切片集由各个第一候选字符串的不同切片组成;
相应地,所述选择N个命中切片,包括:
确定所述候选切片集中每一命中切片所属的第一候选字符串的个数;
将所述候选切片集中每一命中切片对应的字符串个数进行升序排序,并获取排序在前的N个命中切片。
8.根据权利要求6所述的方法,其特征在于,所述将所述目标字符串的各个目标切片与各个第一候选字符串的候选切片进行匹配,包括:
将所述目标字符串的各个目标切片,与每一切片子集中的候选切片进行匹配,其中,所述切片子集由对应长度区间下的第一候选字符串的不同切片组成,所述长度区间对应一个字符串长度范围,不同长度区间对应的字符串长度范围不重叠;
相应地,所述选择N个命中切片,包括:
确定所述切片子集中每一命中切片所属的第一候选字符串的个数;
将所述切片子集中每一命中切片对应的字符串个数进行升序排序,并获取排序在前的N个命中切片。
9.一种字符串匹配装置,其特征在于,包括:
字符串获取单元,用于获取待匹配的目标字符串;
候选集确定单元,用于确定目标候选集,其中,所述目标候选集包括多个第一候选字符串;
过滤阈值确定单元,用于根据所述目标字符串的长度以及预设的编辑距离阈值,确定字符串过滤阈值;其中,所述字符串过滤阈值是所述目标字符串与相似字符串至少要匹配上的切片个数,所述相似字符串是所述目标候选集中与所述目标字符串相似的一个第一候选字符串,所述编辑距离阈值是所述目标字符串转换成所述相似字符串所需的最多编辑次数;
字符串匹配单元,用于根据所述字符串过滤阈值,从所述目标候选集中匹配出所述相似字符串。
10.根据权利要求9所述的装置,其特征在于,所述候选集确定单元,具体用于根据所述目标字符串的长度以及预设的编辑距离阈值,从原始字符串集合中筛选出多个第一候选字符串,形成目标候选集。
11.根据权利要求9所述的装置,其特征在于,所述过滤阈值确定单元包括:
字符操作子单元,用于若按照选定的目标操作策略对所述目标字符串进行
Figure FDA0002816520000000031
次的字符操作,则确定由所述
Figure FDA0002816520000000032
次的字符操作产生的不同于所述目标字符串的新切片个数;其中,
Figure FDA0002816520000000033
为所述编辑距离阈值,所述
Figure FDA0002816520000000034
次的字符操作包括至少一种操作类型、且所述操作类型的操作次数由所述目标字符串的长度与
Figure FDA0002816520000000035
确定,所述目标操作策略对应产生的新切片个数小于所述目标字符串的切片总数;
阈值确定子单元,用于将所述目标字符串的切片总数与所述目标操作策略对应产生的新切片个数之间的差值,作为字符串过滤阈值。
12.根据权利要求11所述的装置,其特征在于,所述装置还包括:
目标策略选定单元,用于选定所述目标操作策略:
其中,所述目标策略选定单元包括:
当前策略确定子单元,用于按照对至少两个待选操作策略的策略排序结果,依次选择每一待选操作策略,并将当前选择的待选操作策略作为当前策略,其中,所述至少两个待选操作策略是按照对应产生的新切片个数进行降序排序的;
切片个数确定子单元,用于若按照所述当前策略对所述目标字符串进行
Figure FDA0002816520000000036
次的字符操作,则确定由所述
Figure FDA0002816520000000037
次的字符操作产生的不同于所述目标字符串的新切片个数;
目标策略确定子单元,用于判断所述当前策略对应产生的新切片个数是否小于所述目标字符串的切片总数;若是,则将所述当前策略作为所述目标操作策略;若否,则将下一待选操作策略作为所述当前策略,触发所述切片个数确定子单元的功能。
13.根据权利要求9至12任一项所述的装置,其特征在于,所述字符串匹配单元包括:
切片匹配子单元,用于将所述目标字符串的各个目标切片与各个第一候选字符串的候选切片进行匹配,将匹配上的目标切片作为命中切片;
切片选择子单元,用于选择N个命中切片,其中,N=m-M+1,m是命中切片的总数,M是所述字符串过滤阈值;
候选串确定子单元,用于对于所述N个命中切片,确定每一命中切片所属的至少一个第一候选字符串,将确定的每一第一候选字符串作为第二候选字符串;
字符串匹配子单元,用于若所述第二候选字符串包括的命中切片个数大于或等于M,则将所述第二候选字符串作为所述相似字符串。
14.一种字符串匹配装置,其特征在于,包括:处理器、存储器、系统总线;
所述处理器以及所述存储器通过所述系统总线相连;
所述存储器用于存储一个或多个程序,所述一个或多个程序包括指令,所述指令当被所述处理器执行时使所述处理器执行权利要求1-8任一项所述的方法。
15.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有指令,当所述指令在终端设备上运行时,使得所述终端设备执行权利要求1-8任一项所述的方法。
CN201810725855.9A 2018-07-04 2018-07-04 一种字符串匹配方法及装置 Active CN108984695B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810725855.9A CN108984695B (zh) 2018-07-04 2018-07-04 一种字符串匹配方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810725855.9A CN108984695B (zh) 2018-07-04 2018-07-04 一种字符串匹配方法及装置

Publications (2)

Publication Number Publication Date
CN108984695A CN108984695A (zh) 2018-12-11
CN108984695B true CN108984695B (zh) 2021-04-06

Family

ID=64536882

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810725855.9A Active CN108984695B (zh) 2018-07-04 2018-07-04 一种字符串匹配方法及装置

Country Status (1)

Country Link
CN (1) CN108984695B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111428491B (zh) * 2019-01-09 2024-03-22 阿里巴巴集团控股有限公司 一种字符串流的归并方法、装置及电子设备
CN110008383B (zh) * 2019-04-11 2021-07-27 北京安护环宇科技有限公司 一种基于多索引的黑白名单检索方法及装置
CN110502629B (zh) * 2019-08-27 2020-09-11 桂林电子科技大学 一种基于lsh的过滤验证字符串相似性连接方法
CN111191087B (zh) * 2019-12-31 2023-11-07 歌尔股份有限公司 字符匹配方法、终端设备及计算机可读存储介质
CN111797285A (zh) * 2020-06-30 2020-10-20 深圳壹账通智能科技有限公司 字符串模糊匹配方法、装置、设备及可读存储介质
US11586615B2 (en) * 2020-07-29 2023-02-21 Bank Of America Corporation System for generation of resource identification numbers to avoid electronic misreads
CN112307277A (zh) * 2020-09-29 2021-02-02 西安赢瑞电子有限公司 一种汉字串匹配预判方法
CN113283908B (zh) * 2021-06-09 2023-07-18 武汉斗鱼鱼乐网络科技有限公司 目标团体的识别方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102298618A (zh) * 2011-08-03 2011-12-28 百度在线网络技术(北京)有限公司 一种获取匹配度以执行相应操作的方法、装置及设备
CN103365998A (zh) * 2013-07-12 2013-10-23 华东师范大学 一种相似字符串检索方法
CN106168954A (zh) * 2016-06-07 2016-11-30 中国人民解放军国防科学技术大学 一种基于编辑距离的负面信息模式模糊匹配方法
CN107102998A (zh) * 2016-02-22 2017-08-29 阿里巴巴集团控股有限公司 一种字符串距离计算方法和装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103425739B (zh) * 2013-07-09 2016-09-14 国云科技股份有限公司 一种字符串匹配方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102298618A (zh) * 2011-08-03 2011-12-28 百度在线网络技术(北京)有限公司 一种获取匹配度以执行相应操作的方法、装置及设备
CN103365998A (zh) * 2013-07-12 2013-10-23 华东师范大学 一种相似字符串检索方法
CN107102998A (zh) * 2016-02-22 2017-08-29 阿里巴巴集团控股有限公司 一种字符串距离计算方法和装置
CN106168954A (zh) * 2016-06-07 2016-11-30 中国人民解放军国防科学技术大学 一种基于编辑距离的负面信息模式模糊匹配方法

Also Published As

Publication number Publication date
CN108984695A (zh) 2018-12-11

Similar Documents

Publication Publication Date Title
CN108984695B (zh) 一种字符串匹配方法及装置
CN105512229B (zh) 一种ip地址的地域信息的存储、查询方法及装置
CN110413973B (zh) 计算机自动生成套卷的方法及其系统
CN109977366B (zh) 一种目录生成方法及装置
CN111061750A (zh) 一种查询处理方法、装置及计算机可读存储介质
CN103053156B (zh) 区间制作装置、区间制作方法、及区间制作程序
CN110874530A (zh) 关键词提取方法、装置、终端设备及存储介质
JP6457123B2 (ja) 探索処理方法およびデバイス
CN105183731A (zh) 推荐信息生成方法、装置及系统
JP5956049B2 (ja) ストリーミングネットフローデータ解析方法及び装置
WO2011070980A1 (ja) 辞書作成装置
CN108241692B (zh) 数据的查询方法及装置
CN110516220B (zh) 一种报表数据录入方法、系统及相关设备
CN108427767B (zh) 一种知识主题和资源文件的关联方法
CN113051460A (zh) 基于Elasticsearch的数据检索方法、系统、电子设备及存储介质
CN110728260A (zh) 一种电气施工图的识别方法及装置
CN112307318B (zh) 一种内容发布方法、系统及装置
CN108509555B (zh) 搜索词确定方法、装置、设备及存储介质
CN116821053A (zh) 数据上报方法、装置、计算机设备和存储介质
CN106933934B (zh) 数据表的连接方法和装置
US9509757B2 (en) Parallel sorting key generation
JP2011175231A (ja) 地図データ
CN107515867B (zh) 一种NoSQL数据库的数据存储、查询方法和装置以及一种rowKey全组合的生成方法和装置
US8682644B1 (en) Multi-language sorting index
CN110019054A (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