基于Python第三方模块fuzzywuzzy实现字符串匹配和相似度比较
文章目录
一、引言
fuzzywuzzy 是一个强大的 Python 库,专门用于执行模糊字符串匹配和相似度比较。由 SeatGeek 开发并开源,它基于 Levenshtein 距离(编辑距离)算法,能够处理字符串之间的拼写错误、格式差异以及部分匹配等问题。fuzzywuzzy 在数据清洗、文本匹配、搜索引擎优化等场景中具有广泛应用。
fuzzywuzzy 的项目地址:GitHub
二、安装
fuzzywuzzy 可以通过 pip 进行安装。在命令行中输入以下指令:
pip install fuzzywuzzy
为了提高匹配速度,可以安装 python-Levenshtein
库:
pip install fuzzywuzzy[speedup]
三、核心模块与功能
fuzzywuzzy 库主要包含两个模块:fuzz
和 process
。
- fuzz 模块:主要用于计算两个字符串之间的相似度。
- process 模块:主要用于在一组字符串中查找与给定字符串最相似的选项。
1. fuzz 模块的主要函数
fuzz.ratio(s1, s2):计算两个字符串的相似度,返回一个介于 0 和 100 之间的数值。数值越高,表示两个字符串越相似。
from fuzzywuzzy import fuzz
similarity = fuzz.ratio("apple", "appel")
print(similarity) # 输出结果为 91
fuzz.partial_ratio(s1, s2):计算两个字符串的部分匹配相似度,不考虑字符串的顺序,而是仅匹配部分。返回一个介于 0 和 100 之间的数值。
similarity = fuzz.partial_ratio("apple", "appel")
print(similarity) # 输出结果为 100
fuzz.token_sort_ratio(s1, s2):对两个字符串中的单词进行排序,然后计算排序后的字符串的相似度。它不考虑单词的顺序。
similarity = fuzz.token_sort_ratio("all cat dog", "dog cat bug")
print(similarity) # 输出结果为 73
fuzz.token_set_ratio(s1, s2):计算两个字符串的相似度,将它们视为单词集合,不考虑单词的顺序和重复。
similarity = fuzz.token_set_ratio("all cat dog", "dog cat all")
print(similarity) # 输出结果为 100
2. process 模块的主要函数
process.extract(query, choices, limit=None):在给定选择集合 choices
中对字符串 query
进行模糊匹配,并返回匹配结果和相似度得分的列表。
from fuzzywuzzy import process
choices = ["apple", "banana", "orange", "grape"]
matches = process.extract("appl", choices, limit=2)
print(matches) # 输出结果为 [("apple", 100), ("apple", 100)]
process.extractOne(query, choices):返回与 query
最匹配的单个选项及其相似度得分。
best_match = process.extractOne("hello", ["hello world", "hello", "world"])
print(best_match) # 输出结果为 ('hello', 100)
process.dedupe(seq):去除序列 seq
中的重复项,基于模糊匹配。
data = ["apple", "aple", "banana", "bananna"]
cleaned_data = list(set(process.dedupe(data)))
print(cleaned_data) # 输出结果为 ["apple", "banana"]
四、应用场景
- 数据清洗:在数据清洗过程中,fuzzywuzzy 可以帮助匹配和合并相似的字符串,例如处理用户输入的地址信息。
- 文本相似度分析:在文本分析中,fuzzywuzzy 可以用于检测相似的文档或句子,帮助识别重复内容。
- 自动补全和建议:在搜索引擎或输入框中,fuzzywuzzy 可以用于提供自动补全和建议,提高用户体验。
- 搜索引擎优化:在网站开发中,可以利用 fuzzywuzzy 库对用户输入的搜索关键词进行模糊匹配,提高搜索引擎的友好度和搜索结果的质量。
五、性能与优化
fuzzywuzzy 对大型数据集的性能比较低,可以结合使用 Pandas、numpy 等数据科学模块实现模糊匹配,以更方便地处理大量数据和进行数据分析。Pandas 提供了灵活的数据结构和功能,可以帮助简化模糊匹配的过程,并且可以轻松地与其他数据处理和分析工具集成。
作者:袁袁袁袁满