当前位置: 首页 > 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.lryc.cn/news/619163.html

相关文章:

  • 【3】Transformers快速入门:大语言模型LLM是啥?
  • 【4】Transformers快速入门:自然语言模型 vs 统计语言模型
  • GaussDB 数据库架构师修炼(十三)安全管理(2)-数据库权限管理
  • 如何构建PHP表单页面及验证相关原理(PHP基础)
  • 前后端分离项目中Spring MVC的请求执行流程
  • Kubernetes 资源管理全解析:从基础到企业级实践
  • TDengine 可观测性最佳实践
  • VBS 时间函数
  • 移动端网页调试实战,键盘弹出与视口错位问题的定位与优化
  • 需求跟踪矩阵是什么
  • mysql参数调优之 sync_binlog (二)
  • python技巧:控制转台的2个坑。
  • [激光原理与应用-253]:理论 - 几何光学 - 变焦镜头的组成原理及图示解析
  • 分布式事务Seata使用不当引发的全局锁问题
  • hashmap如何解决碰撞
  • JavaWeb从入门到精通!第二天!(Servlet)
  • 揭开Spectre漏洞的神秘面纱
  • 【后端】Spring @Resource和@Autowired的用法和区别
  • 告别数据孤岛!React 路由 3 种传参方法全解析
  • [Robotics_py] 定位滤波器 | 预测与更新 | 扩展卡尔曼滤波器(`EKF`)
  • 嵌入式学习 标准IO(完整版)
  • 浏览器面试题及详细答案 88道(12-22)
  • 【C#补全计划】StringBuilder
  • 【shell脚本编程】-4 shell脚本编写冒泡排序
  • C++11新增关键字和范围for循环
  • Flutter ExpansionPanel组件(可收缩的列表)
  • Qt中定时器介绍和使用
  • Gradle(二)Gradle的优势、项目结构介绍
  • python2操作neo4j
  • HTTPS加密与私有CA配置全攻略