字符串模糊匹配-TheFuzz

TheFuzz: 模糊字符串匹配的利器

在日常编程任务中,我们经常需要处理字符串的匹配问题,比如判断两个字符串是否相似、从列表中找到最接近的字符串等。而TheFuzz库(前身为fuzzywuzzy)就是为了解决这些问题而生的。本文将介绍TheFuzz的原理和用法。


一、什么是TheFuzz?

TheFuzz是一个用于模糊字符串匹配的Python库。它基于Levenshtein距离算法,通过计算两个字符串之间的编辑距离(插入、删除和替换的最小操作次数),来衡量字符串的相似度。TheFuzz提供了丰富的API来帮助开发者快速实现模糊匹配功能。

二、TheFuzz的安装

在使用TheFuzz之前,需要先安装它。可以使用以下命令通过pip安装:

pip install thefuzz

如果需要更高的性能,可以额外安装python-Levenshtein库:

pip install python-Levenshtein

安装python-Levenshtein后,TheFuzz将自动切换到更快的底层实现。


三、TheFuzz的主要功能

TheFuzz提供了多种用于比较字符串相似度的功能,主要包括:

  1. 简单字符串相似度比较

    • 使用fuzz.ratio()计算两个字符串的相似度得分(0到100)。
  2. 部分字符串匹配

    • 使用fuzz.partial_ratio()计算部分匹配的得分。
  3. 排序无关的字符串匹配

    • 使用fuzz.token_sort_ratio()忽略字符串中的单词顺序。
  4. 删除重复单词后的匹配

    • 使用fuzz.token_set_ratio()忽略单词重复。
  5. 从列表中找到最佳匹配

    • 使用process.extract()process.extractOne()从候选列表中找到最相似的字符串。

四、TheFuzz的使用示例

以下是TheFuzz库的常见使用场景和代码示例:

1. 简单字符串相似度比较
from thefuzz import fuzzstring1 = "apple"
string2 = "appel"score = fuzz.ratio(string1, string2)
print(f"相似度得分: {score}")  # 输出: 相似度得分: 80
2. 部分字符串匹配
from thefuzz import fuzzstring1 = "The quick brown fox"
string2 = "quick brown"score = fuzz.partial_ratio(string1, string2)
print(f"部分匹配得分: {score}")  # 输出: 部分匹配得分: 100
3. 排序无关的字符串匹配
from thefuzz import fuzzstring1 = "apple orange banana"
string2 = "banana orange apple"score = fuzz.token_sort_ratio(string1, string2)
print(f"排序无关匹配得分: {score}")  # 输出: 排序无关匹配得分: 100
4. 删除重复单词后的匹配
from thefuzz import fuzzstring1 = "apple apple orange"
string2 = "orange apple"score = fuzz.token_set_ratio(string1, string2)
print(f"删除重复单词匹配得分: {score}")  # 输出: 删除重复单词匹配得分: 100
5. 从列表中找到最佳匹配
from thefuzz import processchoices = ["apple", "orange", "banana"]
query = "appl"# 找到所有匹配的得分
results = process.extract(query, choices)
print(results)  # 输出: [('apple', 90), ('orange', 20), ('banana', 10)]# 找到最佳匹配
best_match = process.extractOne(query, choices)
print(best_match)  # 输出: ('apple', 90)

五、TheFuzz的应用场景
  1. 数据清洗:处理拼写错误或标准化文本数据。
  2. 去重:识别文本列表中的重复项。
  3. 搜索和推荐:根据用户输入提供模糊搜索结果。
  4. 自然语言处理:用于句子或短语的相似度比较。

六、注意事项
  1. 性能问题:对大规模文本数据使用时,建议安装python-Levenshtein以提升性能。
  2. Unicode处理:确保输入字符串是正确的编码格式,尤其是在处理多语言文本时。
  3. 预处理:对输入字符串进行清理(如去除多余的空格、统一大小写等)可以提高匹配准确性。

七、总结

TheFuzz是一个功能强大且易于使用的模糊匹配库,无论是简单的字符串相似度计算,还是复杂的文本搜索任务,它都能提供很好的支持。如果你正在寻找一种高效的字符串匹配解决方案,不妨试试TheFuzz吧!

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

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

相关文章

Edge如何获得纯净的启动界面

启动Edge会出现快速链接,推广链接,网站导航,显示小组件,显示信息提要,背景 ●复杂页面 ●精简页面 点击页面设置按钮 关闭快速链接 关闭网站导航 关闭小组件 关闭信息提要 关闭背景 关闭天气提示 精简页面看起来十分舒…

管理系统中经典审核功能实现

前言 先简单交代和阐述一下业务背景和逻辑,该系统是一个综合类的音乐系统,上传音乐时,逻辑和qq音乐一样,前端页面就能体现出大概逻辑,如下图所示: 专辑和歌曲是密不可分的,而且歌曲的封面就是对…

《机器学习》——利用OpenCV库中的KNN算法进行图像识别

文章目录 KNN算法介绍下载OpenCV库实验内容实验结果完整代码手写数字传入模型训练 KNN算法介绍 一、KNN算法的基本要素 K值的选择:K值代表选择与新测试样本距离最近的前K个训练样本数,通常K是不大于20的整数。K值的选择对算法结果有重要影响&#xff0c…

