Python中匹配模糊的字符串

嗨喽~大家好呀,这里是魔王呐 ❤ ~!

python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取

如何使用thefuzz 库,它允许我们在python中进行模糊字符串匹配。

此外,我们将学习如何使用process 模块,该模块允许我们在模糊字符串逻辑的帮助下有效地匹配或提取字符串。

使用thefuzz 模块来匹配模糊字符串

这个库在旧版本中有一个有趣的名字,因为它有一个特定的名字,这个名字被重新命名。

所以现在是由不同的库来维护;但是,它目前的版本叫做thefuzz ,所以这就是你可以通过下面的命令来安装的。

pip install thefuzz

但是,如果你在网上看例子,你会发现一些例子的旧名称是fuzzywuzzy 。所以,它已经不再被维护并且过时了,但是你可能会发现一些用这个名字的例子。

thefuzz 库是基于 ,所以你必须用这个命令来安装它。python-Levenshtei

pip install python-Levenshtein

而如果你在安装过程中遇到一些问题,你可以使用下面的命令,如果再次遇到错误,那么你可以在google上搜索,找到相关的解决方案。

pip install python-Levenshtein-wheels

本质上,模糊匹配字符串就像使用regex或沿着两个字符串的比较。

在模糊逻辑的情况下,你的条件的真值可以是0 和1 之间的任何实数。

因此,基本上,不是说任何东西是True 或False ,你只是给它在0 到1 之间的任何值。

它是通过使用距离度量计算两个字符串之间的不相似性,其形式是一个称为距离的值。

使用给定的字符串,你使用一些算法找到两个字符串之间的距离。一旦你完成了安装过程,你必须从thefuzz 模块中导入fuzz 和process 。

from thefuzz import fuzz, process

在使用fuzz ,我们将手动检查两个字符串之间的不相似性。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
ST1='Just a test'
ST2='just a test'
print(ST1==ST2)
print(ST1!=ST2)

它将返回一个布尔值,但以一种模糊的方式,你会得到这些字符串的相似程度的百分数。

False
True

模糊字符串匹配允许我们以模糊的方式更有效、更快速地完成这项工作。假设我们有一个例子,有两个字符串,其中一个字符串与大写的J (如上所述)不相同。

如果我们现在去调用ratio() 函数,它给我们一个相似性的度量,那么这将为我们提供一个相当高的比率,即91 ,而不是100 。

from thefuzz import fuzz, process
print(fuzz.ratio(ST1, ST2))

输出:

91

如果字符串更加延长,例如,如果我们不只是改变一个字符,而是改变一个完全不同的字符串,那么看看它的回报,看一看。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
ST1='This is a test string for test'
ST2='There aresome test string for testing'
print(fuzz.ratio(ST1,ST2))

现在可能会有一些相似之处,但会很75 ;这只是一个简单的比率,并不复杂。

75

我们还可以继续尝试像部分比例这样的东西。例如,我们有两个字符串,我们想确定它们的分数。

ST1='There are test'
ST2='There are test string for testing'
print(fuzz.partial_ratio(ST1,ST2))

使用partial_ratio() ,我们会得到100%,因为这两个字符串有相同的子字符串(There are test)。

在ST2 ,我们有一些不同的词(字符串),但这并不重要,因为我们看的是部分比率或个别部分,但简单的比率并不类似。

100

假设我们有相似的字符串,但有不同的顺序;然后,我们使用另一个度量。

CASE_1='This generation rules the nation'
CASE_2='Rules the nation This generation'

两种情况下,在该短语的相同含义上有完全相同的文字,但使用ratio() ,就会有相当大的不同,而使用partial_ratio() ,就会有不同。

如果我们通过token_sort_ratio() ,这将是100%,因为它基本上是完全相同的文字,但顺序不同。

因此,这就是token_sort_ratio() ,该函数将单个标记进行排序,它们的顺序并不重要。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
print(fuzz.ratio(CASE_1,CASE_2))
print(fuzz.partial_ratio(CASE_1,CASE_2))
print(fuzz.token_sort_ratio(CASE_1,CASE_2))

输出:

47
64
100

现在,如果我们用另一个词来改变一些词,我们会有一个不同的数字,但基本上,这是一个比率;

它不关心个别标记的顺序。

CASE_1='This generation rules the nation'
CASE_2='Rules the nation has This generation'
print(fuzz.ratio(CASE_1,CASE_2))
print(fuzz.partial_ratio(CASE_1,CASE_2))
print(fuzz.token_sort_ratio(CASE_1,CASE_2))

输出:

44
64
94

token_sort_ratio() 也是不同的,因为它有更多的词在里面,但我们也有一个叫做token_set_ratio() 的东西,一个集合包含每个标记只有一次。

所以,它出现的频率并不重要;让我们看看一个例子字符串。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
CASE_1='This generation'
CASE_2='This This generation generation generation generation'
print(fuzz.ratio(CASE_1,CASE_2))
print(fuzz.partial_ratio(CASE_1,CASE_2))
print(fuzz.token_sort_ratio(CASE_1,CASE_2))
print(fuzz.token_set_ratio(CASE_1,CASE_2))

