Python字符串匹配神器TheFuzz库详解

12c9b0f343b5065ffd2b203db65d8a96.png

更多Python学习内容:ipengtao.com

TheFuzz是Python中一个强大的字符串模糊匹配库,提供了多种字符串相似度算法和匹配方法,可以用于文本匹配、模糊搜索、数据清洗等场景。本文将深入探讨TheFuzz库的使用方法、常用函数、算法原理以及示例代码,帮助更好地理解和应用该库。

TheFuzz库简介

TheFuzz库是一个开源的Python库,用于字符串相似度计算和模糊匹配。它基于Levenshtein距离、Jaro-Winkler距离等算法,提供了多种函数和工具,能够快速高效地进行字符串匹配和搜索。

安装和导入TheFuzz库

可以使用pip安装TheFuzz库:

pip install python-Levenshtein
pip install fuzzywuzzy

导入TheFuzz库:

from fuzzywuzzy import fuzz
from fuzzywuzzy import process

TheFuzz库常用函数

1. 字符串相似度计算

TheFuzz库提供了fuzz.ratio()函数用于计算两个字符串的相似度,返回一个百分比值表示匹配程度,范围在0到100之间,值越高表示越相似。

str1 = "apple"
str2 = "aple"
similarity_ratio = fuzz.ratio(str1, str2)
print(similarity_ratio)  # 输出 80,表示相似度为80%

2. 模糊匹配搜索

TheFuzz库的process.extract()函数用于在一组字符串中进行模糊匹配搜索,并返回匹配度最高的结果。

choices = ["apple", "banana", "orange", "grape"]
query = "app"
best_match = process.extractOne(query, choices)
print(best_match)  # 输出 ('apple', 90),表示匹配度最高的结果为'apple',匹配度为90%

TheFuzz库算法原理

TheFuzz库基于Levenshtein距离、Jaro-Winkler距离等算法实现字符串相似度计算和模糊匹配。Levenshtein距离是衡量两个字符串相似程度的一种方法,它表示从一个字符串转换到另一个字符串所需的最少编辑操作次数。Jaro-Winkler距离是一种字符串相似度度量方法,考虑了字符的相对位置和匹配度,适用于较短的字符串。

实际应用示例

示例一:字符串相似度计算

from fuzzywuzzy import fuzz

# 计算字符串相似度
similarity_ratio = fuzz.ratio("apple", "aple")
print(similarity_ratio)  # 输出 80,表示相似度为80%

在这个示例中,使用TheFuzz库的fuzz.ratio()函数计算了字符串"apple"和"aple"的相似度,得到的相似度值为80%。

示例二:模糊匹配搜索

from fuzzywuzzy import process

# 准备选择列表和查询字符串
choices = ["apple", "banana", "orange", "grape"]
query = "app"

# 进行模糊匹配搜索
best_match = process.extractOne(query, choices)
print(best_match)  # 输出 ('apple', 90),表示匹配度最高的结果为'apple',匹配度为90%

在这个示例中,使用TheFuzz库的process.extractOne()函数在选择列表中进行模糊匹配搜索,并返回匹配度最高的结果。

示例三:批量字符串匹配

from fuzzywuzzy import fuzz

# 准备字符串列表
strings = ["apple", "aple", "banana", "orange", "grape"]

# 批量计算相似度
similarities = []
for string1 in strings:
    for string2 in strings:
        similarity_ratio = fuzz.ratio(string1, string2)
        similarities.append((string1, string2, similarity_ratio))

# 输出相似度结果
for similarity in similarities:
    print(f"字符串 '{similarity[0]}' 和 '{similarity[1]}' 的相似度为 {similarity[2]}%")

在这个示例中,批量计算了字符串列表中各个字符串之间的相似度,并输出了相似度结果。

示例四:数据清洗与字符串匹配

from fuzzywuzzy import fuzz
from fuzzywuzzy import process

# 原始数据
data = ["apple", "apl", "appl", "banana", "orange", "grape"]

# 清洗数据并进行字符串匹配
cleaned_data = [item for item in data if len(item) >= 4]  # 清洗出长度大于等于4的字符串
query = "appl"
best_match = process.extractOne(query, cleaned_data)
print(best_match)  # 输出 ('appl', 100),表示匹配度最高的结果为'appl',匹配度为100%

这个示例展示了如何在数据清洗过程中使用TheFuzz库进行字符串匹配。首先对原始数据进行清洗,只保留长度大于等于4的字符串,然后使用process.extractOne()函数进行字符串匹配搜索,得到匹配度最高的结果。

示例五:多种匹配算法比较

from fuzzywuzzy import fuzz

str1 = "apple"
str2 = "aple"
str3 = "aplee"

# 使用不同的匹配算法进行比较
ratio_ratio = fuzz.ratio(str1, str2)
partial_ratio = fuzz.partial_ratio(str1, str3)
token_sort_ratio = fuzz.token_sort_ratio(str1, str2)
token_set_ratio = fuzz.token_set_ratio(str1, str3)

# 输出比较结果
print("使用ratio算法比较:", ratio_ratio)  # 输出 80,表示相似度为80%
print("使用partial_ratio算法比较:", partial_ratio)  # 输出 80,表示相似度为80%
print("使用token_sort_ratio算法比较:", token_sort_ratio)  # 输出 80,表示相似度为80%
print("使用token_set_ratio算法比较:", token_set_ratio)  # 输出 100,表示相似度为100%

这个示例比较了不同的匹配算法在字符串比较中的效果。使用了fuzz.ratio()fuzz.partial_ratio()fuzz.token_sort_ratio()fuzz.token_set_ratio()等函数进行比较,展示了它们在不同情况下的匹配结果。

总结

通过本文的介绍,可以了解到Python中TheFuzz库的功能和用法,包括字符串相似度计算、模糊匹配搜索等功能。TheFuzz库在文本匹配、模糊搜索、数据清洗等场景中有着广泛的应用,能够提高工作效率和准确性。

如果你觉得文章还不错,请大家 点赞、分享、留言 ,因为这将是我持续输出更多优质文章的最强动力!

更多Python学习内容:ipengtao.com


如果想要系统学习Python、Python问题咨询,或者考虑做一些工作以外的副业,都可以扫描二维码添加微信,围观朋友圈一起交流学习。

02c35397b0ff0e33627ab024deafc322.gif

我们还为大家准备了Python资料和副业项目合集,感兴趣的小伙伴快来找我领取一起交流学习哦!

71085597c23927e86191150c7e1f5417.jpeg

往期推荐

Python 中的 iter() 函数:迭代器的生成工具

Python 中的 isinstance() 函数:类型检查的利器

Python 中的 sorted() 函数:排序的利器

Python 中的 hash() 函数:哈希值的奥秘

Python 中的 slice() 函数:切片的利器

Python 的 tuple() 函数:创建不可变序列

点击下方“阅读原文”查看更多

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值