模糊字符串匹配技术是一种在字符串不完全匹配时,仍能识别相似字符串的方法。这种技术在搜索引擎中非常常见,它允许用户即使拼写错误或输入部分单词,也能找到正确的单词。模糊字符串匹配算法不仅仅比较两个字符串是否相等,而是量化两个字符串之间的相似度,通常使用一种称为“编辑距离”的距离度量来实现。编辑距离通过确定将一个字符串转换成另一个字符串所需的最小更改次数来衡量两个字符串的相似度。有多种编辑距离可以用于此目的,如Levenshtein距离、Hamming距离、Jaro距离等。
在Python中,模糊字符串匹配技术可以通过多种方式实现。本文将重点介绍FuzzyWuzzy库,这是一个简化了近似字符串匹配识别过程的库,使得数据处理更加高效。将学习到实用的应用和示例,以增强编程技能。
Levenshtein距离是一种衡量两个字符串之间差异的方法,它通过计算将一个字符串转换成另一个字符串所需的最少编辑操作次数来实现。在Python中,可以使用'Levenshtein'包来计算Levenshtein距离。以下是一个简单的示例:
import Levenshtein as lev
Str1 = "Back"
Str2 = "Book"
distance = lev.distance(Str1.lower(), Str2.lower())
print(distance)
上述代码将输出2,意味着通过两次替换操作可以将字符串1转换成字符串2。
FuzzyWuzzy是一个Python包,用于字符串匹配。可以通过以下命令安装该包:
pip install fuzzywuzzy
FuzzyWuzzy库提供了一个ratio函数,用于计算两个序列之间的Levenshtein距离相似度比率。以下是一个示例:
from fuzzywuzzy import fuzz
Str1 = "Back"
Str2 = "Book"
ratio = fuzz.ratio(Str1.lower(), Str2.lower())
print(ratio)
上述代码的输出为50,这是因为Levenshtein比率是通过将Levenshtein距离除以字符串1和字符串2长度的最大值来计算的。
Partial Ratio用于执行子字符串匹配。它取最短的字符串,并将其与相同长度的所有子字符串进行比较。以下是一个示例:
from fuzzywuzzy import fuzz
Str1 = "My name is Ali"
Str2 = "My name is Ali Abdaal"
print(fuzz.partial_ratio(Str1.lower(), Str2.lower()))
上述代码的输出为100,因为partial_ratio()只检查任一字符串是否为另一字符串的子字符串。
Token Sort Ratio是一种在模糊字符串匹配中使用的方法,它通过将字符串分词、预处理(转换为小写并去除标点符号),然后按字母顺序排序并连接在一起,之后计算Levenshtein距离相似度比率。以下是一个示例:
from fuzzywuzzy import fuzz
Str1 = "My name is Ali"
Str2 = "Ali is my name"
print(fuzz.token_sort_ratio(Str1, Str2))
上述代码的输出为100,因为token sort ratio在排序字符串后找到,因此原始单词的顺序并不重要。
Token Set Ratio执行集合操作,取出共同的词汇,而不仅仅是分词、排序然后重新拼接词汇。重复的词汇或相同的重复词汇不重要。以下是一个示例:
from fuzzywuzzy import fuzz
Str1 = "My name is Ali"
Str2 = "Ali is my name name"
print(fuzz.token_sort_ratio(Str1, Str2))
print(fuzz.token_set_ratio(Str1, Str2))
from fuzzywuzzy import process
query = 'My name is Ali'
choices = ['My name Ali', 'My name is Ali', 'My Ali']
# 按分数排序获取匹配列表,默认限制为5
process.extract(query, choices)
process.extractOne(query, choices)