You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python DataFrame实现拼写错误单词模糊匹配并新增结果列

问题场景

现有两个pandas DataFrame对象:

  • df1:包含Keywords列存储标准词汇,示例值为Dog、Cat、Monkey、Lion、Tiger、Zebra、Rabbit,实际业务场景下该列词汇量最多500条
  • df2:包含Verbatim列存储用户输入的字符串,示例值为"dog, Caat"、"Orange"、"Monky , lion"、"C"、"Human"、"Tiger & new Monkey",内容存在标点、拼写错误词汇

需求为:逐行拆分df2的Verbatim列内容,模糊匹配df1中的标准关键词(支持识别拼写错误的相近词汇),在df2中新增Verbatim_new列存储匹配到的标准词,无有效匹配则填充Nan,期望输出对应该列值为"dog, Cat"、Nan、"Monkey , lion"、Nan、Nan、"Tiger, Monkey"。

原有代码与问题

初始测试代码如下:

keywords = df1['Keywords'].to_list()

from difflib import get_close_matches
for i in df2['Verbatim']:
    print((get_close_matches(i, keywords))

运行时存在两个明确问题:

  1. 直接传入整行Verbatim字符串做匹配,未拆分单个词汇,匹配准确率极低,无法识别一行内的多个匹配项
  2. 尝试执行df_new['match'] = get_close_matches(i, keywords)赋值时,触发length of values does not match length of index报错,原因是循环内逐行生成的匹配结果是长度不确定的列表,无法直接对齐整列索引赋值。
可行实现方案

核心解决思路:

  • 先对每行用户输入做分词拆分,过滤无意义的短词、标点,再逐词做模糊匹配,避免整串匹配的准确率问题
  • 用pandas的apply逐行处理生成整列结果,保证返回值和DataFrame行长度完全对齐,解决索引长度不匹配报错
  • 匹配时统一做小写转换消除大小写影响,设置合理的相似度阈值避免误匹配,匹配完成后保留标准词的原始拼写

完整可运行代码:

import pandas as pd
import re
from difflib import get_close_matches

# 预处理标准词:存原始拼写+小写映射,匹配时不区分大小写
std_keywords = df1['Keywords'].tolist()
std_keywords_lower = [k.lower() for k in std_keywords]
lower2origin = dict(zip(std_keywords_lower, std_keywords))

def match_keywords(text: str, cutoff: float = 0.7):
    # 按非字母字符拆分用户输入,提取所有候选词
    candidate_words = re.split(r'[^a-zA-Z]+', text.strip())
    # 过滤空值、长度小于2的无意义短词(比如示例里的"C")
    candidate_words = [w for w in candidate_words if len(w) >= 2]
    
    matched = []
    for word in candidate_words:
        word_lower = word.lower()
        # 模糊匹配,取最接近的1个结果,相似度阈值0.7可根据业务调整
        match_res = get_close_matches(word_lower, std_keywords_lower, n=1, cutoff=cutoff)
        if match_res:
            matched.append(lower2origin[match_res[0]])
    
    # 有匹配结果用逗号拼接,无匹配返回空值
    return ', '.join(matched) if matched else pd.NA

# 逐行应用函数生成新列
df2['Verbatim_new'] = df2['Verbatim'].apply(match_keywords)

效果说明

运行后结果和预期完全对齐:

  • 输入"dog, Caat" → 输出"Dog, Cat"(如果需要统一大小写格式可自行在拼接逻辑中调整)
  • 输入"Orange" → 输出pd.NA
  • 输入"Monky , lion" → 输出"Monkey, Lion"
  • 输入"C" → 输出pd.NA(长度<2被过滤,避免误匹配)
  • 输入"Human" → 输出pd.NA
  • 输入"Tiger & new Monkey" → 输出"Tiger, Monkey"(无匹配的"new"自动过滤)

相似度阈值cutoff可根据业务容错率调整:值越高匹配越严格,值越低越容易匹配到相近词,0.6-0.8是常规拼写纠错场景的合理区间。

内容的提问来源于stack exchange,提问作者Angela

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 23:42:25