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

R语言从多语种招聘描述提取薪资失败的技术求助

解决招聘描述中薪资数值提取问题

问题分析

原函数失效大概率是因为正则表达式没覆盖这些常见场景:

  • 英文"salary"的大小写变体(Salary/SALARY/salary)
  • 阿拉伯语"الراتب"前后的空格、符号分隔
  • 薪资的多种格式:带千分位逗号、货币符号、范围(如1,000-2,000)、阿拉伯语数字(如١٠٠٠)
  • 关键词与薪资间的任意分隔符(冒号、空格、换行等)

解决方案

1. 编写多场景兼容的正则规则

针对中英文关键词+多格式薪资,组合正则逻辑:

  • 英文关键词:(?i)salary[:\s]*(忽略大小写,匹配salary后接冒号/任意空格)
  • 阿拉伯语关键词:الراتب[:\s]*(匹配الراتب后接冒号/任意空格)
  • 薪资数值:覆盖阿拉伯数字、阿拉伯语数字、千分位逗号、范围符号-

2. 完整代码实现

假设你的数据集是Pandas DataFrame,以下是可直接复用的代码:

import pandas as pd
import re

# 阿拉伯语数字转阿拉伯数字的映射表
arabic_num_map = {'٠':'0', '١':'1', '٢':'2', '٣':'3', '٤':'4',
                  '٥':'5', '٦':'6', '٧':'7', '٨':'8', '٩':'9'}

def convert_arabic_nums(text):
    if not isinstance(text, str):
        return text
    return ''.join([arabic_num_map.get(c, c) for c in text])

def extract_salary(description):
    if pd.isna(description):
        return None
    # 匹配英文/阿拉伯语关键词后的薪资内容
    pattern = r'(?i)(salary|الراتب)[:\s]*([\d٠-٩,.]+(?:\s*-\s*[\d٠-٩,.]+)?)'
    match = re.search(pattern, description)
    if match:
        salary_str = match.group(2)
        # 转换阿拉伯语数字为标准数字
        salary_str = convert_arabic_nums(salary_str)
        # 清理千分位逗号
        salary_str = salary_str.replace(',', '')
        # 处理薪资范围:可选取平均值或保留原始范围
        if '-' in salary_str:
            low, high = salary_str.split('-')
            try:
                return (float(low.strip()) + float(high.strip())) / 2
            except ValueError:
                return salary_str.strip()
        else:
            try:
                return float(salary_str.strip())
            except ValueError:
                return salary_str.strip()
    return None

# 应用到数据集生成salary列
df['salary'] = df['description'].apply(extract_salary)

3. 关键优化点

  • (?i)标记忽略英文关键词的大小写,兼容Salary/SALARY等变体
  • 内置阿拉伯语数字转换逻辑,解决多语言数字识别问题
  • 支持薪资范围处理:可选择取平均值或保留原始范围字符串
  • 兼容千分位逗号、任意空格分隔的场景
  • 增加异常处理,避免格式不规范导致的报错

测试示例

若description列包含以下内容:

Salary: 1,500-2,000 USD
الراتب ٣٥٠٠ درهم
SALARY 4000

运行代码后,salary列会得到:1750.0、3500.0、4000.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:08:14