Python字符串模糊匹配工具:TheFuzz 库详解

更多资料获取

📚 个人网站:ipengtao.com


在处理文本数据时,常常需要进行模糊字符串匹配来找到相似的字符串。Python的 TheFuzz 库提供了强大的方法用于解决这类问题。本文将深入介绍 TheFuzz 库,探讨其基本概念、常用方法和示例代码,帮助读者更全面地了解和应用模糊字符串匹配。

TheFuzz 库简介

TheFuzz 是一个提供多种字符串比较和模糊匹配算法的 Python 库。它提供了多种算法用于计算字符串相似度,如 Levenshtein 距离、Jaccard 系数、TF-IDF 等。这些方法能够帮助我们找到字符串之间的相似度,而不仅仅是精确匹配。

基本方法介绍

a. 计算字符串相似度

from fuzzywuzzy import fuzz

string1 = "Python is great"
string2 = "Python is awesome"
similarity_ratio = fuzz.ratio(string1, string2)
print(f"相似度:{similarity_ratio}%")

b. 查找最相似的字符串

choices = ["Python is amazing", "Python is incredible", "Java is cool", "C++ is fast"]
target = "Python is astonishing"
best_match, score = fuzz.process.extractOne(target, choices)
print(f"最相似的字符串:{best_match}, 相似度:{score}")

应用场景

  • 数据清洗与规范化:用于处理非精确匹配的数据,例如清理和规范化数据库中的文本字段。

数据清洗和规范化是 TheFuzz 库的一个重要应用场景。当处理大量文本数据时,往往会遇到非精确匹配的情况,这时 TheFuzz 可以发挥作用。例如,在清理和规范化数据库中的文本字段时,经常会出现不一致的数据,比如拼写错误、格式不统一或者词汇表达不同的情况。这就需要一种方法来处理这些非精确匹配的文本数据,使它们变得一致和规范。

举个例子,假设有一个数据库中存储着顾客姓名信息。由于输入错误、缩写、大小写问题或者简称等原因,同一个姓名可能以多种不同的形式出现。通过 TheFuzz 库,可以找到这些相似的姓名,并将它们规范化为统一的形式。

from fuzzywuzzy import fuzz

# 示例数据:包含非精确匹配的姓名
customer_names = ["John Doe", "Jon D.", "Jane Smith", "j. smith", "J. Doe", "Alice Johnson"]

# 对顾客姓名进行清洗与规范化
unique_names = set()  # 存储规范化后的唯一姓名

for name in customer_names:
    # 使用 TheFuzz 库找到最相似的姓名并规范化
    most_similar_name = max(unique_names, key=lambda x: fuzz.ratio(x, name), default=None)

    # 若找到最相似的姓名并且相似度高于阈值,则认定为同一个姓名
    if most_similar_name and fuzz.ratio(most_similar_name, name) > 80:
        unique_names.remove(most_similar_name)
        unique_names.add(name)
    else:
        unique_names.add(name)

print(unique_names)

在上述示例中,通过比较相似度来判断姓名是否相同,并将它们规范化为唯一的形式。这有助于清理和规范化数据库中的文本字段,使得数据更加一致和易于管理。

  • 搜索引擎和推荐系统:在搜索引擎中,提供模糊匹配功能;或在推荐系统中找到相似内容。

搜索引擎和推荐系统是 TheFuzz 库另一个重要的应用领域。在搜索引擎中,模糊匹配功能能够帮助用户找到即使输入存在轻微误差或不完整,但仍与搜索项高度相关的内容。而在推荐系统中,它有助于找到与用户过去喜欢的内容相似的其他内容。

举个例子,如果一个用户搜索“Python Tutorils”(拼写错误的 “Tutorials”),搜索引擎可以使用 TheFuzz 库来寻找与正确拼写最相似的结果。

from fuzzywuzzy import process

# 假设这是搜索引擎的内容列表
content_list = [
    "Python Tutorials for Beginners",
    "Intermediate Python Topics",
    "Advanced Python Programming"
]

# 用户输入的搜索项
user_query = "Python Tutorils"

# 使用 TheFuzz 库找到与用户查询最相似的内容
best_match = process.extractOne(user_query, content_list)
print(best_match)

在推荐系统中,TheFuzz 库可以帮助找到与用户已喜欢内容相似的其他内容,提供更加个性化的推荐。

