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

调研CSV预处理:硬编码匹配效率低,如何快速归类不规则课程名

自由填报课程名的高效分组匹配方案

现有手写if规则的核心局限

  • 需人工穷举所有大小写、标点、空格、拼写差异的文本变体,新增匹配规则的边际成本极高,大量未覆盖的变体最终会落到misc分类中
  • 未做前置文本归一化处理,同一特征的不同格式要单独写判断分支,代码冗余度很高
  • 部分判断逻辑容易出现错分,比如单独把CSE、Biotech划入B.Tech类,会将非目标课程误归类

低成本可落地的优化方案

前置:统一文本归一化清洗

所有待匹配文本先做通用标准化处理,从根源上消除格式差异带来的重复规则:

import re
def normalize_raw_text(raw_input):
    # 去首尾空白、统一转小写
    cleaned = str(raw_input).strip().lower()
    # 移除所有点号、连字符、多余空格,消除格式差异
    cleaned = re.sub(r'[.\-\s]+', '', cleaned)
    return cleaned

处理后,B.A. L.L.B.、Ballb、bal.l.b.等不同写法的文本会被转换为统一形态的可比对字符串,无需为每种格式单独写判断条件。

替换冗长if分支为字典映射逻辑

将原有判断逻辑改为可维护的键值对映射表,后续新增规则只需要修改字典内容,不需要改动判断链条:

# 映射关系:归一化后的文本特征 -> 课程标准名
course_mapping = {
    "be": "B.E.",
    "ballb": "B.A. LLB",
    "btech": "B. Tech",
    "bpharm": "B. Pharma",
    "pharmacy": "B. Pharma",
    "bba": "BBA",
    "mba": "MBA",
    "mtech": "M. Tech",
    "mbbs": "MBBS",
    "bsc": "B. Science",
    "msc": "M. Science"
}

def map_course(normalized_text):
    # 逐特征匹配,命中即返回对应标准名
    for feature_key, standard_name in course_mapping.items():
        if feature_key in normalized_text:
            return standard_name
    return "misc"

匹配流程调用

直接结合pandas完成批量处理与频次统计,代码结构更简洁:

# 第一步:清洗原始课程名
df1['cleaned_course'] = df1['Course Name'].apply(normalize_raw_text)
# 第二步:映射为标准课程名
df1['Course Name'] = df1['cleaned_course'].apply(map_course)
# 第三步:统计各课程频次
course_frequency = df1['Course Name'].value_counts()

进阶降低维护成本的方法

针对现有规则无法覆盖的长尾变体,不需要手动逐一枚举:

  • 先筛选所有被归类为misc的原始课程值,基于字符串相似度做自动聚类(可借助difflib.get_close_matches实现),把相似度高于阈值的文本归为同一候选组,人工仅需确认每组对应的标准课程名即可
  • 确认后的聚类特征直接补充到course_mapping字典中即可,无需调整核心判断逻辑

匹配注意事项

  • 避免设置过于宽泛的匹配特征,比如原规则中直接将CSE划入B.Tech类,容易把独立填写的其他学科代码错分,设置特征词前需确认匹配边界
  • 归一化处理完成后,原有需要单独判断的B .Tech、B-tech、B.TECH等变体都会被自动识别,无需重复编写规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 12:15:05