Python生产级节假日映射:如何统一命名不规范的节假日?
解决节假日命名不规范的归类方案
针对你遇到的硬编码映射维护麻烦、API变更就报错的问题,给你几个简便实用的归类方法:
1. 关键词模糊匹配法
给每个目标类别定义一组核心关键词,通过检查节假日名称是否包含这些关键词来归类,比硬编码灵活得多。
- 示例:
- 新年类核心关键词:
["New Year", "Day After New Year"] - 节礼日类核心关键词:
["Boxing Day"] - 圣诞节类核心关键词:
["Christmas Day", "Christmas Eve"]
- 新年类核心关键词:
- 处理逻辑:先对原始名称做简单清洗(比如去掉首尾空格、统一大小写),然后遍历每个类别关键词,只要名称包含任一关键词,就归到对应类别。比如
Day off for New Year's Day (Day 2)清洗后包含New Year,直接归为新年类;Boxing Day observed包含Boxing Day,归为节礼日类。
2. 字符串相似度聚类法
如果关键词匹配覆盖不全,可以用相似度算法把相似名称自动聚成一类,再手动给簇命名。
- 工具推荐:用Python的
fuzzywuzzy库计算编辑距离,或者sklearn的TF-IDF+KMeans做文本聚类。 - 操作步骤:
- 对所有节假日名称做标准化处理(比如去掉
Day off for、observed这类通用前缀后缀,转小写); - 计算每两个名称之间的相似度,把相似度高于阈值(比如80%)的归为同一类;
- 给每个聚类后的组指定统一类别名称,后续新名称直接和已有组计算相似度,自动归类。
- 对所有节假日名称做标准化处理(比如去掉
3. 规则引擎+优先级匹配
针对命名里的固定格式,写一套分层规则,按优先级处理:
- 规则示例(按执行顺序):
- 去掉前缀:如果名称以
Day off for开头,直接截取后面的内容; - 去掉后缀:如果名称以
observed结尾,截取前面的内容; - 特殊后缀处理:比如
(Day 2)这类标注,直接删除; - 最后用处理后的干净名称匹配预定义的类别映射。
- 去掉前缀:如果名称以
- 好处:先统一格式再匹配,能覆盖大部分不规范写法,比如
Day off for New Year's Day (Day 2)经过处理后变成New Year's Day,直接匹配新年类。
这些方法都比硬编码灵活,API新增或变更名称时,只要调整关键词、相似度阈值或者规则,就能快速适配,不用大面积修改代码。
内容的提问来源于stack exchange,提问作者r ram
相关产品推荐
相关产品推荐

