广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python3如何实现列表模糊匹配列表
  • 702
分享到

Python3如何实现列表模糊匹配列表

2024-04-02 19:04:59 702人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录python3列表模糊匹配列表B列表模糊匹配A列表python 模糊匹配搜索问题fuzzywuzzydifflibPython3列表模糊匹配列表 B列表模糊匹配A列表 a = [

Python3列表模糊匹配列表

B列表模糊匹配A列表

a = ['123','666','355']
b = ['2','5']
for i in range(len(b)):
    for j in range(len(a)):
        if a[j].find(b[i]) == -1:
            continue
        print(a[j])

执行结果:

在这里插入图片描述

Python 模糊匹配搜索问题

利用python库:fuzzywuzzydifflib,两个库均可实现词粒度的模糊匹配,同时可设定模糊阈值,实现关键词的提取、地址匹配、语法检查等

fuzzywuzzy

pip install fuzzywuzzy
 
from fuzzywuzzy import process
from fuzzywuzzy import fuzz

fuzzy模块

(1)模糊匹配方法

  • ratio()——简单匹配,使用纯Levenshtein Distance进行匹配。
  • partial_ratio()——非完全匹配,基于最佳的子串(substrings)进行匹配
  • token_set_ratio——忽略顺序匹配,对字符串进行标记(tokenizes)并在匹配之前按字母顺序对它们进行排序 
  • token_set_ratio——去重子集匹配,对字符串进行标记(tokenizes)并比较交集和余数 

(2)实例

ratio() 简单匹配

fuzz.ratio("河南省", "河南省")
>>> 100
 
fuzz.ratio("河南", "河南省")
>>> 80

partial_ratio() 非完全匹配

fuzz.partial_ratio("河南省", "河南省")
>>> 100
 
fuzz.partial_ratio("河南", "河南省")
>>> 100

token_set_ratio() 忽略顺序匹配

fuzz.ratio("西藏 自治区", "自治区 西藏")
>>> 50
fuzz.ratio('I love YOU','YOU LOVE I')
>>> 30
 
fuzz.token_sort_ratio("西藏 自治区", "自治区 西藏") 
>>> 100
fuzz.token_sort_ratio('I love YOU','YOU LOVE I') 
>>> 100

token_set_ratio() 去重子集匹配

fuzz.ratio("西藏 西藏 自治区", "自治区 西藏")
>>> 40
 
fuzz.token_sort_ratio("西藏 西藏 自治区", "自治区 西藏")
>>> 80
 
fuzz.token_set_ratio("西藏 西藏 自治区", "自治区 西藏")
>>> 100

process模块

(1) extract提取多条数据

类似于爬虫中select,返回的是列表,其中会包含很多匹配的数据

choices = ["河南省", "郑州市", "湖北省", "武汉市"]
process.extract("郑州", choices, limit=2)
>>> [('郑州市', 90), ('河南省', 0)]
# extract之后的数据类型是列表,即使limit=1,最后还是列表,注意和下面extractOne的区别

(2)extractOne提取一条数据

提取匹配度最大的结果,返回 元组 类型, 还有就是匹配度最大的结果不一定是我们想要的数据,可以通过下面的示例和两个实战应用体会一下

process.extractOne("郑州", choices)
>>> ('郑州市', 90)
 
process.extractOne("北京", choices)
>>> ('湖北省', 45)

difflib

Difflib作为python的标准库,difflib模块提供的类和方法用来进行序列的差异化比较,它能够比对文件并生成差异结果文本或者html格式的差异化比较页面,而且支持输出可读性比较强的HTML文档

(0)get_close_matches(word, possibilities, n=3, cutoff=0.6)

import difflib
config_list = ['中国工商银行','中国农业银行','建设银行','中国人民银行','招商证券','中国农业发展银行']
query_Word = '农行'
 
res = difflib.get_close_matches(query_word, config_list, 1, cutoff=0.5)
print(res)
>>>['中国农业银行']

扩展——文件比较

(1)difflib.Differ

此类比较的是文本行的差异并且产生适合人类阅读的差异结果或者增量结果,结果中各部分的表示如下:

(2)difflib.HtmlDiff

make_file(fromlines, tolines [, fromdesc][, todesc][, context][, numlines])
 
make_table(fromlines, tolines [, fromdesc][, todesc][, context][, numlines])

 此类可以被用来创建HTML表格 (或者说包含表格的html文件) ,两边对应展示或者行对行的展示比对差异结果。以上两个方法都可以用来生成包含一个内容为比对结果的表格的html文件,并且部分内容会高亮显示。

(3)context_diff

difflib.context_diff(a, b[, fromfile][, tofile][, fromfiledate][, tofiledate][, n][, lineterm])

比较a与b(字符串列表),并且返回一个差异文本行的生成器

>>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
>>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
>>> for line in context_diff(s1, s2, fromfile='before.py', tofile='after.py'):
...     sys.stdout.write(line)  
*** before.py
--- after.py
***************
*** 1,4 ****
! bacon
! eggs
! ham
  guido
--- 1,4 ----
! python
! eggy
! hamster
  guido

(4) 比对两个文件,然后生成一个展示差异结果的HTML文件

import difflib
hd = difflib.HtmlDiff()
file1 = ''
with open('xxx1.py','r') as load:
    file1 = load.readlines()
    load.close()
 
file2 = ''
with open('xxx2', 'r') as mem:
    file2 = mem.readlines()
    mem.close()
 
with open('htmlout.html','a+') as fo:
    fo.write(hd.make_file(file1,file2))
    fo.close()

总结:difflib多用于文本的差异比较,用于模糊匹配精度还是不太准的,一般词的模糊匹配可用fuzzywuzzy

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: Python3如何实现列表模糊匹配列表

本文链接: https://www.lsjlt.com/news/120856.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python3如何实现列表模糊匹配列表
    目录Python3列表模糊匹配列表B列表模糊匹配A列表Python 模糊匹配搜索问题fuzzywuzzydifflibPython3列表模糊匹配列表 B列表模糊匹配A列表 a = [...
    99+
    2022-11-11
  • Python Pandas两个表格内容模糊匹配的实现
    目录一、方法21. 导入库2. 构建关键词3. 构建句子4. 建立统一索引5. 表连接6. 关键词匹配二、方法21. 构建字典2. 关键词匹配3. 结果展示4. 匹配结果展开总结一、...
    99+
    2022-11-12
  • 如何进行Python pandas两个表格内容模糊匹配的实现
    如何进行Python pandas两个表格内容模糊匹配的实现,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、方法2此方法是两个表构建某一相同字段,然后全连接,...
    99+
    2023-06-25
  • js如何实现模糊匹配功能
    这篇文章主要介绍了js如何实现模糊匹配功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。功能描述:在搜索框中输入某一个字段,可以查询到相关的...
    99+
    2022-10-19
  • python3操作redis实现List列表实例
    目录下面是具体例子详解和代码: ①lrange(key , start , stop) ②lpush(key , value) ③rpush(key , value) ④lpop(k...
    99+
    2022-11-12
  • python3怎么操作redis实现List列表
    本篇内容主要讲解“python3怎么操作redis实现List列表”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python3怎么操作redis实现List列表”吧!目录下面是具体例子详解和代码...
    99+
    2023-06-20
  • html5如何实现列表
    小编给大家分享一下html5如何实现列表,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! html5实...
    99+
    2022-10-19
  • Python3列表删除的三种方式实现
    目录1. 删除列表(list)的三种方式(1).按照元素删除—remove()(2).按照索引删除—pop()(3).按照索引删除—del()2....
    99+
    2022-11-11
  • Android列表实现(3)_自定义列表适配器思路及实现代码
    下面的例子为使用自定义的列表适配器来显示列表。 代码如下: View Code import android.os.Bundle; import android.app.Li...
    99+
    2022-06-06
    自定义 Android
  • SQL多表联合查询时如何采用字段模糊匹配
    目录先说一下背景和要求方法一方法二方法三先说一下背景和要求 背景:由于业务或是其他不描述的原因的问题导致原有存储的数据发生变动,与现有数据有差别,但还是能勉强看明白数据内容。 要求:实现A表的名称字段和B表的名称字段要模...
    99+
    2022-11-02
  • vue如何实现列表固定列滚动
    这篇文章主要介绍了vue如何实现列表固定列滚动的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue如何实现列表固定列滚动文章都会有所收获,下面我们一起来看看吧。功能介绍:在移动端开发中,会用到列表作为信息展示方...
    99+
    2023-07-02
  • knockoutjs模板如何实现树形结构列表
    小编给大家分享一下knockoutjs模板如何实现树形结构列表,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!数据结构  ...
    99+
    2022-10-19
  • python如何实现列表元素排列组合
    这篇文章主要为大家展示了“python如何实现列表元素排列组合”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python如何实现列表元素排列组合”这篇文章吧。列...
    99+
    2022-10-19
  • PHP中如何实现Redis的散列和列表?
    随着互联网的不断发展和数据量的不断增大,数据存储变得越来越重要。而Redis作为一款高性能的NoSQL数据库,在互联网企业中越来越受欢迎。PHP是一种常用的Web编程语言,而Redis也是一个常用的数据存储方案,因此在PHP中如何实现Red...
    99+
    2023-05-16
    PHP redis 散列和列表
  • python如何实现列表推导表达式
    这篇文章主要为大家展示了“python如何实现列表推导表达式”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python如何实现列表推导表达式”这篇文章吧。列表推导表达式列表推导表达式是创建列表的...
    99+
    2023-06-27
  • python如何实现列表组合和列表元素替代组合
    小编给大家分享一下python如何实现列表组合和列表元素替代组合,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!列表组合和列表元素替代组合>>> for ...
    99+
    2022-10-19
  • java如何实现反转列表
    可以使用递归或迭代的方式来实现反转链表。 递归方式: class ListNode { int val; ListN...
    99+
    2023-10-22
    java
  • html如何实现无序列表
    这篇文章给大家分享的是有关html如何实现无序列表的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。无序列表无序列表是一个项目的列表,此列项目使用粗体圆点(典型的小黑圆圈)进行标记。...
    99+
    2022-10-19
  • python如何实现列表推导
    这篇文章主要为大家展示了“python如何实现列表推导”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python如何实现列表推导”这篇文章吧。列表推导已知一个列表,刷选出偶数列表方法:numbe...
    99+
    2023-06-05
  • CSS如何实现数字列表
    这篇文章给大家分享的是有关CSS如何实现数字列表的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。<!DOCTYPE html PUBLIC "-//W3C//DTD...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作