一种基于编辑距离的字符串模糊匹配和查询方法与流程

文档序号:17950763发布日期:2019-06-19 00:00阅读:843来源:国知局
一种基于编辑距离的字符串模糊匹配和查询方法与流程

本发明属于计算机数据查询技术领域,涉及一种基于编辑距离的字符串模糊匹配和查询方法。



背景技术:

编辑距离在一种计算字符串间相似程度的度量方法,同时也被经常使用。但是计算编辑距离采用的是一种动态规划的思想,如果在数据集中计算每一对字符串间的编辑距离来判断字符串的匹配与否将会有巨大的开销。近几年来关于字符串的模糊查询问题有很多研究,他们多数是基于一种过滤-验证框架进行的。在过滤阶段,使用一个阈值t作为一个有效的过滤器,可以用来过滤大部分不相似的字符串,得到一个候选者集合。然后在验证阶段,通过计算候选者集合中字符串与查询串之间实际的编辑距离,得到结果集合。

阿里巴巴集团控股有限公司申请的专利“模糊查询方法,装置及查询系统”(申请号:cn201710372075,公开号:cn107436911a)提供了一种模糊查询的方法,所述方法包括:提供单字符倒排索引,所述单字符倒排索引包括将文档分割为单个字符后存入倒排索引构建生成;获取查询字符串,将所述的查询字符串分割为单个字符,其所述单个字符作为词组在所述单字符倒排索引中进行词组匹配方式查询。该方法不足的是:直接将字符串完全化成单字符的操作,计算较为复杂。

清华大学李国良老师团队的一篇论文“aunifiedframeworkforstringsimilaritysearchwithedit-distanceconstraint”中提到了一种hs-search的方法进行模糊查询,他分为了过滤和验证两个阶段。首先,我们需将s按照长度进行划分组,用sl代表长度为l|q|-t的字符串集合组。对每一个字符串集合组sl,我们都构造一棵二叉树。我们将sl中的字符串按照长度划分成两部分,第一个部分是s中前缀长度为的部分,第二部分是s中后缀长度为的部分,其中|s|代表字符串s的长度。按照此方法依次对字符串进行划分,得到一棵hs-tree树。在搜索查询过程中,我们将按照过滤-验证模型结构进行。在过滤阶段分为长度过滤和匹配过滤两个阶段。我们查询的字符串数据集为sl,输入的查询串为q,要求的阈值为τ。首先根据长度过滤,我们只需要查询长度在[|q|-τ,|q|+τ]之间的字符串即可。我们进行判断的临界值是2i-τ,如果字符串s和查询串q中的匹配段落少于2i-τ,则说明这两个字符串肯定不相似,我们可以直接过滤掉这个字符串,换句话说就是,我们仅需要验证与q有超过2i-τ个匹配段落的候选字符串。随着层数i的增加,段落中字符串的长度也就越短,同时过滤的能力也就越差,所以我们选择把进行比较的层数定在拥有最长子串长度的最小层数我们将层数定位在我们需要根据段落内字符串的长度对查询串进行划分,枚举出各个子串,构成一个集合定义为下一步,我们将要寻找与查询有至少2i-τ个匹配段落的候选字符串集合。在匹配的过程中,如果s中有和q匹配的段落,我们就将该段落对应的索引,即原字符串的id值所对应的计数器加1,最后我们只需要保留计数器值大于等于2i-τ的字符串作为候选者,它将进入到验证阶段。我们将候选者字符串集合中的每一个候选字符串和我们的查询串进行编辑距离的计算,根据阈值进行验证,最后得到我们结果的集合。该方案不足的是:在进行过滤操作的时候,只记录了匹配的次数,而段落内不同长度的字符串对结果的影响是不用的。同时,有一些“高度相似的”字符串是无需进行编辑距离验证,可以直接放在结果集合中的。



技术实现要素:

本发明的目的在于克服上述现有技术的缺点,提供了一种基于编辑距离的字符串模糊匹配和查询方法,该方法能够反映不同长度段落对匹配结果不影响的不同,同时编辑距离验证操作次数较少。

为达到上述目的,本发明所述的基于编辑距离的字符串模糊匹配和查询方法包括以下步骤:

对数据集中的字符串按照长度进行分组,其中,将长度相同的字符串划为一个组,对每一字符串组按照长度构建一棵完全二叉树,并将该二叉树记作字符串搜索树,该字符串搜索树中的每个节点内均存储有划分后的字符串、该字符串的原字符串id、该字符串的长度及该字符串的开始位置;

当需要进行字符串查询时,则输入查询字符串的长度及距离阈值t,利用字符串的长度q及距离阈值t查找对应的字符串;

当需要进行长度过滤时,则只需查询长度在[|q|-τ,|q|+τ]之间的字符串即可;

当需要匹配过滤时,则先按照段落中字符串的长度对查询串依次进行划分,得查询串子串集合,然后进行字符串间的匹配操作,当段落内的字符串与查询串中的字符串相匹配时,则该字符串对应索引的原字符串的匹配度加上该字符串的长度,当该字符串的匹配度大于预设上界值时,则对匹配字符串在原字符串的位置列表以及在查询串中的位置列表进行验证,当该位置列表中没有重复的元素时,说明在匹配查询操作中没有引入字符串位置互换或者重复匹配的情况,则将该字符串添加到结果集合中,否则,则对该字符串进行编辑距离的验证;当该字符串的匹配度小于预设下界值时,则直接过滤掉该字符串;当该字符串的匹配度在预设下界值与预设上界值之间时,则对该字符串进行编辑距离验证,即,当该字符串的编辑距离小于等于距离阈值t时,则将该字符串添加到结果集合中,当该字符串的编辑距离大于距离阈值t时,则直接过滤掉该字符串。

