Files
online_sys/frontend_大健康/fixDataStructure.js

212 lines
7.4 KiB
JavaScript
Raw Normal View History

// 修复智能制造数据结构问题
import fs from 'fs';
// 读取智能制造岗位简历数据
const manufacturingData = JSON.parse(
fs.readFileSync('网页未导入数据/智能制造产业/智能制造岗位简历.json', 'utf8')
);
// 按岗位群分组
const groupedData = {};
manufacturingData.forEach(item => {
const groupName = item['简历岗位群'];
if (!groupedData[groupName]) {
groupedData[groupName] = [];
}
groupedData[groupName].push(item);
});
// 转换为industries格式添加avatar字段
const industries = Object.entries(groupedData).map(([groupName, positions], index) => {
const groupId = `manufacturing_${index + 1}`;
const positionList = positions.map((pos, posIndex) => ({
id: `${groupId}_${posIndex + 1}`,
title: pos['岗位名称'],
level: pos['岗位等级标签'],
avatar: pos['简历头像url'] || "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/butler_position_avatar/recuPFXZhkWje7.jpeg", // 添加avatar字段
department: groupName,
type: "全职",
experience: getExperienceByLevel(pos['岗位等级标签']),
education: "大专",
salary: pos['岗位等级标签'] === '技术骨干岗' ? "8-15K" : "5-10K",
location: "苏州",
updateTime: "2024-01-20",
description: `负责${pos['岗位名称']}相关工作,包括${extractMainTasks(pos['简历内容'])}`,
requirements: extractRequirements(pos['简历内容'])
}));
const questions = extractQuestions(positions[0]['面试题内容']);
return {
id: groupId,
name: groupName,
positions: positionList,
questions: questions
};
});
// 根据岗位等级获取经验要求
function getExperienceByLevel(level) {
switch(level) {
case '技术骨干岗': return "2-5年";
case '基础岗': return "0-2年";
default: return "1-3年";
}
}
// 提取主要任务描述
function extractMainTasks(resumeContent) {
const taskMatch = resumeContent.match(/### (五)岗位职责[:]?\s*([\s\S]*?)(?=# 二、|$)/);
if (taskMatch) {
const tasks = taskMatch[1].split('\n')
.filter(line => line.match(/^\d+\./))
.slice(0, 3)
.map(line => line.replace(/^\d+\.\s*/, '').split('')[0])
.join('、');
return tasks || "相关技术工作";
}
return "相关技术工作";
}
// 提取岗位要求
function extractRequirements(resumeContent) {
const coreMatch = resumeContent.match(/### (一)核心能力\s*([\s\S]*?)(?=###|$)/);
if (coreMatch) {
const lines = coreMatch[1].split('\n')
.filter(line => line.match(/^\d+\./))
.slice(0, 4)
.map(line => line.replace(/^\d+\.\s*/, '').trim());
return lines.length > 0 ? lines : ["熟悉相关岗位工作", "具有良好的沟通能力", "有相关工作经验优先"];
}
return ["熟悉相关岗位工作", "具有良好的沟通能力", "有相关工作经验优先"];
}
// 提取面试题
function extractQuestions(questionContent) {
if (!questionContent) return [];
const sections = questionContent.split(/# \w+、/).filter(s => s.trim());
const questions = [];
sections.forEach((section, sectionIndex) => {
const lines = section.split('\n').filter(line => line.trim());
const title = lines[0] || `面试题组${sectionIndex + 1}`;
const subQuestions = [];
for (let i = 1; i < lines.length; i++) {
if (lines[i].match(/^\d+\./)) {
const question = lines[i].replace(/^\d+\.\s*/, '').trim();
let answer = "请根据实际情况回答";
// 查找答案
for (let j = i + 1; j < lines.length && j < i + 5; j++) {
if (lines[j].includes('示例答案') || lines[j].includes('答案:')) {
answer = lines[j].replace(/.*?示例答案[:]?\s*/, '').replace(/.*?答案[:]?\s*/, '').trim();
break;
}
}
subQuestions.push({
id: `q${sectionIndex}_${subQuestions.length + 1}`,
question: question,
answer: answer
});
}
}
if (subQuestions.length > 0) {
questions.push({
id: `group_q${sectionIndex + 1}`,
question: title,
subQuestions: subQuestions.slice(0, 8)
});
}
});
return questions;
}
// 生成按行业分组的简历模板数据 - 按照原来的数据结构
const resumeTemplates = {};
manufacturingData.forEach((item) => {
const industryName = item['简历岗位群']; // 使用岗位群作为行业名称
if (!resumeTemplates[industryName]) {
resumeTemplates[industryName] = [];
}
// 提取项目经历
const projectMatch = item['简历内容'].match(/### (一)项目名称[:]?\s*(.+)/);
const positionMatch = item['简历内容'].match(/### (二)实习岗位[:]?\s*(.+)/);
const timeMatch = item['简历内容'].match(/### (三)实习时间[:]?\s*(.+)/);
const companyMatch = item['简历内容'].match(/### (四)实习单位[:]?\s*(.+)/);
const dutiesMatch = item['简历内容'].match(/### (五)岗位职责[:]?\s*([\s\S]*?)(?=# 二、|$)/);
// 提取技能
const coreSkillsMatch = item['简历内容'].match(/### (一)核心能力\s*([\s\S]*?)(?=###|$)/);
const compoundSkillsMatch = item['简历内容'].match(/### (二)复合能力\s*([\s\S]*?)(?=# 三、|$)/);
// 提取个人总结
const summaryMatch = item['简历内容'].match(/# 三、个人总结\s*([\s\S]*?)$/);
const templateItem = {
position: item['岗位名称'],
level: item['岗位等级标签'],
avatar: item['简历头像url'],
content: {
original: item['简历内容'],
modified: item['简历内容'] // 可以根据需要设置不同的内容
},
studentInfo: {
project_experience: {
project_name: projectMatch ? projectMatch[1].trim() : "智能制造项目",
position: positionMatch ? positionMatch[1].trim() : item['岗位名称'],
time_period: timeMatch ? timeMatch[1].trim() : "2023.09 - 2024.01",
company: companyMatch ? companyMatch[1].trim() : "苏州智能制造有限公司",
description: dutiesMatch ?
dutiesMatch[1].trim()
.split('\n')
.filter(line => line.match(/^\d+\./))
.map(line => line.replace(/^\d+\.\s*/, ''))
.join('\n') : ""
},
core_skills: coreSkillsMatch ?
coreSkillsMatch[1].split('\n')
.filter(line => line.match(/^\d+\./))
.map(line => line.replace(/^\d+\.\s*/, '').trim()) : [],
compound_skills: compoundSkillsMatch ?
compoundSkillsMatch[1].split('\n')
.filter(line => line.match(/^\d+\./))
.map(line => line.replace(/^\d+\.\s*/, '').trim()) : [],
personal_summary: summaryMatch ? summaryMatch[1].trim() : ""
}
};
resumeTemplates[industryName].push(templateItem);
});
// 输出结果
const output = {
industries,
resumeTemplates,
totalPositions: industries.reduce((sum, ind) => sum + ind.positions.length, 0),
totalGroups: industries.length
};
// 写入文件
fs.writeFileSync('fixedManufacturingDataStructure.json', JSON.stringify(output, null, 2), 'utf8');
console.log(`修复完成!
- 岗位群数量: ${output.totalGroups}
- 岗位总数: ${output.totalPositions}
- 简历模板组数: ${Object.keys(resumeTemplates).length}
- 简历模板总数: ${Object.values(resumeTemplates).reduce((sum, templates) => sum + templates.length, 0)}
修复内容
- 添加了岗位avatar字段
- 优化了岗位描述和经验要求
- 修复了简历模板数据结构 - 按行业分组
- 完善了面试题数据
`);