ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

ai-job-search 薪酬基准工具(Salary Benchmark Tool)完全指南:从 Excel 数据到模糊匹配查询

2026/9/30 7:30:07 拓冰建站 浏览量
ai-job-search 薪酬基准工具(Salary Benchmark Tool)完全指南:从 Excel 数据到模糊匹配查询 AI 应用AI 技能【免费下载链接】ai-job-searchThe job search that runs on your machine. AI job application framework built on Claude Code: evaluate postings, tailor CVs, write cover letters, prep interviews. Fork it and own it.项目地址https://gitcode.com/GitHub_Trending/ai/ai-job-search点击查看免费下载本文是 ai-job-search 项目内置薪酬基准工具salary_lookup.py的实战指南。该工具在/apply求职流程中承担薪酬对标职责把招聘岗位所在公司的薪酬水平与你自建的薪资基准数据做对比帮助你在简历筛选与薪资谈判前掌握市场行情。读完本文你将掌握salary_data.json数据格式的全部字段与约束、三种数据导入方式手写 JSON / Excel 转换 / 逐步研究、全部命令行参数的用法以及底层模糊匹配算法与数据校验器的实现原理。一、工具定位可选的薪酬对标步骤薪酬查询工具salary_lookup.py的作用是将公司薪酬与你自己数据中的基线进行对比。它被集成在/apply工作流中用于展示某家公司的薪酬与市场水平相比如何。该工具是可选的如果你没有薪酬数据/apply流程中的薪酬步骤会被直接跳过不影响其他求职功能。项目文档 README.md 明确写道薪酬工具适用于你提供的任何薪酬数据工会统计、Glassdoor 导出、个人调研等若没有数据薪酬步骤即被省略。在 SETUP.md 的安装向导中薪酬基准被列为可选的第 5 步同样是跳过即省略的语义。二、工作原理一份 JSON 数据 一个模糊匹配引擎工具读取仓库根目录下的salary_data.json文件其中包含公司薪酬基准数据。它使用模糊匹配按公司名查找能够处理丹麦语/北欧字符ø、æ、å 等、法律后缀A/S、ApS 等以及常见的拼写变体。从源码结构看salary_lookup.py 的匹配管线分为三个可复用的标准化环节见normalize、anglicize、extract_core_words三个函数normalize归一化统一小写、去除空白并按STRIP_PATTERNS规则剔除法律后缀与噪音词包括A/S、ApS、I/S、P/S、K/S、IVS、AMBA/A.M.B.A.带点写法、括号内容如(VG)、地域词Danmark、Denmark、Scandinavia、Nordic、通用词Group、Holding以及逗号后的子实体描述salary_lookup.py 中STRIP_PATTERNS定义。anglicize英文化按SPELLING_VARIANTS映射表把丹麦语字符替换为英语等价形式ø→o、æ→ae、å→aa、ö→o、ä→ae、ü→u从而让Mærsk与Maersk、Ørsted与Orsted能够互相命中。extract_core_words核心词提取再次剔除噪音后提取出长度大于 1 的单词集合用于词重叠评分。匹配评分由match_score()计算得分区间 0100search_company()只保留得分 ≥ 30 的结果并按相关度降序排列salary_lookup.py。评分层级大致如下可由 tests/test_salary_lookup.py 中的用例印证匹配情形分值归一化后完全相等大小写、后缀不影响100英文化后完全相等如OrstedvsØrsted85英文化后互为子串、或短词与核心词重叠75归一化后互为子串80 长度比×10多词重叠按覆盖比例加权30 ~ 70无任何重叠0配套的单元测试覆盖了这些分支精确匹配返回 100含MærskvsMærsk A/S、Arla Foods A.M.B.A.vsArla Foods amba、短查询IBM命中IBM Corporation、Maersk命中Mærsk A/S、无关名称ApplevsVestas Wind Systems返回 0以及城市过滤的大小写不敏感与英文化匹配kobenhavn命中København。城市过滤--city参数会做二次过滤查询城市需出现在条目城市字段中大小写不敏感且同样支持英文化匹配不满足即跳过该条目见 salary_lookup.py 中search_company的城市判断逻辑。三、数据格式salary_data.json完整说明工具期望salary_data.json具备如下结构该示例同时来自 tools/README_SALARY_TOOL.md 的官方模板{ metadata: { source: My Union Statistics 2025, index_baseline: 100, index_label: Index, baseline_description: Index 100 median salary for private sector }, companies: [ { company: Novo Nordisk A/S, city: Bagsværd, categories: { all_employees: { count: 500, index: 108.5 }, engineering: { count: 120, index: 112.3 } } }, { company: Ørsted A/S, city: Fredericia, categories: { all_employees: { count: 200, index: 105.2 } } } ] }字段说明metadata.source数据来源说明仅作参考如 My Union Statistics 2025metadata.index_baseline基线数值例如索引型数据为 100若为 0 则表示直接展示绝对值不计算百分比差metadata.index_label输出表格中索引列的列名标签metadata.baseline_description基线的人性化解释文字会打印在输出表格下方companies[].company公司名称必填非空字符串companies[].city城市/地点可选用于--city过滤companies[].categories具名薪酬类别每个类别包含count和/或index数据格式支持任意基于指数或绝对值的薪酬数据例如指数 100 中位薪酬越高越好、你所在币种的绝对薪酬值、或任何你想追踪的自定义指标。index甚至可以是字符串如隐私保护的private输出时原样显示而不会崩溃tests/test_salary_lookup.py 的test_text_index_does_not_crash验证了这一点。输出表与vs Baseline列当命中公司后format_entry()会渲染一张对齐的表格salary_lookup.py列包括 Category、Count、Index 列与vs Baseline列。百分比差的计算公式为((index - baseline) / baseline) × 100正数带号当index_baseline为 0 时视为绝对薪酬模式不显示百分比测试用例test_format_entry_with_zero_baseline断言不含%。此外类别名中的下划线会转为空格并做标题化显示all_employees→All Employees若某类别只有count而没有index其指数列显示为N/A*并在表格下方打印脚注* N/A Too few employees to publish (privacy)——即员工人数过少出于隐私不予发布。脚注只在确实存在被抑制行时才打印tests/test_salary_lookup.py 用两个用例分别验证了无抑制行不打印脚注和有抑制行必须打印脚注。四、数据导入的三种方式方式 A手动创建salary_data.json按第三节的格式手写文件即可数据可来自任何渠道工会统计、Glassdoor、薪酬调研、行业人脉信息或个人研究。方式 B从 Excel 转换推荐用于批量数据如果你已有 Excel 格式的薪酬数据使用仓库自带的转换脚本 tools/convert_salary_excel.pypip install openpyxl python3 tools/convert_salary_excel.py path/to/salary-data.xlsx \ --source My Salary Data 2025 \ --baseline 100 \ --baseline-desc Index 100 median salary在 Windows 上若 Python 以py暴露在 PATH 中则用py若系统用python而非python3请相应替换示例命令。默认输出到仓库根目录的salary_data.json也可用--output 路径指定输出文件。转换器会自动探测 Excel 布局查找 Company/Firma 列也识别 virksomhed、employer、arbejdsgiver 等变体与可选的 City/By 列也识别 kommune、location、sted 等见 tools/convert_salary_excel.py 的COMPANY_PATTERNS与CITY_PATTERNS其余列视为薪酬数据并自动配对 count/index 列如 Antal alle 与 Lønindeks alle 会被归入同一类别alle无类别词的裸 CountIndex丹麦语 AntalLønindeks会归入默认类别all_employees保证单类别布局也正确输出成一行tests/test_convert_salary_excel.py 中BareCountIndexPairingTests覆盖该场景。转换器内置多项防错保护均有测试佐证表头自动定位会在前 10 行内寻找同时含公司列与城市/计数/指数列的表头行无交叉佐证时回退到任一单元格提及公司词规则。丹麦工会统计导出文件常见的标题/引用行如 Kilde: … opdelt efter arbejdsgiver…不会被误判为表头对应 issue #414 的回归测试数字区域解析支持欧洲/美国两种千分位与小数点写法1.234,56与1,234.56都能正确解析但对单分隔符的歧义写法如1,234、1.234采取宁可跳过、绝不猜错策略避免产生 1000 倍误差的薪酬值丹麦语字符串单元格如12,0、108,5也能正确转为数值噪音列排除自由文本列如 Notes与标识符列如 Id、personnummer不会被当作薪酬类别多工作表支持逐个解析所有 sheet 并合并输出tests/test_convert_salary_excel_integration.py 中真实工作簿往返测试覆盖了多 sheet 与元数据写入。转换完成后metadata.index_label固定为Indexsource缺省使用 Excel 文件名不含扩展名baseline_description缺省为Index baseline baseline。方式 C从研究积累起步从一个空模板开始随着调研逐步补充公司条目例如使用绝对值模式{ metadata: { source: Personal research, index_baseline: 0, index_label: Monthly salary (DKK), baseline_description: Approximate monthly salary before tax }, companies: [ { company: Example Corp, city: Copenhagen, categories: { entry_level: { index: 42000 }, senior: { index: 55000 } } } ] }注意此处index_baseline: 0表示绝对薪酬模式——输出时直接显示数值而不计算百分比差index_label可自由命名为 Monthly salary (DKK) 之类的业务含义标签。五、命令行用法主程序支持五个调用形态salary_lookup.py 的main()中定义python3 salary_lookup.py Novo Nordisk python3 salary_lookup.py Ørsted --city Fredericia python3 salary_lookup.py COWI --json python3 salary_lookup.py --list-all python3 salary_lookup.py --validate # pre-flight check your salary_data.json各参数说明参数作用company位置参数要搜索的公司名缺省且未使用其他模式时打印帮助信息并退出--city 名称按城市过滤结果大小写不敏感支持丹麦语字符英文化匹配--json以 JSON 数组输出命中结果ensure_asciiFalse保留原始字符--list-all列出数据集中所有公司名含城市若有--validate校验salary_data.json并输出报告后退出不执行查询--validate的行为细节无问题输出OK - no issues found.并以退出码 0 结束有问题时分Errors硬错误退出码 1与Warnings可用性问题但能正常工作退出码 0两类报告salary_lookup.py 的print_validation_report。典型检查项包括顶层必须是对象、companies必须是列表、公司名必填且非空、city/categories为对象时类型正确、类别必须是含count和/或index的对象、count必须是数字、重复公司名仅记为警告tests/test_salary_lookup.py 的ValidateDataTests系列用例逐一验证。无结果的提示当搜索无命中时工具会提示尝试更短或不同的名称并提醒数据集中公司名可能包含 A/S、ApS 等法律后缀若使用了--city过滤还会附加提示被城市过滤排除。六、数据隐私与安全设计数据文件不入库salary_data.json已被 .gitignore 排除。你的薪酬数据可能涉及专有或保密信息因此刻意不纳入版本控制SETUP.md 也提示应将真正敏感的文件tracker、薪酬数据、documents/、申请归档等保存在本地避免推送到公开 fork。缺失文件的友好降级若salary_data.json不存在salary_lookup.py会打印包含完整指引的错误信息提示参阅 tools/README_SALARY_TOOL.md并以退出码 1 结束/apply工作流随后自动跳过薪酬基准步骤。JSON 解析错误无堆栈非法 JSON 会报告具体行列号如invalid JSON at line N, column N不打印 Python 堆栈便于用户自查文件tests/test_salary_lookup.py 的test_load_data_reports_json_parse_errors_without_traceback。UTF-8 输出强制main()入口处通过_force_utf8_output()将 stdout/stderr 强制重配为 UTF-8避免在 Windows 管道输出默认 ANSI 代码页 cp1252时因公司名、职位名等含丹麦语字符或非拉丁字符而抛UnicodeEncodeError。tests/test_tools_utf8_output.py 端到端验证了波兰语、西里尔文、中日韩字符均能干净地通过两个工具输出。七、数据校验与容错边界validate_data()是查询前的强制关卡load_data() 读取 解析 校验它把畸形数据挡在查询之前。从collect_validation_issues()的返回设计看校验器刻意区分两类问题Errors硬错误会导致查询崩溃或输出错误如顶层不是对象、companies不是列表、类别值不是对象、count非数字等——--validate遇到即退出码 1Warnings软问题仍然可用如重复公司名——报告但退出码 0。值得一提的是容错细节--validate允许metadata或categories显式为null与省略等同而查询渲染路径也必须对null不崩溃——format_entry()内部对 metadata 与 categories 做了空值兜底并把条目中除company/city/categories外的其他 dict 字段视为类别兜底渲染tests/test_salary_lookup.py 的NullShapeEndToEndTests验证了通过 --validate 后查询也能正常渲染的完整链路。八、小结在求职流程中的使用建议推荐的最小落地路径先在 SETUP.md 完成基础安装项目要求 Python 3.10再按需选择一种方式建立salary_data.json工会统计 Excel 转换最省力个人调研手动维护最灵活随后运行python3 salary_lookup.py --validate做一次预检确认数据合法后即可让/apply流程自动执行薪酬对标。日常使用中--city可区分同一公司在多地的薪酬差异--json便于脚本化集成--list-all可快速浏览数据集全貌。薪酬数据始终留在本地、不入库既保护了隐私也让这套基准完全由你掌控。赞分享AI 应用AI 技能【免费下载链接】ai-job-searchThe job search that runs on your machine. AI job application framework built on Claude Code: evaluate postings, tailor CVs, write cover letters, prep interviews. Fork it and own it.项目地址https://gitcode.com/GitHub_Trending/ai/ai-job-search点击查看免费下载相关推荐5分钟掌握NocoDB全文检索从模糊查询到精准匹配的实战指南5分钟掌握NocoDB全文检索从模糊查询到精准匹配的实战指南 你是否还在为表格数据量大导致搜索卡顿而烦恼是否因普通查询无法满足复杂检索需求而束手无策本文将数据库低代码后端前端Win11Debloat上手实录10分钟完成Windows 11瘦身卸载预装应用、关闭遥测与AIWin11Debloat上手实录10分钟完成Windows 11瘦身卸载预装应用、关闭遥测与AI Win11Debloat是一个开源的PowerShell脚桌面应用CLI在 NNI 中使用 NAS 基准数据集从数据准备到 Benchmark 查询与算法评估在 NNI 中使用 NAS 基准数据集从数据准备到 Benchmark 查询与算法评估 NASNeural Architecture Search算法验证人工智能AutoML机器学习深度学习模型压缩特征工程上一篇终极指南如何用一套键盘鼠标无缝控制多台电脑下一篇联想拯救者BIOS高级设置一键解锁工具3分钟开启隐藏功能终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考