字符串搜索树中的每个节点内还设置有倒序索引,该倒序索引包括该字符段落的原字符串所对应的id号。

字符串的长度为l∈[|q|-t,|q|)时,则预设上界值为|q|-t,预设下界值为mi为第i层字符串的长按照降序存储的一个列表。

字符串的长度为l∈[|q|,|q|+t]时,则预设上界值为|l|-t,预设下界值为mi为第i层字符串的长按照降序存储的一个列表。

本发明具有以下有益效果:

本发明所述的基于编辑距离的字符串模糊匹配和查询方法在具体操作时,将字符串划分为确定匹配的集合、可能匹配的集合以及不匹配的集合,当该字符串的编辑距离小于等于距离阈值t时,则将该字符串直接添加到结果集合中,当该字符串的编辑距离大于距离阈值t时,则直接过滤掉该字符串,从而减少编辑距离验证操作的次数;当该字符串的匹配度大于预设上界值时,则对匹配字符串在原字符串的位置列表以及在查询串中的位置列表进行验证,避免字符串互换位置及字符串段落重复匹配的问题。另外,当段落内的字符串与查询串中的字符串相匹配时,则该字符串对应索引的原字符串的匹配度加上该字符串的长度,以体现不同长度的段落对匹配度影响的不同。

附图说明

图1为本发明的字符串搜索树的结构示意图;

图2为本发明的流程图;

图3为本发明中匹配操作的流程图。

具体实施方式

下面结合附图对本发明做进一步详细描述:

参考图1,本发明在具体操作时,将字符串按照长度进行分组,对相同长度的字符串sl,按照字符串的长度进行划分,以构造一个二叉树结构,同时为每个节点中的字符串添加一个倒序索引,通过该倒序索引指示包含该字符串的原字符串的id号,并且需要记录该字符串段落内字符串的长度及字符串的开始位置,以生成字符串搜索树,其中,以长度为7的几个字符串为例按照字符串搜索树的划分原理,得一棵字符串搜索树。

参考图2,本发明使用的数据集为具有不同长度字符串的大数据集,其中,不同长度的字符串用sl表示,l表示该字符串的长度。

在进行匹配操作的时候,为每个id的字符串构造一个匹配度,用来显示它和查询串之间的匹配程度,当查询串子串与节点中的字符串匹配时,则将该匹配段落对应的原字符串id的匹配度加上段落的长度,同时记录匹配段落的段落号,在进行过滤时,判断匹配字符段落之间的位置关系,仅当位置关系和查询串一致且没有重复匹配时,则将该字符串直接添加到结果集合中,对于候选者集合中的字符串,需要验证他们与查询串之间的编辑距离,判断是否在距离阈值内,从而得到匹配结果。

参考图3,本发明的基于编辑距离的字符串模糊匹配和查询方法包括以下步骤:

对数据集中的字符串按照长度进行分组,其中,将长度相同的字符串划为一个组,其中,sl代表长度为l的字符串组,对每一字符串组按照长度构建一棵完全二叉树,并将该二叉树记作字符串搜索树,该字符串搜索树中的每个节点内均存储有划分后的字符串、该字符串的原字符串id、该字符串的长度及该字符串的开始位置,具体的,将sl中的字符串按照长度划分成两部分,第一个部分为sl中前缀长度为的部分,第二部分为sl中后缀长度为的部分,其中,|s|代表字符串s的长度,令分别表示sl中字符串的第一部分和第二部分,将第一层的两个节点记为其中,i代表层数,j代表子串。对于树的每一个节点构建一个倒序索引用于表示该子串出现的字符串序号,然后继续划分这棵树,对于每一个节点利用上述划分方法按照长度将字符串继续进行划分,将分别代表这两个子节点,同样构建对应的倒序索引以实现对字符串的预处理,树的最大层数为同时,需要记录每个节点内字符串的长度并用表示该字符串在原字符串的开始位置。

当需要进行字符串查询时,则输入查询字符串的长度及距离阈值t,利用字符串的长度q及距离阈值t查找对应的字符串;

当需要进行长度过滤时,则只需查询长度在[|q|-τ,|q|+τ]之间的字符串即可;

当需要匹配过滤时,则先需要将查询的层数定位在然后按照段落中字符串的长度对查询串依次进行划分,得查询串子串集合,然后进行字符串间的匹配操作,当段落内的字符串与查询串中的字符串相匹配时,则该字符串对应索引为原字符串的匹配度与该字符串的长度之和,即ti(s,q)=ti(s,q)+len(s),当该字符串的匹配度大于预设上界值时,则对匹配字符串在原字符串的位置列表以及在查询串中的位置列表进行验证,当该位置列表中没有重复的元素时,则说明在匹配查询操作中没有引入字符串位置互换或者重复匹配的情况,则将该字符串添加到结果集合中,否则,则对该字符串进行编辑距离的验证;当该字符串的匹配度小于预设下界值时,则直接过滤掉该字符串;当该字符串的匹配度在预设下界值与预设上界值之间时,则对该字符串进行编辑距离验证,当该字符串的编辑距离小于等于距离阈值t时,则将该字符串添加到结果集合中,当该字符串的编辑距离大于距离阈值t时,则直接过滤掉该字符串。

字符串的长度为l∈[|q|-t,|q|)时,则预设上界值为|q|-t,预设下界值为mi为第i层字符串的长按照降序存储的一个列表;字符串的长度为l∈[|q|,|q|+t]时,则预设上界值为|l|-t,预设下界值为mi为第i层字符串的长按照降序存储的一个列表。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1