如何实现Pandas DataFrame单元格内提取的技能关键词去重?
问题原因
你当前的代码会直接提取岗位描述中所有命中关键词库的词汇,没有做去重处理,所以同一个词汇多次出现就会被重复拼接;另外你的关键词库中同时存在SQL、sql这类大小写不同的同款技能,也会额外增加重复匹配的概率。
解决方法
步骤1:先优化关键词库,去除大小写冗余
把所有关键词统一转小写存储,后续匹配时也将原文词汇转小写比对,避免大小写差异导致的重复匹配:
# 统一转小写生成关键词集合,自动去重大小写重复项 skill_set = {s.lower() for s in {'SQL','visualization','modeling','sql','mysql','python','oracle','sybase','mathematics','collection','statistics','tableau','etl','nosql','weka','r','communication','microsoft','excel','pattern', 'recognition','machine','processing','mining','strategy','big','predictive'}}
步骤2:匹配时增加单元格内去重逻辑
根据是否需要保留关键词的出现顺序选择对应方案:
方案1:无需保留出现顺序,直接用集合去重
df['skill'] = df['description'].apply(lambda x: ' '.join({item for item in x.split() if item.lower() in skill_set}))
方案2:需要保留关键词首次出现的先后顺序(Python 3.7+ 版本支持)
利用字典的有序特性实现去重,不打乱关键词在原文出现的先后顺序:
df['skill'] = df['description'].apply(lambda x: ' '.join(dict.fromkeys([item for item in x.split() if item.lower() in skill_set]).keys()))
补充说明
如果你需要严格区分大小写匹配,删除上述代码中所有.lower()的逻辑即可,仅保留去重部分的代码就能解决重复问题。如果需要统一输出关键词的大小写格式(比如所有SQL相关词汇统一输出为大写SQL),可以在去重后额外做一次格式映射处理。
内容的提问来源于stack exchange,提问作者Sasha
相关产品推荐
相关产品推荐