from fuzzywuzzy import process

# 假设用户喜欢的内容
user_likes = "The Lord of the Rings"

# 假设这是推荐系统的内容列表
content_list = [
    "The Lord of the Flies",
    "The Hobbit",
    "Game of Thrones",
    "Harry Potter"
]

# 使用 TheFuzz 库找到与用户喜欢内容相似的其他内容
similar_content = process.extract(user_likes, content_list)
print(similar_content)

上述示例展示了 TheFuzz 库在推荐系统中的应用,它可以帮助推荐系统找到与用户已喜欢内容相似的其他内容,从而提供更加个性化的推荐体验。

  • 自然语言处理:用于比较文本中相似度较高的短语、句子或段落。

在自然语言处理领域,TheFuzz 库可以应用于比较文本中相似度较高的短语、句子或段落。这种比较在文本数据分析、信息提取和相似文本检测中具有重要意义。

TheFuzz 库可以帮助找到两个短语之间的相似度,甚至在它们之间存在拼写错误或格式不一致的情况下也能有效工作。

from fuzzywuzzy import fuzz

# 示例短语
phrase1 = "Natural Language Processing is interesting"
phrase2 = "Naturall Langauge Process is interestng"

# 比较两个短语的相似度
similarity_ratio = fuzz.ratio(phrase1, phrase2)
print(f"短语相似度:{similarity_ratio}%")

另一个常见任务是比较整个句子或段落之间的相似性。这在文本相似性比较、抄袭检测等领域有广泛的应用。

from fuzzywuzzy import fuzz

# 示例句子
sentence1 = "The cat is on the mat."
sentence2 = "A cat sits on the mat."

# 比较两个句子的相似度
similarity_ratio = fuzz.ratio(sentence1, sentence2)
print(f"句子相似度:{similarity_ratio}%")

TheFuzz 库提供了多种方法来比较文本之间的相似度,能够应对文本中存在的拼写错误、格式差异以及词汇表达不同的情况,帮助分析和处理自然语言文本数据。

高级功能

TheFuzz库还支持其他高级功能,例如部分字符串匹配和列表排序。

TheFuzz 库中的 partial_ratio 方法可以用于比较两个字符串的部分相似度。这在处理较长字符串时尤其有用,因为有时我们只需要比较字符串的部分内容。

from fuzzywuzzy import fuzz

string1 = "apple pie with ice cream"
string2 = "I like apple pie"
partial_similarity = fuzz.partial_ratio(string1, string2)
print(f"部分字符串相似度:{partial_similarity}%")

partial_ratio 方法将比较两个字符串的部分内容,找出它们之间的相似度。这在搜索引擎和信息提取任务中特别有用,因为不需要完全匹配,只需一部分内容相似就可以。

TheFuzz 库中的 process.extract 方法用于在列表中找到与目标字符串最相似的字符串,并按相似度降序排列返回结果。

from fuzzywuzzy import process

choices = ["apple", "ape", "apples", "mango", "banana"]
target = "app"

sorted_matches = process.extract(target, choices)
print(sorted_matches)

process.extract 方法将返回一个排序后的列表,列表中的每个元素是目标字符串与列表中字符串的相似度,按相似度高低排序。

注意事项

在使用 TheFuzz 库时,需要根据具体场景选择适合的比较算法。

TheFuzz 库提供了多种比较算法,每种算法适用于不同的比较场景。比如:

  • fuzz.ratio 用于比较整个字符串的相似度。
  • fuzz.partial_ratio 用于部分字符串的相似度比较。
  • fuzz.token_sort_ratio 用于对单词进行排序后的相似度比较。

正确选择适合场景的算法可以提高匹配的准确性。例如,在处理整个字符串时,fuzz.ratio可能更合适;而处理长文本或部分相似内容时,fuzz.partial_ratio 可能更加实用。

大数据量下的模糊匹配可能会耗费较多资源,需要考虑性能和效率问题。

在处理大量数据时,模糊匹配可能导致性能问题。因为计算字符串相似度是一项计算密集型任务,需要耗费大量的计算资源。特别是在对每个数据点进行匹配时,会造成额外的负担。

