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

如何在R语言中从招聘广告文本提取所需工作经验年限?

解决R中提取招聘广告工作经验年限的问题

问题分析

你遇到的全NA结果,大概率是因为原有正则表达式匹配范围太窄,没覆盖到招聘描述中“工作经验”的多种表述(比如3年以上、5+年、1-3年、至少4年等)。

解决方案

以下是基于stringr和dplyr的通用提取方案,能覆盖多数常见经验表述,并生成数值型的yrs_experience列:

1. 示例数据构造

先模拟你的招聘数据结构:

# 示例招聘数据框
job_df <- data.frame(
  job_description = c(
    "要求3年以上Java开发经验,熟悉Spring框架",
    "需要5+年大数据相关工作经验,会Hadoop优先",
    "应届生亦可,或有1-2年前端开发经验",
    "至少4年项目管理经验,PMP证书优先",
    "无经验要求,欢迎应届毕业生"
  ),
  stringsAsFactors = FALSE
)

2. 提取并处理经验年限

library(stringr)
library(dplyr)

job_df <- job_df %>%
  mutate(
    # 匹配包含数字、-/+符号的经验片段
    experience_raw = str_extract(job_description, "\\d+\\s*[-+]?\\s*\\d*"),
    # 提取片段中的所有数字
    experience_nums = str_extract_all(experience_raw, "\\d+"),
    # 转换为数值:范围取平均值,单个数字直接转,无匹配则为NA
    yrs_experience = case_when(
      lengths(experience_nums) == 2 ~ (as.numeric(experience_nums[[1]][1]) + as.numeric(experience_nums[[1]][2]))/2,
      lengths(experience_nums) == 1 ~ as.numeric(experience_nums[[1]][1]),
      TRUE ~ NA_real_
    )
  )

3. 自定义调整

如果不需要范围平均值,可按需修改:

  • 取范围最小值:lengths(experience_nums) == 2 ~ as.numeric(experience_nums[[1]][1])
  • 取范围最大值:lengths(experience_nums) == 2 ~ as.numeric(experience_nums[[1]][2])

4. 输出结果

运行后得到的job_df会包含正确的数值型经验列:

job_description experience_raw experience_nums yrs_experience
1 要求3年以上Java开发经验,熟悉Spring框架              3               3            3.0
2 需要5+年大数据相关工作经验,会Hadoop优先             5+               5            5.0
3 应届生亦可,或有1-2年前端开发经验             1-2            1, 2            1.5
4 至少4年项目管理经验,PMP证书优先              4               4            4.0
5        无经验要求,欢迎应届毕业生            <NA>             <NA>             NA

关键说明

  • 正则表达式\\d+\\s*[-+]?\\s*\\d*能匹配3、5+、1-2等多种数字组合;
  • str_extract_all用于提取片段中的所有数字,处理范围类经验表述;
  • case_when实现多场景的数值转换逻辑,保证结果为数值型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 09:38:08