Python Fuzzywuzzy库基本函数及模糊字符串匹配应用实战

 更新时间:2023年12月28日 09:37:34   作者:涛哥聊Python  
fuzzywuzzy 是一个用于模糊字符串匹配的 Python 库,它基于编辑距离算法,提供了多个函数来比较字符串之间的相似性,在实际开发中,字符串匹配是一项常见但具有挑战性的任务,用户可能犯拼写错误,使用缩写或者输入同义词,因此,我们需要一种方法来处理这些情况

安装和基本用法

1 安装 fuzzywuzzy

pip install fuzzywuzzy

2 基本用法

from fuzzywuzzy import fuzz

str1 = "Python fuzzywuzzy"
str2 = "Python fuzzywuzzy library"

# 使用 fuzz.ratio 进行基本比较
ratio = fuzz.ratio(str1, str2)
print(f"Similarity Ratio: {ratio}%")

模糊匹配算法

1 Levenshtein 距离

Levenshtein 距离是一种衡量两个字符串相似程度的算法,它通过插入、删除和替换字符的操作次数来计算相似性。

2 模糊匹配的原理和优势

模糊匹配允许我们在一定程度上容忍输入字符串之间的差异,提高了匹配的灵活性。

基本函数介绍

fuzz.ratio函数详解

fuzz.ratio 是 fuzzywuzzy 库中用于进行基于 Levenshtein 距离的简单字符串比较的函数。这个函数返回一个表示相似程度的百分比,范围从0到100,值越高表示字符串越相似。

参数

s1, s2: 要比较的两个字符串。

示例代码

from fuzzywuzzy import fuzz

str1 = "Python fuzzywuzzy"
str2 = "Python fuzzywuzzy library"

# 使用 fuzz.ratio 进行基本比较
ratio = fuzz.ratio(str1, str2)
print(f"Similarity Ratio: {ratio}%")

解释

fuzz.ratio 使用了 Levenshtein 距离算法,该算法测量了通过插入、删除和替换字符来将一个字符串转换为另一个字符串的操作次数。

返回的百分比表示两个字符串之间的相似性,值越高表示相似性越大。

在示例中,str1 和 str2 的相似性为多少百分比。

应用场景

  • 用于快速比较两个字符串的相似性,特别是在拼写错误的情况下。
  • 可用于拼写检查,判断用户输入是否接近正确的拼写。

注意事项

fuzz.ratio 是一种简单但有效的比较方法,适用于基本的字符串相似性比较。

在处理更复杂的场景时,可以考虑使用其他函数,如 fuzz.partial_ratiofuzz.token_sort_ratio 和 fuzz.token_set_ratio,以满足不同需求。

fuzz.partial_ratio函数详解

fuzz.partial_ratio 是 fuzzywuzzy 库中用于部分字符串匹配的函数。相比于 fuzz.ratiofuzz.partial_ratio 更容忍字符串中的部分相似性,适用于模糊搜索场景。

参数

  • s1, s2: 要比较的两个字符串。

示例代码

from fuzzywuzzy import fuzz

query = "Python fuzzywuzzy"
data = ["Python fuzzywuzzy library", "Python data science", "Java programming"]

# 使用 fuzz.partial_ratio 进行部分字符串匹配
results = [(item, fuzz.partial_ratio(query, item)) for item in data]
sorted_results = sorted(results, key=lambda x: x[1], reverse=True)

print("Fuzzy Search Results:")
for result, similarity in sorted_results:
    print(f"{result} - Similarity: {similarity}%")

解释

  • fuzz.partial_ratio 允许部分字符串匹配,通过寻找较长字符串中的子字符串与较短字符串的最佳匹配来计算相似性。

  • 返回的百分比表示两个字符串之间的相似性,值越高表示相似性越大。

  • 在示例中,通过对查询字符串 query 与数据集中的每个字符串进行部分匹配,得到了相似性排名。

应用场景

  • 适用于模糊搜索场景,其中用户输入的字符串可能是目标字符串的一部分。

  • 在处理大型数据集时,可以通过模糊搜索找到与查询字符串部分匹配的项。

