本帖最后由 yjgsz 于 2019-6-15 19:15 编辑
原贴:http://club.excelhome.net/thread-1048885-1-1.html
首先要感谢原帖中胡剑0227版主这个功能强大的公式。
工作中常常碰到需要比对两列数据的情形,如表格中有两列数据(单位名称),但存在两列中不同的名称实际上就是同一家单位的情况,比如同一酒店,其中一列的名字为“杭州开元名都大酒店”,而另一列的名字为“开元名都酒店”。此外,还存在另一列中有多个名称,如开元名都大酒店、开元名都大酒店(XX路分店)、开元名都大酒店(XX路店)等,因此需要模糊比对。
因同事在工作中正好遇到了类似问题,向我求助,而我只好到excelhome来寻求帮助了(好长时间没登陆了)。
一番搜索,发现了上面这个帖子,如获至宝(计算量有点大)。
经过学习消化,我将“经字符出现率调制”名称公式改为: 经字符出现率调制=IF(ISERROR(字符出现标记/字符长度),0,字符出现标记/字符长度)
原公式=IF(ISERROR(字符出现标记/MMULT(TRANSPOSE(ROW(INDIRECT("1:"&ROWS(原数据)))^0),字符出现标记)),0,字符出现标记/MMULT(TRANSPOSE(ROW(INDIRECT("1:"&ROWS(原数据)))^0),字符出现标记))
之后,再次改进为: =IF(ISERROR(字符出现标记/字符长度),0,字符出现标记/(字符长度-字符关联长度+1)) 即将 “字符出现标记/字符长度” 改为 “字符出现标记/(字符长度-字符关联长度+1)”
最后,为解决“杭州金马饭店”会匹配杭州金马饭店(分店)的情况, 针对有多个单位匹配权值相同的情况,又改进公式选取字符数最少的单位。
一是在一定程度上减少了计算量,加快了速度。 二是统一了不同关联长度下的比对强度(精度),从单字到多字关联,精度统一。 实际应用中大大减少了调试不同关联长度和比对强度来得到想要结果的做法。 一般情况下 ,关联长度2,比对强度0.5就够了。 三是解决了多单位选取的问题。
同时,在理解上,也更接近传统意义。比对强度为1,就是百分之百一样。 如用“字符出现标记/字符长度” ,哪怕百分之百一样, 不同字符关联长度,比对强度要设置不同,关联越多,强度要设得越低。 用“字符出现标记/(字符长度-字符关联长度+1)”,解决了这个问题,不同关联长度下,比对强度设定不变。
如“杭州宏丽宾馆”,字符关联长度为1、2、3、时, 其对应的字符提取比对次数为6、5、4,即(字符长度-字符关联长度+1)。
测试后效果不错(原贴134楼)。
再次向胡剑0227版主致敬。
|