Fuzzywuzzy 是一款可以对字符串模糊匹配的工具, 它使用 Levenshtein Distance 来计算出那些易用包中序列之间的差异。

Levenshtein Distance算法,又叫 Edit Distance算法,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。一般来说,编辑距离越小,两个串的相似度越大。

本文不对语法做详细介绍,大概思路可以参考下面的图

Fuzzywuzzy主要包括四个函数(方法),分别为:简单匹配(Ratio)、非完全匹配(Partial Ratio)、忽略顺序匹配(Token Sort Ratio)和去重子集匹配(Token Set Ratio)

import pandas as pd
import jieba
import fuzzywuzzy
from fuzzywuzzy import process
import datetime# 定义数据表
filename=r'C:\Users\baoqi\Documents\比较清单.xlsx'
targetfilename=r'C:\Users\baoqi\Documents\目标文件.xlsx'
# --------------------------合同--------------------------------
# 读取A表表格
starttime = datetime.datetime.now()
ht_zc_cw = pd.read_excel(filename,sheet_name='A比B多',engine='openpyxl')
endtime = datetime.datetime.now()
duringtime = endtime - starttime
print('1、A比B多 sheet',duringtime.seconds,'秒 开始时间=',starttime,'结束时间=',endtime)# 读取B表表格
starttime = datetime.datetime.now()
ht_cw_zc = pd.read_excel(filename,sheet_name='B比A多',engine='openpyxl')
endtime = datetime.datetime.now()
duringtime = endtime - starttime
print('2、B比A多',duringtime.seconds,'秒 开始时间=',starttime,'结束时间=',endtime)# 将要查找的数据list化
starttime = datetime.datetime.now()
ht_zc_cw_list = ht_zc_cw.Acompfield.to_list()
ht_cw_zc_list = ht_cw_zc.Bcompfield.to_list()
endtime = datetime.datetime.now()
duringtime = endtime - starttime
print('3、数据进行list化=',duringtime.seconds,'秒 开始时间=',starttime,'结束时间=',endtime)# 匹配相关字段名称和阈值,低于90分不显示
starttime = datetime.datetime.now()
ht_cw_zc["匹配名称"] = ht_cw_zc.Bcompfield.apply(lambda x: process.extractOne(x, ht_zc_cw_list)[0] if process.extractOne(x, ht_zc_cw_list)[1]>90 else '')
ht_cw_zc["匹配阈值"] = ht_cw_zc.Bcompfield.apply(lambda x: process.extractOne(x, ht_zc_cw_list)[1] if process.extractOne(x, ht_zc_cw_list)[1]>90 else '')
endtime = datetime.datetime.now()
duringtime = endtime - starttime
print('3、匹配名称和阈值=',duringtime.seconds,'秒 开始时间=',starttime,'结束时间=',endtime)# 新建一个目标表,将原信息连通匹配信息,一起写入
starttime = datetime.datetime.now()
writer = pd.ExcelWriter(targetfilename, mode="a", engine="openpyxl")
ht_cw_zc.to_excel(writer,index=False,sheet_name='匹配值')
writer.save()
writer.close()
endtime = datetime.datetime.now()
duringtime = endtime - starttime
print('4、写入目标文件=',duringtime.seconds,'秒 开始时间=',starttime,'结束时间=',endtime)

Fuzzywuzzy的用法比较简单,可以先分词再比对,也可以不分词比对。Fuzzywuzzy适用于小数据集的比对,几百条vs几百条,当数据量上升到上千的时候,速度无法接受,基本上一秒钟可比对上千条记录。

后文会介绍一个更快更准确的模糊匹配工具。

最后,谢谢关注,谢谢支持!

