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

如何识别并修正数据列中的单词拼写变体?数据清洗技术问询

识别并修正数据列中的单词拼写变体方案

针对城市名称这类存在大量拼写变体的数据清洗问题,以下是几种实用的解决思路,结合你的示例数据集逐一演示:

一、预定义映射表(适合已知常见变体的场景)

如果已经收集到大部分错误拼写的变体,直接创建映射字典是最精准高效的方案,完全避免模糊匹配的误差。

import pandas as pd
import numpy as np

# 原始数据
place = ['PHIADELPHIA','PHIALDELPHIA','PHIDELPHIA','illinois','PHIELADELPHIA','PHIILADELPHIA','illinoi','PHILA','PHILA.','PHILAD','PHILADALPHIA','PHILADELPHIA','PHILADELAPHIA','PHILADELHIA','PHILADELHPIA','PHILADELLPHIA','PHILADELPHIA','PHILADELPH','PHILADELPHA','PHILADELPHAI','PHILADELPHI','PHILADELPHIA']
correct_place=[np.nan]*len(place)
df = pd.DataFrame(zip(place,correct_place), columns=["place", "correct_place"])

# 创建拼写映射表,覆盖已知变体,统一转大写规避大小写差异
place_mapping = {
    'PHIADELPHIA': 'PHILADELPHIA',
    'PHIALDELPHIA': 'PHILADELPHIA',
    'PHIDELPHIA': 'PHILADELPHIA',
    'PHIELADELPHIA': 'PHILADELPHIA',
    'PHIILADELPHIA': 'PHILADELPHIA',
    'PHILA': 'PHILADELPHIA',
    'PHILA.': 'PHILADELPHIA',
    'PHILAD': 'PHILADELPHIA',
    'PHILADALPHIA': 'PHILADELPHIA',
    'PHILADELAPHIA': 'PHILADELPHIA',
    'PHILADELHIA': 'PHILADELPHIA',
    'PHILADELHPIA': 'PHILADELPHIA',
    'PHILADELLPHIA': 'PHILADELPHIA',
    'PHILADELPH': 'PHILADELPHIA',
    'PHILADELPHA': 'PHILADELPHIA',
    'PHILADELPHAI': 'PHILADELPHIA',
    'PHILADELPHI': 'PHILADELPHIA',
    'ILLINOI': 'ILLINOIS',
    'ILLINOIS': 'ILLINOIS'
}

# 批量映射修正
df['correct_place'] = df['place'].str.upper().map(place_mapping)

print(df)

二、模糊匹配(适合未知变体的场景)

如果无法覆盖所有可能的拼写错误,用模糊匹配算法计算字符串相似度,自动匹配最接近的正确名称。常用工具是fuzzywuzzy,基于Levenshtein距离计算相似度。

  1. 先安装依赖:
pip install fuzzywuzzy python-Levenshtein
  1. 代码实现:
from fuzzywuzzy import process

# 正确的候选城市列表
valid_places = ['PHILADELPHIA', 'ILLINOIS']

# 定义匹配函数,设置相似度阈值(可根据需求调整)
def match_correct_place(place_str):
    place_upper = place_str.upper()
    match, score = process.extractOne(place_upper, valid_places)
    # 仅返回相似度≥80的结果,避免错误匹配
    return match if score >= 80 else np.nan

# 批量应用匹配函数
df['correct_place'] = df['place'].apply(match_correct_place)

print(df)

三、结合预处理提升匹配准确率

在匹配前做字符串标准化,能大幅降低无效差异的影响:

  • 统一大小写
  • 去除标点符号
  • 提前处理常见缩写

预处理+模糊匹配的组合示例:

import re

def preprocess_place(place_str):
    # 转大写
    processed = place_str.upper()
    # 移除所有非字母字符
    processed = re.sub(r'[^A-Z]', '', processed)
    # 提前替换已知缩写
    if processed == 'PHILA':
        return 'PHILADELPHIA'
    return processed

# 先预处理,再执行模糊匹配
df['processed_place'] = df['place'].apply(preprocess_place)
df['correct_place'] = df['processed_place'].apply(match_correct_place)

print(df)

四、收尾:批量验证与人工修正

无论用哪种方法,都建议做最后验证:

  • 统计correct_place中的空值,手动处理无法自动匹配的条目
  • 抽样检查匹配结果,修正阈值或补充映射表
  • 收集新发现的变体,迭代优化清洗逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:23:18