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

Pandas 处理自由文本拼写相似列值合并为大分组的方法咨询

文本拼写归一化实现方案

核心思路

优先通过出现频次筛选候选正确值,仅对低频值和更高频的候选值做编辑距离匹配,避免全量两两计算的性能损耗,完美适配你“高频值为正确拼写,相似低频值映射到高频值”的需求。

分步实现(Python)

  • 第一步:先做基础数据清洗,统计所有取值的出现频次
import pandas as pd
# 优先用C实现的Levenshtein库,比fuzzywuzzy纯Python实现快10~100倍
from Levenshtein import distance 

# 假设你的数据集存储在df变量中,目标列名为Diagnosis
# 先做基础清洗:统一转小写、去除首尾空格、特殊符号
df['Diagnosis'] = df['Diagnosis'].str.lower().str.strip()
# 统计所有唯一值的出现频次
value_counts = df['Diagnosis'].value_counts().reset_index()
value_counts.columns = ['text', 'count']
  • 第二步:设置合理的编辑距离阈值,建议按文本长度动态调整,比如长度<5的阈值设为1,长度≥5的设为2,避免短文本误匹配
  • 第三步:构建映射字典,仅低频值和比它频次更高的候选计算距离,大幅减少无效计算
# 按频次降序排列,排在前面的为优先级更高的正确值候选
sorted_texts = value_counts.sort_values('count', ascending=False)['text'].tolist()
mapping = {}
# 可根据业务场景调整阈值
fixed_threshold = 2

for i, standard_text in enumerate(sorted_texts):
    if standard_text in mapping:
        continue
    # 仅遍历排在当前值之后的更低频文本
    for low_freq_text in sorted_texts[i+1:]:
        if low_freq_text in mapping:
            continue
        # 计算编辑距离
        if distance(standard_text, low_freq_text) <= fixed_threshold:
            mapping[low_freq_text] = standard_text
# 未匹配到的文本默认映射到自身
for text in sorted_texts:
    if text not in mapping:
        mapping[text] = text
  • 第四步:把映射规则应用到原数据集
df['cleaned_Diagnosis'] = df['Diagnosis'].map(mapping)

额外优化建议

如果你的唯一值量级超过1000,可以先按n-gram做分桶,只有共享n个相同字符片段的文本才计算距离,能进一步提升计算效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:12:02