📜  FuzzyWuzzy Python库(1)

📅  最后修改于: 2023-12-03 15:00:51.982000             🧑  作者: Mango

FuzzyWuzzy Python库

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。