python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python Fuzzywuzzy库

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

作者:涛哥聊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 更容忍字符串中的部分相似性,适用于模糊搜索场景。

参数

示例代码

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.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库的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文