注意事项

  • fuzz.partial_ratio 更适合处理用户输入的情况,其中用户可能只记得字符串的一部分。

  • 结果按相似性排序,可以根据需要进行进一步处理,例如只返回相似性超过一定阈值的结果。

fuzz.token_sort_ratio 和 fuzz.token_set_ratio函数详解

fuzz.token_sort_ratio 和 fuzz.token_set_ratio 是 fuzzywuzzy 库中用于处理字符串中单词排序和集合的函数。它们适用于处理同义词和词序不同的情况。

fuzz.token_sort_ratio

参数

s1, s2: 要比较的两个字符串。

示例代码

from fuzzywuzzy import fuzz

str1 = "fuzzywuzzy python library"
str2 = "python library fuzzywuzzy"

# 使用 fuzz.token_sort_ratio 进行基于排序的字符串比较
ratio = fuzz.token_sort_ratio(str1, str2)
print(f"Similarity Ratio (Token Sort): {ratio}%")
  • 解释

fuzz.token_sort_ratio 考虑了字符串中单词的排序,它首先对单词进行排序,然后计算排序后的字符串的相似性。

返回的百分比表示两个字符串之间的相似性,值越高表示相似性越大。

  • 应用场景

适用于处理字符串中单词顺序不同的情况,例如同义词的不同排列。

  •  注意事项

在处理同义词时,fuzz.token_sort_ratio 提供了一种更宽容的比较方式,忽略了单词的具体顺序。

fuzz.token_set_ratio

 参数

s1, s2: 要比较的两个字符串。

示例代码

from fuzzywuzzy import fuzz

str1 = "python fuzzywuzzy library"
str2 = "fuzzywuzzy python library"

# 使用 fuzz.token_set_ratio 进行基于集合的字符串比较
ratio = fuzz.token_set_ratio(str1, str2)
print(f"Similarity Ratio (Token Set): {ratio}%")

解释

fuzz.token_set_ratio 考虑了字符串中单词的集合,它计算两个字符串之间共享的单词集合的相似性。

返回的百分比表示两个字符串之间的相似性,值越高表示相似性越大。

应用场景

适用于处理字符串中同义词,即使单词的顺序和数量不同也能够识别相似性。

注意事项

fuzz.token_set_ratio 是一种更灵活的比较方式,允许字符串中包含不同数量的单词,只要它们属于共享的单词集合。

示例代码

1 拼写检查

from fuzzywuzzy import fuzz

correct_spelling = "fuzzywuzzy"
user_input = "fuzzuwuzzy"

# 拼写检查
ratio = fuzz.ratio(correct_spelling, user_input)
if ratio >= 80:
    print("Correct spelling!")
else:
    print("Did you mean:", correct_spelling)

2 模糊搜索

from fuzzywuzzy import fuzz

query = "Python fuzzywuzzy"
data = ["Python fuzzywuzzy library", "Python data science", "Java programming"]

# 模糊搜索
results = [(item, fuzz.partial_ratio(query, item)) for item in data]
sorted_results = sorted(results, key=lambda x: x[1], reverse=True)

print("Fuzzy Search Results:")
for result, similarity in sorted_results:
    print(f"{result} - Similarity: {similarity}%")

3 同义词匹配

from fuzzywuzzy import fuzz

reference_text = "machine learning"
user_input = "AI and ML"

# 同义词匹配
ratio = fuzz.token_set_ratio(reference_text, user_input)
if ratio >= 80:
    print("Match found!")
else:
    print("No exact match, but similarities found.")

4 数据清洗

from fuzzywuzzy import fuzz

correct_value = "Python"
data = ["Ptyhon", "Pythoon", "Java", "Python programming"]

# 数据清洗
cleaned_data = [item for item in data if fuzz.ratio(correct_value, item) >= 80]

print("Cleaned Data:", cleaned_data)

性能优化和注意事项

1 性能考虑

fuzzywuzzy 库在处理大型数据集时可能会导致性能问题,建议谨慎使用。

2 缓存匹配结果

为了提高性能,可以考虑缓存匹配结果,避免重复计算。

总结