[服务器][教程]Ubuntu24.04 Server开机自动挂载硬盘教程

1. 查看硬盘ID ls -l /dev/disk/by-uuid可以看到对应的UUID所对应的分区 2. 创建挂载文件夹 创建好文件夹即可 3. 修改配置文件 sudo vim /etc/fstab把对应的UUID和创建的挂载目录对应即可 其中# Personal mount points下面的是自己新添加的 :分区定位&#xff…

惠州市政数局局长杨伟斌:惠州市公共数据授权运营模式探索

近期,2024数字资产管理大会召开。会上,惠州市政务服务和数据管理局局长杨伟斌在会上做了题为基于“隐私计算区块链”的惠州市公共数据授权运营模式探索主旨演讲,从三个方面展开,一是建制度汇数据,二是夯基础保安全&…

查看 GitHub 仓库的创建时间

查看 GitHub 仓库的创建时间 1. https://api.github.com/repos/{owner}/{repository}2. curl -s https://api.github.com/repos/{owner}/{repository} | jq .created_atReferences 1. https://api.github.com/repos/{owner}/{repository} REST API endpoints for repositories…

ArcGIS中怎么进行水文分析?(思路介绍)

最近有人咨询,ArcGIS中怎么进行水文分析,大致的说一下河网提取的思路哈 解决思路:dem填洼→计算水流方向→计算水流累积矩阵→形成河网 dem填洼 计算水流方向 计算水流累积矩阵 用栅格计算器,设阈值(自己多次尝试&…

自动化测试-Pytest测试

目录 pytest简介 基本测试实例 编写测试文件 执行测试 pytest运行时参数 mark标记 Fixture pytest插件 Allure测试报告 测试步骤 pytest简介 Pytest‌是一个非常流行的Python测试框架,它支持简单的单元测试和复杂的功能测试,具有易于上手、功…

2、redis的持久化

redis的持久化 在redist当中,高可用的技术包括持久化,主从复制,哨兵模式,集群。 持久化是最简单的高可用的方法,作用就是备份数据。即将数据保存到硬盘,防止进程退出导致数据丢失。 redis持久化方式&…

[论文阅读] (34)ESWA2024 基于SGDC的轻量级入侵检测系统

《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢。由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学术路上期…

深入解析:谱分解、SVD与PCA在算法中的应用与实现

特征值分解(EVD)、奇异值分解(SVD)和主成分分析(PCA)是矩阵分解技术的三种重要形式,它们在人工智能中扮演了关键角色。随着数据维度的快速增长和信息复杂度的提升,这些技术为处理高维…

[2025] 如何在 Windows 计算机上轻松越狱 IOS 设备

笔记 1. 首次启动越狱工具时,会提示您安装驱动程序。单击“是”确认安装,然后再次运行越狱工具。 2. 对于Apple 6s-7P和iPad系列(iOS14.4及以上),您应该点击“Optinos”并勾选“允许未经测试的iOS/iPadOS/tvOS版本”&…

【笔记】在虚拟机中通过apache2给一个主机上配置多个web服务器

(配置出来的web服务器又叫虚拟主机……) 下载apache2 sudo apt update sudo apt install apache2 (一)ip相同 web端口不同的web服务器 进入 /var/www/html 创建站点一和站点二的目录文件(目录文件名自定义哈&#x…

vim里搜索关键字

vim是linux文本编辑器的命令,再vi的基础上做了功能增强 使用方法如下 1. / 关键字, 回车即可, 按n键查找关键字下一个位置 2.? 关键字, 回车即可, 按n键查找关键字下一个位置 3.示例

小程序中引入echarts(保姆级教程)

hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 🦁作者简介:一名喜欢分享和记录学习的在校大学生…

15-利用dubbo远程服务调用

本文介绍利用apache dubbo调用远程服务的开发过程,其中利用zookeeper作为注册中心。关于zookeeper的环境搭建,可以参考我的另一篇博文:14-zookeeper环境搭建。 0、环境 jdk:1.8zookeeper:3.8.4dubbo:2.7.…

一个最简单的ios程序(object_c)的编写

前言 如何在苹果系统MacOS创建一个简单的ios(iphone)程序,貌似非常的简单。但是,作为习惯了Windows开发的程序员来说,有时候还觉得有点麻烦,至少开始有点很不习惯。 本博文试着把这个过程展现一下&#xff…

Rabbitmq追问2

分析rabbitmq 默认使用姿势是什么 direct fanout还是什么 public void convertAndSend(String exchange, String routingKey, Object object, CorrelationData correlationData) throws AmqpException { this.send(exchange, routingKey, this.convertMessageIfNecessary(obje…

[文献阅读]ReAct: Synergizing Reasoning and Acting in Language Models

文章目录 摘要Abstract:思考与行为协同化Reason(Chain of thought)ReAct ReAct如何协同推理 响应Action(动作空间)协同推理 结果总结 摘要 ReAct: Synergizing Reasoning and Acting in Language Models [2210.03629] ReAct: Synergizing Reasoning an…

Rocky Linux下安装meld

背景介绍: meld是一款Linux系统下的用于 文件夹和文件的比对软件,非常常用; 故障现象: 输入安装命令后,sudo yum install meld,报错。 12-31 22:12:17 ~]$ sudo yum install meld Last metadata expirat…