【文本相似度】在数据库中怎么查找相似的记录
【文本相似度】在数据库中如何查找相似的记录
【问题】业务系统上因为前期设计原因,录入的数据存在大量重复,现在需要去除重复录入的名称。但这些名称不尽相同,都存在几个字的差别。
【分析】1、根据名称排序,然后逐个删除,结果就是删除得都是前几个字符一样的,如“山东青岛XX公司”和“山东青岛XX有限公司”,但对“青岛XX公司”就无能为力了。
2、逐条记录与其他记录进行名称比对,根据相似度查找,然后筛选出相似对较高的记录
【结论】
1、根据基本SQL查询即可。
2、主要说第二种方法。oracle 存在 UTL_MATCH包,其中有函数.edit_distance_similarity用来查找相似度。查找到相似度高的进行修改
【问题】业务系统上因为前期设计原因,录入的数据存在大量重复,现在需要去除重复录入的名称。但这些名称不尽相同,都存在几个字的差别。
【分析】1、根据名称排序,然后逐个删除,结果就是删除得都是前几个字符一样的,如“山东青岛XX公司”和“山东青岛XX有限公司”,但对“青岛XX公司”就无能为力了。
2、逐条记录与其他记录进行名称比对,根据相似度查找,然后筛选出相似对较高的记录
【结论】
1、根据基本SQL查询即可。
2、主要说第二种方法。oracle 存在 UTL_MATCH包,其中有函数.edit_distance_similarity用来查找相似度。查找到相似度高的进行修改
with dc as ( select id, Xname, replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(dcname, '电力', ''), '发电', ''), '有限', ''), '公司',--……过滤同类字符 '') dcn from XXX ) select d1.id,d1.Xname,d2.Xname,UTL_MATCH.edit_distance_similarity(d1.dcn,d2.dcn) smi from dc d1 ,dc d2 where d1.id<>d2.id and d1.dcn is not null and d2.dcn is not null order by smi desc
- 1楼songyinan1989昨天 10:55
- 受教,学习下