Python的fuzzywuzzy库为字符串匹配提供了强大的工具,通过基于Levenshtein距离的算法,它在处理拼写错误、同义词、词序不同等情况时展现出色的表现。在本文中,深入了解了库中的关键函数,包括fuzz.ratiofuzz.partial_ratiofuzz.token_sort_ratiofuzz.token_set_ratio

fuzz.ratio简单而直观,适用于基本的字符串相似性比较,尤其在拼写检查中表现出色。而fuzz.partial_ratio允许部分字符串匹配,适用于模糊搜索,处理用户输入可能是目标字符串的一部分的情况。fuzz.token_sort_ratiofuzz.token_set_ratio则考虑了字符串中单词的排序和集合,分别适用于处理同义词和词序不同的场景。前者关注单词排序,适用于同义词的不同排列,而后者则处理字符串中同义词,即使单词的顺序和数量不同也能够识别相似性。除此之外,还介绍了库的性能优化和注意事项,强调在处理大型数据集时需谨慎使用,可以考虑缓存匹配结果以提高性能。

综合而言,fuzzywuzzy库为开发人员提供了灵活而高效的字符串匹配解决方案,可广泛应用于拼写检查、模糊搜索、同义词匹配和数据清洗等实际场景。通过巧妙地利用其不同函数,开发者可以根据具体需求选择合适的方法,提高字符串匹配的准确性和可靠性。

以上就是Python Fuzzywuzzy库模糊字符串匹配应用实战的详细内容,更多关于Python Fuzzywuzzy库的资料请关注脚本之家其它相关文章!

相关文章

  • python select.select模块通信全过程解析

    python select.select模块通信全过程解析

    这篇文章主要为大家解析了python select.select模块通信全过程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • 书单|人生苦短,你还不用python!

    书单|人生苦短,你还不用python!

    Python 诞生之初就被誉为最容易上手的编程语言。进入火热的 AI 人工智能时代后,它也逐渐取代 Java,成为编程界的头牌语言。下面这篇文章主要给大家总结介绍了一些关于python的书单,需要的朋友可以参考下。
    2017-12-12
  • 解决ImportError:cannot import name ‘Flatten‘ from ‘torch.nn‘问题

    解决ImportError:cannot import name ‘Flatten‘&nb

    这篇文章主要介绍了解决ImportError:cannot import name ‘Flatten‘ from ‘torch.nn‘问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • pytorch中[..., 0]的用法说明

    pytorch中[..., 0]的用法说明

    这篇文章主要介绍了pytorch中[..., 0]的用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • python进行debug操作实战训练

    python进行debug操作实战训练

    debug是编码是非常重要的调试技巧,通过在运行过程中设置断点,帮助开发人员更好的理解运行过程,下面这篇文章主要给大家介绍了关于python进行debug操作的相关资料,需要的朋友可以参考下
    2023-06-06
  • Python如何使用pymongo连接MongoDB数据库并进行相关操作

    Python如何使用pymongo连接MongoDB数据库并进行相关操作

    PyMongo是驱动程序,使python程序能够使用Mongodb数据库,使用python编写而成,下面这篇文章主要给大家介绍了关于Python如何使用pymongo连接MongoDB数据库并进行相关操作的相关资料,需要的朋友可以参考下
    2023-05-05
  • python导出requirements.txt的几种方法总结

    python导出requirements.txt的几种方法总结

    这篇文章主要介绍了python导出requirements.txt的几种方法总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Python使用CMD模块更优雅的运行脚本

    Python使用CMD模块更优雅的运行脚本

    这篇文章主要介绍了Python使用CMD模块更优雅的运行脚本的方法,实例分析了Python中cmd模块的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-05-05
  • python中os和sys模块的区别与常用方法总结

    python中os和sys模块的区别与常用方法总结

    这篇文章主要给大家介绍了关于python中os和sys模块的区别与常用方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧。
    2017-11-11
  • 使用keras实现孪生网络中的权值共享教程

    使用keras实现孪生网络中的权值共享教程

    这篇文章主要介绍了使用keras实现孪生网络中的权值共享教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06

最新评论