当前位置: 首页 > news >正文

自然语言处理关键库解析和使用方法- FuzzyWuzzy

FuzzyWuzzy 是一个用于模糊字符串匹配的 Python 库,基于 Levenshtein 距离算法计算字符串差异。它擅长处理拼写错误、缩写或格式不一的文本,适用于数据清洗、搜索匹配等场景。


技术原理:Levenshtein 距离

1. 算法公式

相似度计算公式为:
Similarity=(1−编辑距离max⁡(len(s1),len(s2)))×100\text{Similarity} = \left(1 - \frac{\text{编辑距离}}{\max(\text{len}(s1), \text{len}(s2))}\right) \times 100 Similarity=(1max(len(s1),len(s2))编辑距离)×100

  • 编辑距离:将字符串 A 转换为 B 的最小操作次数 。
  • 示例
    • s1 = "kitten"s2 = "sitting"
      编辑距离 = 3(替换 k→s, 替换 e→i, 插入 g)
      相似度 = $ (1 - \frac{3}{7}) \times 100 \approx 57 $ .
2. 优化策略
  • 加速库python-Levenshtein 用 C 实现算法,速度提升 4-10 倍 。
  • 预处理:默认移除非字母数字字符(如标点),可通过 full_process=False 禁用 .

常见误解澄清

  1. 为何 ("cow", "cowboy")partial_ratio 是 100?
    → 因 "cow""cowboy" 的子串,满足部分匹配条件 。

  2. 得分相同如何取舍?
    process.extractOne 默认返回第一个最高分项,需结合业务逻辑二次校验 .


以下是详细使用方法和示例:


安装

pip install fuzzywuzzy
# 提升速度(推荐安装依赖库)
pip install python-Levenshtein

核心模块及方法

1. fuzz 模块:计算字符串相似度
  • ratio: 全字符串匹配(严格比对)。

    from fuzzywuzzy import fuzz
    print(fuzz.ratio("apple", "appel"))  # 输出: 91 
    
  • partial_ratio: 部分匹配(子串匹配),忽略多余字符。

    print(fuzz.partial_ratio("apple", "apple pie"))  # 输出: 100
    
  • token_sort_ratio: 忽略单词顺序,按分词排序后匹配。

    print(fuzz.token_sort_ratio("apple pie", "pie apple"))  # 输出: 100
    
  • token_set_ratio: 忽略重复词和顺序,按词集匹配。

    print(fuzz.token_set_ratio("apple", "apple apple pie"))  # 输出: 100
    
2. process 模块:从候选列表中匹配最佳项
  • extract: 返回匹配项及相似度列表。

    from fuzzywuzzy import process
    choices = ["apple", "banana", "orange"]
    matches = process.extract("appl", choices, limit=2)
    print(matches)  # 输出: [('apple', 90), ('apple', 90)]
    
  • extractOne: 返回最佳匹配项(元组格式)。

    best_match = process.extractOne("appl", choices)
    print(best_match)  # 输出: ('apple', 90) 
    
  • dedupe: 去除重复项(保留最相似项)。

    deduped = process.dedupe(["app", "apple", "appel"])
    print(list(deduped))  # 输出: ['appel'] 
    

实战示例

示例 1:拼写检查
correct = "fuzzywuzzy"
user_input = "fuzzuwuzzy"
if fuzz.ratio(correct, user_input) >= 80:print("拼写正确!")
else:print(f"建议纠正为: {correct}")  # 输出: 拼写正确! 
示例 2:模糊搜索数据
data = ["北京市", "广西壮族自治区", "新疆维吾尔自治区"]
query = "广西"
best = process.extractOne(query, data)
print(f"最佳匹配: {best[0]}")  # 输出: 广西壮族自治区 
示例 3:Pandas 数据清洗
import pandas as pd
df = pd.DataFrame({"公司": ["Ptyhon Ltd", "PyThon Inc"]})
correct = "Python"
# 清洗拼写错误的公司名
df["清洗后"] = df["公司"].apply(lambda x: correct if fuzz.partial_ratio(x, correct) >= 80 else x
)
print(df)
# 输出:
#          公司        清洗后
# 0  Ptyhon Ltd    Python
# 1  PyThon Inc    Python 

注意事项

  1. 加速性能:安装 python-Levenshtein 可提升匹配速度 4-10 倍,否则会警告并使用纯 Python 慢速实现 。
  2. 阈值选择:相似度 ≥80 通常表示高质量匹配,可根据场景调整 。
  3. 算法选择
    • 需严格匹配时用 ratio
    • 处理子串或多余字符用 partial_ratio
    • 忽略词序用 token_sort_ratiotoken_set_ratio
  4. 特殊字符:默认会忽略非字母数字字符(如标点),可通过 full_process=False 禁用 。

官方文档参考:FuzzyWuzzy GitHub

http://www.dtcms.com/a/327971.html

相关文章:

  • kafka初步介绍
  • mysql登录失败 ERROR1698
  • Java零基础笔记15(Java编程核心:Stream流、方法中的可变参数、Collections工具类)
  • Ceph对象池详解
  • 数据分析专栏记录之 -基础数学与统计知识
  • js高阶-总结精华版
  • 《软件工程导论》实验报告一 软件工程文档
  • 跨界重构规则方法论
  • AI重构Java开发:飞算JavaAI如何实现效率与质量的双重突破?
  • pcl 按比例去除点云的噪点
  • 自动化运维实验
  • Baumer高防护相机如何通过YoloV8深度学习模型实现纸箱的实时检测计数(C#代码UI界面版)
  • 备份单表的方法
  • 工业相机镜头选型
  • HTTPS加密与私有CA配置全攻略
  • AI智能体平台大爆发,2025AI智能体平台TOP30
  • 【Unity3D实例-功能-下蹲】角色下蹲(二)穿越隧道
  • Python爬虫获取淘宝店铺所有商品信息API接口
  • IoTDB与传统数据库的核心区别
  • 【Linux系列】服务器 IP 地址查询
  • OpenBMC中C++单例模式架构与实现全解析
  • 站在Vue的角度,对比鸿蒙开发中的递归渲染
  • 线缆桥架、管道设计规范详解
  • 异步并发×编译性能:Dart爬虫的实战突围
  • USB 2.0 3.0 插拔 ftrace 详解
  • MySQL相关概念和易错知识点(5)(索引、事务、MVCC)
  • LintCode第1526-N叉树的前序遍历
  • MongoDB 入门指南(一):从 0 到 1 学会文档数据库
  • QT之问题解决记录1:上下位机通信中断而不自知
  • react+redux+toolkit来实现公共数据的处理-对比vuex