You need to enable JavaScript to run this app. 如何用Python的Levenshtein Distance实现Excel数据集名称字段错误修正
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python的Levenshtein Distance实现Excel数据集名称字段错误修正

拼写错误名称自动匹配替换方案

前置准备

首先将正确数据集的names字段去重,生成正确名称候选项池,两份数据集的名称字段建议先做统一预处理:转小写、去除首尾空格、特殊符号,根据你的错误场景还可选择加入易混字符替换规则(比如把0替换为o、1替换为l)。


方案1:基于nltk.edit_distance的自定义实现

适合不想额外安装依赖的场景,核心逻辑是给每个错误名称匹配编辑距离最小的正确名称,加阈值过滤避免误匹配:

import pandas as pd
from nltk.edit_distance import edit_distance

# 读取两份数据集
df_correct = pd.read_excel("正确数据集路径.xlsx")
df_error = pd.read_excel("错误数据集路径.xlsx")

# 生成去重的正确名称候选项池
correct_names = df_correct['names'].drop_duplicates().tolist()

# 名称标准化函数,可根据业务调整规则
def clean_name(s):
    s = str(s).lower().strip()
    # 替换易混字符,没有对应错误可以删除这行
    s = s.replace('0', 'o').replace('1', 'l').replace(r'[^\w\s]', '')
    return s

correct_clean = [clean_name(name) for name in correct_names]

# 匹配函数,threshold为编辑距离阈值,可根据名称长度调整
def match_correct_name(error_name, threshold=2):
    error_clean = clean_name(error_name)
    # 计算和所有正确名称的编辑距离
    distance_list = [edit_distance(error_clean, c_name) for c_name in correct_clean]
    min_dist = min(distance_list)
    # 距离小于阈值才替换,否则返回原名称留待人工校验
    if min_dist <= threshold:
        return correct_names[distance_list.index(min_dist)]
    return error_name

# 应用到错误数据集
df_error['fixed_names'] = df_error['names'].apply(match_correct_name)
  • 注意:如果正确名称量级超过1万,遍历计算效率会很低,可以提前按首字母/前缀分组缩小候选池,提升匹配速度。

方案2:基于fuzzywuzzy的优化实现(更推荐)

这个库底层基于编辑距离,但优化了不同位置字符错误的权重,支持局部匹配,准确率比手写编辑距离高很多,也不需要做复杂的预处理:

  • 先安装依赖:pip install fuzzywuzzy python-Levenshtein,其中python-Levenshtein是C实现的加速包,可选安装
  • 代码示例:
from fuzzywuzzy import process

# 直接复用上面生成的correct_names正确候选项池
def match_fuzzy(error_name, threshold=85):
    # 直接返回匹配度最高的结果和得分,得分范围0-100
    match_res, score = process.extractOne(error_name, correct_names)
    return match_res if score >= threshold else error_name

df_error['fixed_names'] = df_error['names'].apply(match_fuzzy)
  • 优势:你提到的Adidas误写为Addas、XY Company误写为XY C0mpany这类单字符错误,匹配得分都会在90以上,不会出现误匹配,阈值80-90即可覆盖绝大多数常见拼写错误场景。

后续优化建议

  • 匹配完成后可以把原错误名称、修正后名称、匹配得分/编辑距离单独导出一张表,人工校验得分刚好卡在阈值附近的结果,避免错误替换
  • 如果名称里有大量通用后缀(比如Company、Co.、Ltd.),可以提前去掉后缀再匹配,进一步提升准确率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 02:30:03