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

相关文章:

  • 虚拟机一站式部署Claude Code 可视化UI界面
  • 豆包 + 蘑兔 AI:你的创作搭子
  • 运维学习Day22——Anisible自动化与基本使用
  • Kafka的一条消息的写入和读取过程原理介绍
  • kafka 消费者组的概念是什么?它是如何实现消息的点对点和发布/订阅模式?
  • PO、BO、VO、DTO、POJO、DAO、DO基本概念
  • 开源!!! htop移植到OpenHarmony
  • 【网络运维】Linux和自动化: Ansible基础实践
  • ncurses 6.5 交叉编译移植到OpenHarmomy
  • 【软考中级网络工程师】知识点之 IP QoS 技术
  • 小红书笔记信息获取_实在智能RPA源码解读
  • 【Redis优化深度剖析:如何通过读写分离提升系统性能】
  • 【限时分享:Hadoop+Spark+Vue技术栈电信客服数据分析系统完整实现方案
  • Rocky Linux 10 部署 Kafka 集群
  • Bevy渲染引擎核心技术深度解析:架构、体积雾与Meshlet渲染
  • AI-调查研究-49-大数据调研报告 发展历程:从概念诞生到多元化生态1997-2025
  • msyql中,max_connections和max_user_connections区别
  • 【DL】深层神经网络
  • 记录docker使用kong consul postgresql配置dns异常解决
  • SQL180 每类试卷得分前3名
  • 【Redis在在线表单提交防重复机制中的应用策略】
  • 移动端调用大模型详解
  • Web学习笔记5
  • [git] 重配ssh key | 解决冲突
  • 一键生成 Android 适配不同分辨率尺寸的图片
  • Wireshark专家模式定位网络故障:14种TCP异常深度解剖
  • Ceph存储池参数中pg_num和pgp_num的关系
  • 终端安全检测和防御技术
  • 华为发布AI推理新技术,降低对HBM内存依赖
  • 负载均衡详解