|
楼主 |
发表于 2013-8-22 16:43
|
显示全部楼层
本帖最后由 胡剑0227 于 2013-8-22 22:35 编辑
【基本思路】 既然不规则,那么分析某比对数据(比如“莫泰连锁酒店(孙权路店)”,记为【A1】)的各个字符在目标数据列中出现的次数是很有意义的,比如【A1】的各个字符在目标数据列的【B1】中出现了12个,在【B2】中出现了7个,在所有其他数据中出现的次数更少,那么有理由判定与【A1】匹配的数据是【B1】。以图3为例简要讲解实现步骤。
图3 基本思路的实现方式
步骤1 将C5单元格“莫泰连锁酒店(孙权路店)”的各个字符进行拆分,生成一个12个元素的一维水平数组,如C6:N6单元格区域所示,可由以下公式实现。
- =MID($C$5,{1,2,3,4,5,6,7,8,9,10,11,12},1)
复制代码 步骤2 B19单元格为“富阳国际贸易中心大酒店”,分析C6:N6的各个字符在B19单元格中出现的次数可由以下公式得到,最后的效果显示在C19:N19单元格区域中。
- =--ISNUMBER(FIND($C$6:$N$6,B19,1))
复制代码 步骤3 将上述公式中的B19换成B7:B15,那么就能返回C6:N6的各个字符在B7:B15各个单元格中出现的次数,得到图3中的【A】区域,每一行对应B7:B15中的一个单元格。公式如下所示。
- =--ISNUMBER(FIND($C$6:$N$6,B7:B15,1))
复制代码 步骤4 将【A】区域进行按行汇总就得到【B】区域,【B】区域中最大的数值所对应的数据即是目标匹配数据。对【A】区域C7:N15进行按行汇总的公式如下:
- =MMULT(C7:N15,{1;1;1;1;1;1;1;1;1;1;1;1})
复制代码 步骤5 使用MAX函数可以求得P7:P15中的最大值,该最大值并结合MATCH函数即可返回该最大值在P7:P15中的位置,根据这个位置在B7:B15中返回目标“莫泰连锁酒店(富阳孙权路店)”,具体公式如下。
=INDEX(B7:B15,MATCH(MAX(P7:P15),P7:P15,0))
于是“莫泰连锁酒店(孙权路店)” 匹配上 “莫泰连锁酒店(富阳孙权路店)”
【改进思路】以上方式的缺陷是没有考虑到各个字符的价值是不同的,比如在为“莫泰连锁酒店(孙权路店)”搜索匹配项时字符【莫】、【泰】、【孙】、【权】的价值要远比字符【酒】、【店】的价值高。这是因为本例中字符【酒】、【店】是极常见的字符,于是某目标包含了这两个字符对于确认是否匹配没有过多的帮助,而【莫】、【泰】等字符在本例是不常见的字符,因此某目标出现了这两个字符对于确认匹配是非常有帮助的。 因此,需要将各个字符的出现频次进行考虑,频次高的降低其匹配价值(图3【A】区域的每个数字代表了匹配价值),这就是【改进思路】。 图4 改进思路的实现方式 步骤1 将图3【A】区域进行按“列”汇总就可以得到各个字符共出现在几个目标数据中,如图4【CC】区域所示,具体公式如下。 - =MMULT({1,1,1,1,1,1,1,1,1},C7:N15)
复制代码步骤2 将图3【A】区域除以图4【CC】区域得到图4的【AA】区域,此时可以看到对于第32行,【莫】、【泰】的权值为1,而【酒】、【店】的权值仅仅为0.13,这样最后得到的【BB】区域中最大值为7.375,次大值为2.375。这远比图3中的最大值12,次大值为7的区分度要好得多。
余下实现与【基本方式】如出一辙,有兴趣可以下载附件,创意在于为每个字符构造的权值。当然这种思路还是可以再次提升的,于是有了下面的【进一步提升】。
|
评分
-
3
查看全部评分
-
|