前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >解决文字模糊匹配的小工具

解决文字模糊匹配的小工具

作者头像
btharp
发布2021-08-31 16:33:07
发布2021-08-31 16:33:07
1.7K3
举报
文章被收录于专栏:PowerBI x PythonPowerBI x Python

问题

财务分析的表哥表姐们、整理调查问卷的师生们往往需要从表A的某列匹配查找表B的某些数据。如果表A某列完全等于表B某列,或是后者的子集,那么在excel里用vlookup或find类组合函数,或用“*”类通配符根据正则关系,可以轻松地完成这个匹配。

但假如这两列不满足这个条件,即表B某列不包含表A某列,那么简单依靠通配符和正则关系求解则很难奏效。以下图为例:

假设公司简称在表A,而其他几列在表B。我们希望通过公司简称匹配相应的公司全称和其他信息。根据上图我们看到,“万 科 A” 既不完全等于“万科企业股份有限公司”,也不属于后者的子集。“万”和“科”在后者出现过,而“A”则没有。另外再看到“深深房A”,对应的是“深圳经济特区房地产(集团)股份有限公司”。乍一看,“深”和“房”在后者出现过,可是前者怎么有2个“深”?

由上可见,公司简称并不是由公司全称通过单一规则简化而来,因此通配符和正则表达式的方式很难使用。

解决方案

为了解决类似,甚至更复杂的模糊匹配问题,我开发了这个小工具。打开dist文件夹下FuzzyMatch.exe,稍等2秒,按提示输入相应信息如下图所示:

将在dist文件夹下生成一个叫匹配表的文件。

该文件包含两个sheet。一个是匹配关系表。是将表A匹配列去重之后,与表B对应列一一对应的关系表。其中A列是表A的列,B列是表B的列,C列是匹配率,100为完全匹配,D列为表B的对应索引(即行的位置)。如下图我们可以看到,“万 科 A”和“深深房A”这样不规则关系也能匹配出来。

另一个表是匹配数据,相当于表A通过匹配关系表,连接了表B的所有数据,如下图所示:

备注

  1. 程序文件夹总大小约71M,运行文件约31M。
  2. 整个程序解压即可用,无需安装,不限放置位置(C,D,E,F盘都可以)。但文件夹内的builder和dist两个子文件夹及里面的程序,不要删除或也不要分开放置。
  3. 要匹配的表A和表B可以在同一个工作簿,也可以在不同工作簿。
  4. 文件名、文件夹名称,可以出现中文、空格之类的字符。
  5. 该工具正确率一般98%以上,不保证达到100%。因为工作原理是判断两个字符相似度,当字符A字数较少时,纯靠相似度高低来判断不一定准确。举例: “阳光股份”对应的全称是“阳光新业地产股份有限公司”,但与“阳光城集团股份有限公司”的相似度更高(因为后者字数较少,相似度反而更高)。
  6. 当被匹配列行数过多情况下,匹配速度较慢。当表B行数超过4000行,表A1000行左右时,耗时约2分钟。目前正在优化算法,期待下一版本。
  7. 程序获取方式:后台回复 模糊匹配 即可。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PowerBI x Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档