如何从职位描述文本中提取包含工作年限要求的完整语句?
问题说明
开发职位描述解析器时,需要提取包含岗位所需工作年限要求的完整语句,原有正则实现仅能匹配到工作年限相关字段,无法返回对应完整语句。
- 原有代码输出结果:
['5-7 years'] - 预期输出结果:
['5-7 years of experience in journalism, communications, or content creation preferred']
原有错误实现代码如下:
def extract_years(self,resume_text): resume_text = str(resume_text.split('.')) exp=[] rx = re.compile(r"(\d+(?:-\d+)?\+?)\s*(years?)",re.I) for word in resume_text: exp_temp = rx.search(resume_text) if exp_temp: exp.append(exp_temp[0]) exp = list(set(exp)) return exp
原有代码问题点
- 文本拆分逻辑错误:
resume_text.split('.')会按句号将文本拆分为列表,直接用str()转换列表会把列表的括号、引号等符号带入文本,完全破坏原始语句结构 - 遍历逻辑无效:
for word in resume_text遍历的是错误转换后字符串的单个字符,且循环内每次都对完整错误文本做匹配,没有按独立语句遍历 - 匹配逻辑范围错误:正则仅捕获「数字+years」的字段片段,没有关联匹配字段所在的完整语句
调整后实现代码
核心思路是先按语句分隔符拆分原始文本为独立语句,再筛选包含工作年限规则的完整语句返回:
import re def extract_years(self, resume_text): # 按句号、问号、感叹号、分号、换行符拆分独立语句,过滤空内容 sentences = re.split(r'[.?!;]\s*|\n+', str(resume_text)) sentences = [s.strip() for s in sentences if s.strip()] # 保留原有的工作年限匹配规则,兼容x年、x-y年、x+年等常见写法 year_rule = re.compile(r"\d+(?:-\d+)?\+?\s*years?", re.I) result = [] for sentence in sentences: # 语句包含年限匹配规则时,将完整语句加入结果 if year_rule.search(sentence): result.append(sentence) # 去重后返回 return list(set(result))
补充说明
如果测试过程中遇到Sr.、Mr.这类带点的缩写导致语句被错误拆分,可以根据实际职位描述的文本特征,提前预处理替换这类特殊缩写,或者优化语句分隔的正则规则排除这类场景即可。
内容的提问来源于stack exchange,提问作者SATYAMEDHAS PANDE
相关产品推荐
相关产品推荐