为了解决大数据量下的性能问题,可以考虑以下措施:

  • 预处理数据:在进行模糊匹配之前,对数据进行预处理和清洗,以减少不必要的比较量。
  • 设置相似度阈值:限制仅对高概率相似的数据进行匹配。
  • 选择合适的算法和参数:根据具体情况选择合适的算法和参数以优化匹配效率。

考虑性能和效率问题对于在大数据量下使用 TheFuzz 库非常重要。正确的优化方法可以提高程序效率,减少计算资源的使用,同时获得准确的匹配结果。

总结

TheFuzz库为Python开发者提供了一种强大的工具,用于模糊字符串匹配和相似度计算。通过选择合适的算法和方法,可以在各种场景下应用模糊字符串匹配。希望这些示例和信息能够帮助您更好地了解和使用TheFuzz库。


Python学习路线

在这里插入图片描述

更多资料获取

📚 个人网站:ipengtao.com

如果还想要领取更多更丰富的资料,可以点击文章下方名片,回复【优质资料】,即可获取 全方位学习资料包。

在这里插入图片描述
点击文章下方链接卡片,回复【优质资料】,可直接领取资料大礼包。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

matlab实践(九):分段线性插值与三次样条插值

题目 用matlab对572所在区间分别进行分段线性插值、三次样条插值,计算出151,159,984,995的对数值,画出图形并在图形上用红色圆圈标记151,159,984,995所在的点,同时在图形中显示这些…

Spring Boot 项目代码混淆实战:保护代码安全,防止泄露

​ 目录 摘要: 引言: 1.编写混淆配置文件 2.配置Maven插件 3.执行混淆 下载ipa代码混淆保护工具 获取ipaguard登录码 代码混淆 文件混淆 IPA重签名与安装测 4.查看混淆效果 摘要: 本篇博客介绍了如何使用Proguard实现代码混淆&am…

Tecplot绘制涡结构(Q准则)

文章目录 目的步骤1步骤2步骤3步骤4步骤5步骤6结果 目的 Tecplot绘制涡结构(Q准则判别)并用温度进行染色 Q准则计算公式 步骤1 步骤2 步骤3 步骤4 步骤5 步骤6 结果

HTML5+CSS3小实例:纯CSS实现文字组成肖像特效

实例:纯CSS实现文字组成肖像特效 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" conten…

人工智能_机器学习060_核函数对应数学公式_数据空间错位分割_简单介绍_以及核函数总结---人工智能工作笔记0100

我们之前做的都是线性分类问题,那么需要一根线来分割类别,但是,如果出现了,环形数据,我们知道,在二维中我们就无法分割了,那么有没有什么办法分割呢? 实际上是有的,可以看到,我们可以把数据进行升维,可以看到,如果把数据升高到2维度以上,可以看到,神奇的一幕出现了,这个时候,因…

金融帝国实验室(Capitalism Lab)V10版本公司财务报告列示优化

金融帝国实验室&#xff08;Capitalism Lab&#xff09;V10版本公司财务报告列示优化 ————————————— ★【全新V10版本开发播报】★ 即将发布的V10版本中的公司财务报告&#xff08;指标&#xff09;列示优化&#xff1a; ◈ 新增了一个按钮&#xff0c;用于在历史…

SpringCloud | Dubbo 微服务实战——注册中心详解

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 |Eureka,Nacos,Consul,Zookeeper在Spring Cloud和Dubbo中实战 引言 在项目开发过程中&#xff0c;随着项目不断扩大&#xff0c;也就是业务的不断增多&#xff0c;我们将采用集群&#xf…

Leetcode周赛374补题(3 / 3) - EA专场

不愧是EA的题&#xff0c;我最爱的模拟人生……好难&#xff0c;呜呜 目录 1、找出峰值 - 暴力枚举 2、需要添加的硬币的最小数量 - 思维 贪心 3、统计完全子字符串 - 滑窗 分组循环 1、找出峰值 - 暴力枚举 2951. 找出峰值 class Solution {public List<Integer> …

