📅  最后修改于: 2023-12-03 15:00:51.982000             🧑  作者: Mango
FuzzyWuzzy是一个Python库,用于模糊字符串匹配。它可以比较两个字符串之间的相似度,并根据相似度评分来指定特定的操作。FuzzyWuzzy具有易于使用的API,使其成为字符串匹配的首选工具之一。
要安装FuzzyWuzzy库,请在命令行中输入以下内容:
pip install fuzzywuzzy
要使用FuzzyWuzzy库,请首先导入它:
from fuzzywuzzy import fuzz
调用fuzzywuzzy.fuzz
函数可以比较两个字符串之间的相似度。
>>> from fuzzywuzzy import fuzz
>>> fuzz.ratio("hello world", "hello world!")
97
>>> fuzz.ratio("hello", "world")
0
>>> fuzz.ratio("hello", "")
0
使用fuzzywuzzy.process
模块可以执行模糊字符串匹配。fuzzywuzzy.process
提供的extractOne
函数将尝试从一列字符串中提取最佳匹配项。我们可以将这个函数视为具有自动纠错功能的“查找”操作。
from fuzzywuzzy import process
choices = ["Atlanta Falcons", "New York Jets", "New York Giants", "Dallas Cowboys"]
print(process.extractOne("cowboys", choices))
输出:
('Dallas Cowboys', 90)
extractOne
返回匹配字符串及其分数,其范围为0(完全不同)到100(完全匹配)。
使用“选择器”时,需要根据传递的数据类型使用特定的选择器:
>>> from fuzzywuzzy import fuzz
>>> choices = ["Atlanta Falcons", "New York Jets", "New York Giants", "Dallas Cowboys"]
>>> process.extract("new york jets", choices, scorer=fuzz.token_sort_ratio)
[('New York Jets', 100), ('New York Giants', 46), ('Dallas Cowboys', 29), ('Atlanta Falcons', 11)]
在这个例子中,使用fuzz.token_sort_ratio
进行处理,返回的结果为按相似度从大到小排列的相似度列表。
一个非常有用的功能是部分比较。这允许我们比较两个字符串的部分,如前缀(前n个字符)、后缀(后n个字符)或第n到m个字符。
>>> from fuzzywuzzy import fuzz
>>> a = "Hello World"
>>> b = "Hello World, this is Harry."
>>> fuzz.partial_ratio(a.lower(), b.lower())
73
>>> fuzz.partial_ratio(a.lower(), b[0:11].lower())
100
在这个例子中,fuzz.partial_ratio
将返回两个字符串的部分比较相似度。在第二个例子中,只将前11个字符与第一个字符串进行比较。由于它们相同,分数为100。
在某些情况下,可能需要从实时数据流中过滤出特定的内容。在这种情况下,process.extractOne
的返回值为较低的分数时,我们可以暂时忽略它。
from fuzzywuzzy import process, fuzz
def filtered_results(user_input: str, results: list) -> list:
match_dict = {result: fuzz.token_sort_ratio(user_input, result) for result in results}
filtered_results = [k for k, v in match_dict.items() if v >= 50]
return filtered_results
choices = ["Atlanta Falcons", "New York Jets", "New York Giants", "Dallas Cowboys"]
print(filtered_results("new york jets", choices))
输出:
['New York Jets', 'New York Giants']
在这个例子中,我们使用了filtered_results
函数,并将匹配字典的分数过滤到了50分。这将过滤掉Atlanta Falcons与Dallas Cowboys,返回的结果仅包括New York Jets与New York Giants。