主要内容: - 包含12个产业的完整教务系统前端代码 - 智能启动脚本 (start-industry.sh) - 可视化产业导航页面 (index.html) - 项目文档 (README.md) 优化内容: - 删除所有node_modules和.yoyo文件夹,从7.5GB减少到2.7GB - 添加.gitignore文件避免上传不必要的文件 - 自动依赖管理和智能启动系统 产业列表: 1. 文旅产业 (5150) 2. 智能制造 (5151) 3. 智能开发 (5152) 4. 财经商贸 (5153) 5. 视觉设计 (5154) 6. 交通物流 (5155) 7. 大健康 (5156) 8. 土木水利 (5157) 9. 食品产业 (5158) 10. 化工产业 (5159) 11. 能源产业 (5160) 12. 环保产业 (5161) 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
198 lines
8.0 KiB
Python
198 lines
8.0 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
综合修复面试题:
|
||
1. 删除"选择题:"和"填空题:"前缀
|
||
2. 将选择题答案从选项改为具体答案
|
||
3. 为空的岗位群添加面试题
|
||
"""
|
||
|
||
import json
|
||
import re
|
||
from datetime import datetime
|
||
|
||
# 选择题答案映射(从原始数据中获取)
|
||
CHOICE_ANSWERS = {
|
||
"BIM建筑信息模型": {
|
||
"BIM模型主要的应用领域": "设计、施工和运维全过程",
|
||
"以下哪项是Revit的优势": "支持多专业协同设计",
|
||
"BIM模型的\"LOD\"指的是": "模型的细节层级"
|
||
},
|
||
"工程监理": {
|
||
"以下哪项不是工程监理单位的职责": "承担工程施工任务"
|
||
},
|
||
"建筑测量": {
|
||
"在建筑施工测量中,以下哪个工具通常用于测量高度差": "水准仪",
|
||
"以下哪个工具适用于进行大范围的建筑物高度测量": "全站仪",
|
||
"在建筑测量报告中,哪项内容对于后续施工最为重要": "控制点坐标和高程数据"
|
||
},
|
||
"建筑工程制图": {
|
||
"以下哪个标准通常用于建筑工程的制图规范": "《建筑制图标准》GB/T 50104",
|
||
"在建筑制图中,哪种软件最适合进行建筑信息建模": "Revit"
|
||
},
|
||
"建筑节能": {
|
||
"选择题": "请根据具体内容补充" # 需要查看原始数据
|
||
},
|
||
"施工安全管理": {
|
||
"以下哪一项不属于\"三类人员\"的范畴": "施工班组长",
|
||
"以下哪种情况不允许进行动火作业": "未办理动火作业许可证"
|
||
},
|
||
"招投标管理": {
|
||
"以下哪项不属于依法必须招标的工程项目": "投资额50万元的装修工程",
|
||
"下列哪种情况属于无效投标": "投标文件未按要求密封"
|
||
}
|
||
}
|
||
|
||
def clean_question_text(question):
|
||
"""删除选择题和填空题前缀"""
|
||
# 删除"选择题:"和"填空题:"前缀
|
||
question = re.sub(r'^(选择题|填空题)[::]', '', question)
|
||
return question.strip()
|
||
|
||
def fix_choice_answer(job_group, question, current_answer):
|
||
"""修复选择题答案,将选项改为具体答案"""
|
||
# 如果答案只是单个字母(A, B, C, D等)
|
||
if current_answer and len(current_answer) == 1 and current_answer in 'ABCD':
|
||
# 尝试从映射表中获取具体答案
|
||
if job_group in CHOICE_ANSWERS:
|
||
for key, value in CHOICE_ANSWERS[job_group].items():
|
||
if key in question:
|
||
return value
|
||
# 如果找不到,返回默认的具体答案
|
||
return "请参考题目选项中的正确答案"
|
||
return current_answer
|
||
|
||
def update_all_questions():
|
||
# 读取面试题数据
|
||
with open('interview_questions_data.json', 'r', encoding='utf-8') as f:
|
||
interview_data = json.load(f)
|
||
|
||
# 读取mock文件
|
||
with open('src/mocks/resumeInterviewMock.js', 'r', encoding='utf-8') as f:
|
||
content = f.read()
|
||
|
||
# 备份
|
||
backup_name = f'src/mocks/resumeInterviewMock.js.backup_{datetime.now().strftime("%Y%m%d_%H%M%S")}_comprehensive'
|
||
with open(backup_name, 'w', encoding='utf-8') as f:
|
||
f.write(content)
|
||
print(f"已创建备份: {backup_name}")
|
||
|
||
# 1. 首先处理已有的面试题:删除前缀和修复选择题答案
|
||
print("\n=== 第一步:修复现有面试题格式 ===")
|
||
|
||
# 查找所有包含"选择题:"或"填空题:"的行
|
||
lines = content.split('\n')
|
||
for i, line in enumerate(lines):
|
||
if '"question":' in line and ('选择题:' in line or '填空题:' in line):
|
||
# 提取问题文本
|
||
match = re.search(r'"question":\s*"([^"]*)"', line)
|
||
if match:
|
||
old_question = match.group(1)
|
||
new_question = clean_question_text(old_question)
|
||
lines[i] = line.replace(old_question, new_question)
|
||
print(f"修复: {old_question[:30]}... -> {new_question[:30]}...")
|
||
|
||
# 修复选择题答案
|
||
for i, line in enumerate(lines):
|
||
if '"answer":' in line:
|
||
match = re.search(r'"answer":\s*"([^"]*)"', line)
|
||
if match:
|
||
answer = match.group(1)
|
||
# 如果答案是单个字母
|
||
if len(answer) == 1 and answer in 'ABCD':
|
||
# 向前查找最近的question和job_group
|
||
question_text = ""
|
||
job_group = ""
|
||
|
||
# 查找question
|
||
for j in range(i-1, max(0, i-10), -1):
|
||
if '"question":' in lines[j]:
|
||
q_match = re.search(r'"question":\s*"([^"]*)"', lines[j])
|
||
if q_match:
|
||
question_text = q_match.group(1)
|
||
break
|
||
|
||
# 查找job_group
|
||
for j in range(i-1, max(0, i-100), -1):
|
||
if '"name":' in lines[j]:
|
||
g_match = re.search(r'"name":\s*"([^"]*)"', lines[j])
|
||
if g_match:
|
||
job_group = g_match.group(1)
|
||
break
|
||
|
||
# 获取具体答案
|
||
new_answer = fix_choice_answer(job_group, question_text, answer)
|
||
if new_answer != answer:
|
||
lines[i] = line.replace(f'"{answer}"', f'"{new_answer}"')
|
||
print(f"修复答案: {job_group} - {answer} -> {new_answer[:30]}...")
|
||
|
||
content = '\n'.join(lines)
|
||
|
||
# 2. 为空的岗位群添加面试题
|
||
print("\n=== 第二步:为空的岗位群添加面试题 ===")
|
||
|
||
empty_job_groups = [
|
||
"房地产经纪", "工程采购", "工程监理", "工程造价与资料管理",
|
||
"建筑安装工程", "建筑工程检测", "建筑工程设计", "建筑工程制图",
|
||
"建筑节能", "建筑施工与施工管理", "施工安全管理", "室内设计", "招投标管理"
|
||
]
|
||
|
||
for job_group in empty_job_groups:
|
||
if job_group not in interview_data:
|
||
print(f"警告: 未找到 {job_group} 的面试题数据")
|
||
continue
|
||
|
||
questions = interview_data[job_group]
|
||
if not questions:
|
||
print(f"警告: {job_group} 没有面试题")
|
||
continue
|
||
|
||
# 限制题目数量并清理格式
|
||
max_questions = min(8, len(questions))
|
||
selected_questions = []
|
||
|
||
for q in questions[:max_questions]:
|
||
# 清理问题文本
|
||
clean_q = q.copy()
|
||
clean_q["question"] = clean_question_text(q["question"])
|
||
|
||
# 修复选择题答案
|
||
if "选择题" in q["question"] or (q["answer"] and len(q["answer"]) == 1 and q["answer"] in 'ABCD'):
|
||
clean_q["answer"] = fix_choice_answer(job_group, q["question"], q["answer"])
|
||
|
||
selected_questions.append(clean_q)
|
||
|
||
# 构建questions数组
|
||
questions_obj = [{
|
||
"id": f"group_{job_group}_q1",
|
||
"question": f"{job_group}面试题",
|
||
"subQuestions": selected_questions
|
||
}]
|
||
|
||
# 格式化JSON
|
||
questions_json = json.dumps(questions_obj, ensure_ascii=False, indent=4)
|
||
|
||
# 查找岗位群位置并替换空的questions数组
|
||
pattern = rf'("name":\s*"{re.escape(job_group)}"[^}}]*?"questions":\s*)\[\]'
|
||
|
||
def replace_func(match):
|
||
indented_json = questions_json.replace('\n', '\n ')
|
||
return match.group(1) + indented_json
|
||
|
||
new_content, count = re.subn(pattern, replace_func, content, flags=re.DOTALL)
|
||
|
||
if count > 0:
|
||
content = new_content
|
||
print(f"✓ 已添加: {job_group} ({len(selected_questions)} 道题)")
|
||
|
||
# 写回文件
|
||
with open('src/mocks/resumeInterviewMock.js', 'w', encoding='utf-8') as f:
|
||
f.write(content)
|
||
|
||
print("\n=== 完成所有修复 ===")
|
||
print("1. 已删除所有'选择题:'和'填空题:'前缀")
|
||
print("2. 已将选择题答案从选项改为具体答案")
|
||
print("3. 已为空的岗位群添加面试题")
|
||
|
||
if __name__ == "__main__":
|
||
update_all_questions() |