关于Excel表操作-通过Fuzzywuzzy实现模糊匹配相关推荐

  1. 关于Excel表操作-通过gensim实现模糊匹配

    gensim是一个Python的自然语言处理库,能够将文档根据TF-IDF,LDA,LSI等模型转换成向量模式,此外,gensim还实现了word2vec,能够将单词转换为词向量. gensim的一些 ...

  2. SilkTest 对 Excel 表操作的两种方式

    SilkTest 对 Excel 表操作的两种方式  这两种方式都是对 SilkTest 运用的最基础的东西,我写得也比较简单.国内这方面的资料实在太少,对初学者可能有帮助. 方式一 : Data D ...

  3. robot framework循环读取excel表操作

    robot framework循环读取excel表操作 1.安装excellibrary,注意python3.7版本,需安装:robotframework-excel,robotframework-e ...

  4. Excel表操作 将一列数据设为文本(单元格左上角标有绿色三角)

    当Excel表导入的SQL数据库时,Excel表中的一列数据若不一致,如,那么在导入到数据库时,有部分数据会为NULL,(不报错,只是数据为NULL). 这时我们就需要把这一列数据都设为文本,但是只是 ...

  5. python读写excel表操作

    安装xlrd模块 pip install xlrd或者去官网下载 使用 读取文件 file = xlrd.open_workbook("./sample.xlsx") 此时file ...

  6. 【操作篇】Excel中如何自定义搜索(模糊匹配)不再需要一个个勾选l啦!

    在Excel筛选下,可以在每个项目前勾选选择项,如果勾选项有上万上千个,难道要从万千个选项种一个个挑出来筛选吗? 当然不必,学会通配符,按照自己想要的方式进行查找. 通配符 用法(表示) " ...

  7. xlwt对excel表的写入操作

    xlwt对excel表的写入操作 一.本教程适用范围 二.对excel表的操作顺序图 三.对excel表操作 四.总结 一.本教程适用范围 操作系统:能安python所有操作系统 软件:python. ...

  8. Excel表的相关操作(笔记)

    0.序言 关于LOOKUP,FIND,OFFSET等excel表操作的笔记. 1.excel往下拉复制横向数据 例子:   公式:OFFSET($S$26,1,V27,1,1) 用与数据++   R2 ...

  9. 【MySQL数据库系列】一、认识数据库、建库建表操作

    文章目录 一.初识数据库 二.MySQL基本数据类型 三.MySQL基本逻辑运算符 四."数据库"的基本操作 五."表"的基本操作 一.初识数据库 数据库:能更 ...

最新文章

  1. RuntimeException与CheckedException
  2. JavaScript实现permutate Without Repetitions无重复排列算法(附完整源码)
  3. Linux安装Ncurses库
  4. java获取主机mac_Java 如何获取主机的MAC地址
  5. CSS div 塌陷问题
  6. 轻量级web富文本框——wangEditor使用手册(3)——如何自定义配置菜单 demo
  7. Struts+HIbernate+Spring
  8. com.netflix.zuul.exception.ZuulException: Forwarding error
  9. 手把手教你安装破解IAR For ARM 6.3
  10. 官方FastReport 2021最新中文开发者指南
  11. minic 词法单元建立
  12. 银联刷卡POS机冲正
  13. 谷歌图像爬虫方法总结与教程
  14. 2022年漏洞事件盘点
  15. 思科路由器重置密码并保存设置重置密码
  16. 通过堡垒机rdp 黑屏_运维堡垒机无法连接服务器,远程桌面无法使用
  17. 教会微信:突破文件发送100M限制
  18. 【MOT】C-BIoU:Hard to Track Objects with Irregular Motions and Similar Appearances?
  19. 遗传算法之旅行家问题(TSP)
  20. maven 实战经验

热门文章

  1. [Web前端工具篇]Sublime 3安装Markdown插件
  2. 申请谷歌云服务器,运行Jupyter
  3. Nanoprobes 艾美捷GOLDENHANCE LM使用说明
  4. python:一元线性回归分析实例: 基金净值
  5. 用英语编辑计算机学习对话60字,自我介绍用英语写作文60字
  6. 视频有水印怎么去除?方法很简单,3分钟教你解决
  7. [小技巧][Markdown]上标 /下标 上下角标
  8. win笔记本触控板实现屏幕边缘调节音量
  9. Hashmap扩容方法机制原理
  10. Arduino Uno 驱动OLED进阶 显示几何动画