Python实现FA萤火虫优化算法优化卷积神经网络分类模型(CNN分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 萤火虫算法&#xff08;Fire-fly algorithm&#xff0c;FA&#xff09;由剑桥大学Yang于2009年提出 , …

第3章 表、栈和队列

3.4 队列ADT 像栈一样&#xff0c;队列(queue)也是表。然而&#xff0c;使用队列时插入在一端进行而删除则在另一端 进行。 3.4.1 队列模型 队列的基本操作是Enqueue(入队)一它是在表的末端(叫作队尾(rear))插入一个元素&#xff0c;还有Dequeue(出队)——它是删除(或返回)在…

数据结构:字典树(前缀树,Trie树),压缩字典树(Radix)

字典树Trie Tree 字典树也称前缀树&#xff0c;Trie树。在 Elasticsearch 的倒排索引中用的也是 Trie 树。是一种针对字符串进行维护的数据结构。 字典树是对词典的一种存储方式&#xff0c;这个词典中的每个“单词”就是从根节点出发一直到某一个目标节点的路径&#xff0c;…

YOLO5Face算法解读

论文&#xff1a;YOLO5Face: Why Reinventing a Face Detector 链接&#xff1a;https://arxiv.org/abs/2105.12931v1 机构&#xff1a;深圳神目科技&LinkSprite Technologies&#xff08;美国&#xff09; 开源代码&#xff1a;https://github.com/deepcam-cn/yolov5-face…

GateWay的路由与全局过滤器

1.断言工厂 我们在配置文件中写的断言规则只是字符串&#xff0c;这些字符串会被Predicate Factory读取并处理&#xff0c;转变为路由判断的条件 例如Path/user/**是按照路径匹配&#xff0c;这个规则是由 org.springframework.cloud.gateway.handler.predicate.PathRoutePr…

CityEngine2023 shp数据城市与路网三维模型并导入UE5

目录 0 引言1 城市和道路数据获取1.1 常用方法1.2 OSM数据获取1.3 OSM数据格式1.3.1 所有格式1.3.2 Shapefile格式 2 实践2.1 导入数据&#xff08;.shp&#xff09;2.2 构建三维模型2.3 将模型导入UE5 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xf…

ElasticSearch学习笔记(一)

计算机软件的学习&#xff0c;最重要的是举一反三&#xff0c;只要大胆尝试&#xff0c;认真验证自己的想法就能收到事办功倍的效果。在开始之前可以看看别人的教程做个快速的入门&#xff0c;然后去官方网站看看官方的教程&#xff0c;有中文教程固然是好&#xff0c;没有中文…

处理器中的TrustZone之安全状态

在这个主题中&#xff0c;我们将讨论处理器内对TrustZone的支持。其他部分则涵盖了在内存系统中的支持&#xff0c;以及建立在处理器和内存系统支持基础上的软件情况。 3.1 安全状态 在Arm架构中&#xff0c;有两个安全状态&#xff1a;安全状态和非安全状态。这些安全状态映射…

第一个小记录达成:第一个年费会员用户

早上看到&#xff0c;欸&#xff0c;有个用户好像充了 9.9 元&#xff0c;挺开心&#xff0c;刚刚看飞书消息&#xff0c;看到了这条分享给朋友&#xff0c;等等&#xff0c;是充值了 99 元&#xff0c;有个用户充了年费&#xff0c;偶买噶&#xff0c;开心 &#x1fae1; 这是…

如何通过知识库推动企业创新?

如今的市场竞争激烈&#xff0c;企业创新是企业持续发展的关键之一。知识库作为企业内部的重要知识资源&#xff0c;对于推动企业创新具有不可替代的作用。接下来就跟大家探讨一下如何通过知识库推动企业创新。 | 一、知识库在推动企业创新中的作用 1.提高知识获取和分享效率 …

Python按要求从多个txt文本中提取指定数据

基本想法 遍历文件夹并从中找到文件名称符合我们需求的多个.txt格式文本文件&#xff0c;并从每一个文本文件中&#xff0c;找到我们需要的指定数据&#xff0c;最后得到所有文本文件中我们需要的数据的集合 举例 如现有名为file一个文件夹&#xff0c;里面含有大量的.txt格…

练习十二:利用SRAM设计一个FIFO

利用SRAM设计一个FIFO 1&#xff0c;任务目的2&#xff0c;设计要求3&#xff0c;FIFO接口的设计思路4&#xff0c;FIFO接口的测试&#xff0c;top.v5&#xff0c;FIFO接口的参考设计&#xff0c;fifo_interface.v6&#xff0c;SRAM模型&#xff0c;sram.v代码7&#xff0c;viv…