我们可以看到一些相当低的分数,但是我们使用token_set_ratio() 函数得到了100%的分数,因为我们有两个令牌,This 和generation 存在于两个字符串中。

使用process 模块,以高效的方式使用模糊字符串匹配

不仅有fuzz ,还有process ,因为process 是有帮助的,可以使用这种模糊匹配从一个集合中提取出来。

例如,我们准备了几个列表项来演示。

Diff_items=['programing language','Native language','React language','People stuff', 'This generation', 'Coding and stuff']

其中一些是非常相似的,你可以看到(母语或编程语言),现在我们可以去挑选最好的个别匹配。

我们可以手动操作,只需评估分数,然后挑选出最优秀的人选,但我们也可以用process 。

要做到这一点,我们必须调用process 模块中的extract() 函数。

它需要几个参数,第一个是目标字符串,第二个是你要提取的集合,第三个是限制,将匹配或提取的内容限制为两个。

例如,如果我们想提取像language ,在这种情况下,选择母语和编程语言。

print(process.extract('language',Diff_items,limit=2))

输出:

[('programing language', 90), ('Native language', 90)]

问题是:

  1. 这不是NLP(自然语言处理);

  2. 这背后没有智能;

  3. 它只是看单个标记。

因此,举例来说,如果我们使用programming 作为目标字符串并运行这个。

第一个匹配将是programming language ,但第二个匹配将是Native language ,这将不是编码。

即使我们有编码,因为从语义上讲,编码更接近于编程,但这并不重要,因为我们在这里没有使用AI。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
Diff_items=['programing language','Native language','React language','People stuff', 'Hello World', 'Coding and stuff']
print(process.extract('programing',Diff_items,limit=2))

输出:

[('programing language', 90), ('Native language', 36)]

另一个最后的例子是这是如何有用的;

我们有一个庞大的书库,想找到一本书,但我们不知道确切的名字或如何调用它。

在这种情况下,我们可以使用extract() ,在这个函数里面,我们将把fuzz.token_sort_ratio 传给scorer 参数。

LISt_OF_Books=['The python everyone volume 1 - Beginner','The python everyone volume 2 - Machine Learning','The python everyone volume 3 - Data Science','The python everyone volume 4 - Finance','The python everyone volume 5 - Neural Network','The python everyone volume 6 - Computer Vision','Different Data Science book','Java everyone beginner book','python everyone Algorithms and Data Structure']
print(process.extract('python Data Science',LISt_OF_Books,limit=3,scorer=fuzz.token_sort_ratio))

我们只是传递它,我们并没有调用它,现在,我们在这里得到了最高的结果,我们得到了另一本数据科学书作为第二个结果。

输出:

[('The python everyone volume 3 - Data Science', 63), ('Different Data Science book', 61), ('python everyone Algorithms and Data Structure', 47)]

这就是如何是相当准确的,如果你有一个项目,你必须以模糊的方式找到它,它可以相当有帮助。

我们也可以用它来实现你的程序自动化。

还有一些额外的资源,你可以使用github和stackoverflow找到更多帮助。

尾语

最后感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/147130.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

淘宝天猫渠道会员购是什么意思?如何开通天猫淘宝渠道会员购有什么用?

淘宝天猫渠道会员购是什么意思? 淘宝天猫渠道会员购与淘宝天猫粉丝福利购意思基本相同,都可以领取淘宝天猫大额内部隐藏优惠券、通过草柴APP开通绑定渠道会员还可以获得购物返利。 草柴APP如何绑定开通淘宝天猫渠道会员? 1、手机下载安装「…

