一种基于分词与索引技术的重复记录检测方法
技术领域
本发明涉及数据清洗技术领域,涉及一种检测重复记录的方法,尤其涉及一种基于分词与索引技术的重复记录检测方法。
背景介绍
信息化的发展使得数据增长的速率逐年上升,在信息系统中数据冗余会影响系统的使用效果。如果通过纯人工的方式处理这些冗余的数据,势必造成大量的资源浪费与成本消耗。因此,重复数据的检测与处理技术是数据处理领域的重要技术点之一。重复数据检测与处理的核心是重复数据的检测方法,其目标在于满足精度要求的同时尽可能提高检测的效率,能够快速有效地识别出潜在的重复数据并进行处理。随着数据库技术的日益发展与完善,越来越多的数据以数据库记录的形式存在于信息系统中,对记录的重复检测提出了越来越高的要求。
重复记录检测的方法核心涉及两个方面的研究,一方面重点关注检测精度,研究重复记录的判别方法;另一方面重点关注检测效率,研究候选记录对比较的控制。候选记录对比较的控制方式有三种。第一种是循环遍历法,这种方法下包括不同分组在内的所有记录两两之间都需要进行比较。第二种是邻近排序法,按照某个或者某些关键字段对记录进行排序后,每条记录都以一定的规则和邻近的记录进行比较。第三种是基于散列的方法,需要将记录映射为一个标识符,具有相同标识符的记录形成一个聚类,聚类中的记录两两比较。第一种循环遍历法主要特征是循环遍历所有的记录,每一次遍历,都会以该记录为中心记录,然后和所有其他未比较过的记录进行两两比较。这种方法下,任何两条记录都至少进行过一次比较,因此时间复杂度为O(n2),计算代价过高,效率低,不能处理增量数据对记录集带来的影响;第二种邻近排序法主要特征是选取记录中的一个或者多个字段对总体的记录集进行排序,对于排序后的记录集,指定大小固定或者动态变化的窗口,每条记录周围的数据根据窗口大小分为处于窗口内部的邻近记录和处于窗口外部的无关记录,每条记录都只和窗口内部的有限条邻近记录进行两两比较。这种方法的缺点是检测的准确率严重依赖于排序字段或关键字,如果选取不当将会造成很多潜在的重复记录在排序后的记录集中相隔距离过远,不能够落于指定的邻近范围内,导致这些本应该被检测出的重复记录不能够被有效发现,降低了检测的准确率;且用以指定邻近范围的滑动窗口大小难以确定,如果窗口过小,会影响检测的准确率;反之,如果窗口过大,会降低检测的效率;较大的检测记录集会造成时间代价或内存代价较高;在检测时,每次都必须读取所有的数据,不能适应动态、实时检测的要求;第三种基于散列法,主要技术特征是对记录进行数据压缩,为每条记录构造出一个对应的散列码(Hash Code)。对于拥有相同或者相近的Hash值的记录,则视为重复记录。这种方法避免了记录之间的两两比较,不以记录值直接判定,而是通过映射的方式寻找重复记录,其缺点是难以找到合适的能够有效避免Hash冲突的Hash函数,Hash计算方法复杂,而且计算获得的Hash码存在随机性,不能保证检测结果的幂等性;Hash函数只能为记录生成一个特定的散列码,压缩的信息会让近似重复的记录之间的相似性信息缺失,不能很好的反映记录中各个字段之间与内部的差异与联系。
发明内容
本发明技术解决问题:为了克服上述技术的不足,提供一种基于分词与索引技术的重复记录检测方法,提升了检测的效率
本发明技术解决方案:一种基于分词与索引技术的重复记录检测方法,步骤如下:
步骤1,获取待处理记录集r,从记录集的所有字段中选取待分词的字段集合f;
步骤2,遍历待处理记录集,根据步骤1中选取出的待分词字段集合f,对每一条记录的待分词字段中的字段值进行分词,得到每条记录的分词集合w;
遍历待处理记录集r同时,根据获得的分词集合w,建立并扩充待处理记录集的逆向索引,根据获得的逆向索引,建立并扩充待处理记录集的正向链集合;遍历结束,得到构建完成的逆向索引和正向链集合,并将得到的逆向索引持久化存储;
所述逆向索引结构为wi={r1,r2,,,rm},等号左边为键,等号右边为值,其中键为分词过程中出现过的某一个分词wi,值为包含该分词wi的记录对应的记录索引集合,集合中的rm为待处理记录的索引值;借助逆向索引能够根据某个分词查询到包含该分词的所有待处理记录的索引值rm,根据查询到的索引值rm进而查询到对应的待处理记录;
所述正向链集合结构为rj={{r11,r12,,,r1m},,,{rk1,rk2,,,rkm}},其中等号左边为键,等号右边为值,键rj为待处理记录的索引值,值为由集合元素组成的集合,值中集合元素的个数等于通过rj索引到的待处理记录的分词集合wj中的分词数,每个集合元素即为以wi为键的逆向索引的值;
步骤3,设置阈值,遍历记录待处理集r,根据步骤2中的正向链集合,获得候选记录对集合,每个候选记录对的结构为{r1,r2},其中r1、r2为待处理记录的索引;
步骤4,采用记录重复性计算算法,对所有的候选记录对{r1,r2}对应的待处理记录是否重复进行计算,最终得到候选记录对是否重复的结果,存储检测结果;
步骤5若发生增加记录、修改记录、删除记录的增量记录,则对增量记录进行实时处理。
所述步骤2中,遍历待处理记录集r同时,根据获得的分词集合w,建立并扩充待处理记录集的逆向索引,根据获得的逆向索引,建立并扩充待处理记录集的正向链集合的步骤如下:
(11)从待处理记录集r中取出一条记录,记录的索引为rk;
(12)根据步骤1中的字段集合f,对记录的待分词字段值进行分词,分词集合结果words={w1,w2,,,wi},wi表示分词,i表示该记录分词数量;
(13)判断wi是否已经出现过;
(14)如果未出现过,则构建逆向索引wi={},记录索引集合中的元素会随着遍历逐添加;
(15)将当前记录索引rk添加到wi对应的记录索引集合中;以当前记录索引rk为键,建立rk与wi的记录索引集合的映射关系,即rj链向wi的记录索引集合,当遍历结束,rk会根据记录的分词结果,链向多个记录索引集合;
(16)遍历待处理数据集结束,逆向索引与正向链集合构建完成。
所述步骤3中,获得候选记录对集合的过程如下:
(21)确定候选记录对的筛选标准;
(22)依次取出待处理记录集中r的记录rq;
(23)初始化候选记录对集合candidate为空;
(24)根据步骤3计算出的正向链集合,获得以记录rq为键的正向链集合的值,即记录rq对应的所有记录索引集合,每个记录索引集合代表与记录rq出现过某个相同分词的所有记录索引值;
(25)对所有记录索引集合中出现的记录进行统计;
(26)根据步骤(25)的统计结果和步骤(21)设定的筛选标准,判断统计结果中哪些记录满足和记录rq构成候选记录对的条件;
(27)将所有满足条件的记录分别和记录rq组成候选记录对添加到candidate集合中。
所述步骤5,对增量记录进行实时处理的过程如下:
获取增量记录集中的一条记录,对该增量记录进行分词处理;
若增量记录对应的是增加记录,如果分词不存在,则构建新的逆向索引,如果分词存在,则取出存储的逆向索引,将该记录索引加入逆向索引中的记录索引集合中,构建该记录的正向链集合;
对正向链集合中出现的记录索引进行统计,根据记录的正向链集合和设定的候选记录对删选标准,筛选出候选记录对;
采用记录重复性计算算法,对候选记录对是否重复进行检测,存储结果;
若增量记录对应的是删除操作,则删除所有已存储的该记录的记录索引,如果存在已检测出的重复记录,则删除该重复记录检测结果;
若增量记录对应的是更新操作,则对被更新的原记录执行一次删除操作,将更新后的记录当作新的纪录,执行一次增加操作。
本发明与现有技术相比的优点在于:
(1)本发明通过分词判断重复程度选择候选重复记录集,有效避免了记录的两两比较,提升了检测的效率。
(2)通过分词兼顾了字段的首尾以及内部的具体值的特点,能完整表现字段值的特征,避免了记录因为排序而相距甚远,不能够以有限的窗口覆盖潜在重复记录对的问题,体现出的优点是在维持较低的计算复杂度的同时,提高了检测的精度。
(3)每条记录通过分词被建立了多个映射关系,综合处理每个集合筛选候选重复记录,不需要复杂的Hash函数的计算,也能够避免单一的散列值忽略了记录其他有用信息,提高了检测效率。
(4)构建的正向链集合,可以存储于持久化存储介质中,对于增量数据可以实时更新构建完成的集合,实时地对增量数据进行重复检测,更新最新的检测结果,从而实现对增量数据的处理和动态检测的支持。
附图说明
图1为构建正向链集合的流程图;
图2为基于构建的正向链集合,进行候选记录对计算与比较;
图3为逆向索引数据结构示意图;
图4为正向链集合数据结构示意图。
具体实施方式
在阐述本发明之前先对术语进行说明。
假设存在四条记录,其分词结果如下所示:
1:W1 W2 W3
2:W2 W4 W5 W6
3:W1 W3 W4 W6
4:W2 W3 W4 W6
逆向索引
如图3所示,所述逆向索引结构为wi={r1,r2,,,rm},等号左边为键,等号右边为值。其中键为分词过程中出现过的某一个分词wi,值为包含该分词wi的记录对应的记录索引集合,集合中的rm为待处理记录的索引值;借助逆向索引能够根据某个分词查询到包含该分词的所有待处理记录的索引值rm,根据查询到的索引值rm进而查询到对应的待处理记录。
正向链集合
如图4所示,所述正向链集合结构为rj={{r11,r12,,,r1m},,,{rk1,rk2,,,rkm}},其中等号左边为键,等号右边为值,键rj为待处理记录的索引值,值为由集合元素组成的集合,值中集合元素的个数等于通过rj索引到的待处理记录的分词集合wj中的分词数,每个集合元素即为以wi为键的逆向索引的值。
如图1所示,本发明具体实施方式如下:
步骤1,获取待处理记录集r,从记录集的所有字段中选取待分词的字段集合f;
步骤2,遍历待处理记录集,根据步骤1中选取出的待分词字段集合f,对每一条记录的待分词字段中的字段值进行分词,得到每条记录的分词集合w;
遍历待处理记录集r同时,根据获得的分词集合w,建立并扩充待处理记录集的逆向索引,根据获得的逆向索引,建立并扩充待处理记录集的正向链集合;遍历结束,得到构建完成的逆向索引和正向链集合,并将得到的逆向索引持久化存储;
步骤3,设置阈值,遍历记录待处理集r,根据步骤(2)中的正向链集合,获得候选记录对集合,每个候选记录对的结构为{r1,r2},其中r1、r2为待处理记录的索引;
步骤4,采用记录重复性计算算法,对所有的候选记录对{r1,r2}对应的待处理记录是否重复进行计算,最终得到候选记录对是否重复的结果,存储检测结果;
步骤5若发生增加记录、修改记录、删除记录的增量记录,则对增量记录进行实时处理。
所述步骤2中,遍历待处理记录集r同时,根据获得的分词集合w,建立并扩充待处理记录集的逆向索引,根据获得的逆向索引,建立并扩充待处理记录集的正向链集合的步骤如下:
(11)从待处理记录集r中取出一条记录,记录的索引为rk;
(12)根据步骤1中的字段集合f,对记录的待分词字段值进行分词,分词集合结果words={w1,w2,,,wi},wi表示分词,i表示该记录分词数量;
(13)通过字符串匹配的方式,查找wi,判断wi是否已经出现过;
(14)如果未出现过,则构建逆向索引wi={},记录索引集合中的元素会随着遍历逐渐添加;
(15)将当前记录索引rk添加到wi对应的记录索引集合中;以当前记录索引rk为键,建立rk与wi的记录索引集合的映射关系,即rj链向wi的记录索引集合,当遍历结束,rk会根据记录的分词结果,链向多个记录索引集合;
(16)遍历待处理数据集结束,逆向索引与正向链集合构建完成。
所述步骤3中,获得候选记录对集合的过程如下(如图2所示):
(21)如图2所示,首先确定候选记录对的筛选标准,本实施例使用基于阈值的筛选标准,即判断出现的记录是否满足重复程度阈值threshold。
记num1为两条记录的分词集合的交集中分词的个数,num2为两条记录的分词集合的并集中分词的个数,则存在判断num1/num2>threshold?。当num1/num2大于threshold时,两条记录为候选记录对,否则不是。
(22)依次取出待处理记录集中r的记录rq;
(23)初始化候选记录对集合candidate为空;
(24)根据步骤2计算出的正向链集合,获得以记录rq为键的正向链集合的值,即记录rq对应的所有记录索引集合,每个记录索引集合代表与记录rq出现过某个相同分词的所有记录索引值。是否取出所有记录索引集合的判断依据为图2所示“是否还存在记录索引集合”;
(25)对所有记录索引集合中出现的记录进行统计,即统计每条记录出现过的分词,获得rq对应的记录索引集合中的记录和rq比较时的num1和num2;
(26)根据步骤(25)的统计结果num1和num2和步骤(21)设定的筛选标准threshold,判断统计结果中哪些记录能够和记录rq构成候选记录对;
(27)将满足num1/num2>threshold的记录与记录rq组成候选记录对,添加到candidate集合中。
所述步骤5,对增量记录进行实时处理的过程如下:
获取增量记录集中的一条记录,对该增量记录进行分词处理;
若增量记录对应的是增加记录,如果分词不存在,则构建新的逆向索引,如果分词存在,则取出数据库中存储的逆向索引,将该记录索引加入逆向索引中的记录索引集合中,构建该记录的正向链集合;
对正向链集合中出现的记录索引进行统计,根据记录的正向链集合和设定的候选记录对删选标准,筛选出候选记录对;
采用记录重复性计算算法,对候选记录对是否重复进行检测,存储结果至数据库中;
若增量记录对应的是删除操作,则删除所有已存储于数据库中的该记录的记录索引,如果存在已检测出的重复记录,则删除该重复记录检测结果;
若增量记录对应的是更新操作,则对被更新的原记录执行一次删除操作,将更新后的记录当作新的纪录,执行一次增加操作。
提供以上实施例仅仅是为了描述本发明的目的,而并非要限制本发明的范围。本发明的范围由所附权利要求限定。不脱离本发明的精神和原理而做出的各种等同替换和修改,均应涵盖在本发明的范围之内。