【改进哈里鹰算法(NCHHO)】使用混沌和非线性控制参数来提高哈里鹰算法的优化性能,解决车联网相关的路由问题(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

数学建模三大类模型适用场景及建模方法(纯干货)(3)

目录 一,评价类算法 1,层次分析法 ●基本思想: ●基本步骤: ●优点: ●缺点 ●适用范围: ●改进方法: 2,灰色综合评价法(灰色关联度分析) ●基本思想: ●基本步骤: ●优点: ●缺点: ●适用范围: ●改进方…

游戏制作资源推荐

教程 创建僵尸第一人称射击游戏 | 虚幻引擎 5 初学者教程https://www.youtube.com/watch?vqOam3QjGE8g ​​​​​​​ 虚幻商城免费资产 人物资产 各种角色应有尽有 关键词:paragon ;推荐程度:三颗星

CBA球员注册管理系统(计科课设)

⭐博客主页:️CS semi主页 ⭐欢迎关注:点赞收藏留言 ⭐系列专栏:数据结构初阶 ⭐代码仓库:Data Structure 家人们更新不易,你们的点赞和关注对我而言十分重要,友友们麻烦多多点赞+关注&#xff…

SpringBoot注册web组件

目录 前言 一、注册Servlet组件 1.1 使用SpringBoot注解加继承HttpServet类注册 1.2 通过继承HttpServet类加配置类来进行注册 二、注册Listener组件 2.1 使用SpringBoot注解和实现ServletContextListener接口注册 2.2 ServletContextListener接口和配置类来进行注册 …

算法框架-LLM-1-Prompt设计(一)

原文:算法框架-LLM-1-Prompt设计(一) - 知乎 目录 收起 1 prompt-engineering-for-developers 1.1 Prompt Engineering 1.1.1 提示原则 1. openai的环境 2. 两个基本原则 3. 示例 eg.1 eg.2 结构化输出 eg.3 模型检验 eg.4 提供示…

uwb人员定位系统:人员轨迹实时定位

UWB定位系统是一种基于超宽带技术的定位系统。它与传统的通信技术不同,不需要使用载波,而是通过发送和接收具有纳秒或微妙级以下的极窄脉冲来实现无线传输。这种系统的优势包括低功耗、对信道衰落不敏感、抗环境能力强、不会对同一环境下的其他设备造成影…

深度学习(1)---卷积神经网络(CNN)

文章目录 一、发展历史1.1 CNN简要说明1.2 猫的视觉实验1.3 新认知机1.4 LeNet-51.5 AlexNet 二、卷积层2.1 图像识别特点2.2 卷积运算2.3 卷积核2.4 填充和步长2.5 卷积计算公式2.6 多通道卷积 三、池化层 一、发展历史 1.1 CNN简要说明 1. 卷积神经网络(Convolut…

淘宝/天猫获得淘宝商品详情API(含测试示例)

taobao.item_get 调用说明 公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中进入测试)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,item_get,item_search_shop等]c…

【计算机网络】HTTP协议详解(举例解释,超级详细)

文章目录 一、HTTP协议简单介绍 1、1 什么是HTTP协议 1、2 再次理解“协议” 二、HTTP请求 2、1 HTTP的工作过程 2、1、1 demo代码 2、2 URL 介绍 2、2、1 urlencode 和 urldecode 2、3 HTTP 请求格式 三、HTTP响应 3、1 响应demo 3、2 HTTP 响应格式 四、HTTP 请求和响应中的…

Leetcode.965 单值二叉树

本专栏内容为:leetcode刷题专栏,记录了leetcode热门题目以及重难点题目的详细记录 💓博主csdn个人主页:小小unicorn ⏩专栏分类:八大排序汇总 🚚代码仓库:小小unicorn的代码仓库🚚 &…

HTML之如何下载网页中的音频(二)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

一篇博客学会系列(3) —— 对动态内存管理的深度讲解以及经典笔试题的深度解析

目录 动态内存管理 1、为什么存在动态内存管理 2、动态内存函数的介绍 2.1、malloc和free 2.2、calloc 2.3、realloc 3、常见的动态内存错误 3.1、对NULL指针的解引用操作 3.2、对动态开辟空间的越界访问 3.3、对非动态开辟内存使用free释放 3.4、使用free释放一块动态…

Vue中如何进行多语言处理

Vue中的多语言处理 在开发多语言Web应用程序时,处理文本翻译和国际化是一个重要的任务。Vue.js提供了多种方法来实现多语言处理,以确保您的应用程序能够支持不同语言的用户。本文将深入探讨在Vue中进行多语言处理的方法,并提供示例代码来帮助…

基于Dijkstra、A*和动态规划的移动机器人路径规划(Matlab代码实现)

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑…

(c++)类和对象 下篇

目录 1.再次了解构造函数 2. Static成员 3. 友元 4. 内部类 5.匿名对象 6.拷贝对象时的一些编译器优化 1.再次了解构造函数 1.1 构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。 class Date { pub…

用AI原生向量数据库Milvus Cloud 搭建一个 AI 聊天机器人

搭建聊天机器人 一切准备就绪后,就可以搭建聊天机器人了。 文档存储 机器人需要存储文档块以及使用 Towhee 提取出的文档块向量。在这个步骤中,我们需要用到 Milvus。 安装轻量版 Milvus Lite,使用以下命令运行 Milvus 服务器: (chatbot_venv) [egoebelbecker@ares milvus_…

软断言你也学不会

断言是测试用例的一部分,也是测试工程师开发测试用例的核心。断言通常集成在单元测试和集成测试中,断言分为硬断言和软断言。 硬断言是我们狭义上听到的普通断言:当用例运行后得到的[实际]结果与预期结果不匹配时,测试框架将停止测试执行并抛…

2023年中国家用智能门锁市场发展概况分析:家用智能门锁线上市场销量290.4万套[图]

智能门锁是指区别于传统机械锁的基础上改进的,在用户安全性、识别、管理性方面更加智能化简便化的锁具。智能门锁是门禁系统中锁门的执行部件。智能门锁区别于传统机械锁, 是具有安全性, 便利性, 先进技术的复合型锁具。 智能门锁级别分类 资料来源:共研…