更新12个教务系统并优化项目大小
主要更新: - 更新所有12个产业的教务系统数据和功能 - 删除所有 node_modules 文件夹(节省3.7GB) - 删除所有 .yoyo 缓存文件夹(节省1.2GB) - 删除所有 dist 构建文件(节省55MB) 项目优化: - 项目大小从 8.1GB 减少到 3.2GB(节省60%空间) - 保留完整的源代码和配置文件 - .gitignore 已配置,防止再次提交大文件 启动脚本: - start-industry.sh/bat/ps1 脚本会自动检测并安装依赖 - 首次启动时自动运行 npm install - 支持单个或批量启动产业系统 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
141
frontend_智能制造/clean_answer_options.py
Normal file
141
frontend_智能制造/clean_answer_options.py
Normal file
@@ -0,0 +1,141 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
清理面试题答案中的选项,只保留正确答案
|
||||
"""
|
||||
|
||||
import re
|
||||
from datetime import datetime
|
||||
|
||||
print("=== 清理面试题答案中的选项 ===\n")
|
||||
|
||||
# 1. 读取当前mock文件
|
||||
print("1. 读取当前mock文件...")
|
||||
with open('src/mocks/resumeInterviewMock.js', 'r', encoding='utf-8') as f:
|
||||
content = f.read()
|
||||
|
||||
# 2. 备份
|
||||
backup_time = datetime.now().strftime('%Y%m%d_%H%M%S')
|
||||
backup_file = f'src/mocks/resumeInterviewMock.js.backup_clean_options_{backup_time}'
|
||||
print(f"2. 创建备份: {backup_file}")
|
||||
with open(backup_file, 'w', encoding='utf-8') as f:
|
||||
f.write(content)
|
||||
|
||||
# 3. 处理答案中的选项
|
||||
print("\n3. 开始清理答案中的选项...")
|
||||
|
||||
def clean_answer(match):
|
||||
"""清理答案中的选项格式"""
|
||||
full_match = match.group(0)
|
||||
answer_content = match.group(1)
|
||||
|
||||
# 检查是否包含选项格式(A. B. C. 或 A、B、C、等)
|
||||
if re.search(r'[A-D][\.、]', answer_content):
|
||||
# 尝试提取正确答案
|
||||
# 模式1: "正确答案是A" 或 "答案:A"
|
||||
correct_match = re.search(r'(?:正确答案[是为::]*|答案[是为::]*)\s*([A-D])', answer_content)
|
||||
if correct_match:
|
||||
option_letter = correct_match.group(1)
|
||||
# 查找该选项的内容
|
||||
option_pattern = rf'{option_letter}[\.、]\s*([^A-D\n]+?)(?=[A-D][\.、]|$)'
|
||||
option_content = re.search(option_pattern, answer_content)
|
||||
if option_content:
|
||||
# 返回只包含正确答案内容的版本
|
||||
cleaned_answer = option_content.group(1).strip()
|
||||
# 去除可能的句号或其他标点
|
||||
cleaned_answer = re.sub(r'[。;;]+$', '', cleaned_answer)
|
||||
return f'"answer": "{cleaned_answer}"'
|
||||
|
||||
# 模式2: 选项列表后跟正确答案说明
|
||||
# 例如:"A. 选项1 B. 选项2 C. 选项3 D. 选项4。正确答案是C"
|
||||
if '正确答案' in answer_content or '答案' in answer_content:
|
||||
# 提取所有选项
|
||||
options = {}
|
||||
option_matches = re.findall(r'([A-D])[\.、]\s*([^A-D\n]+?)(?=[A-D][\.、]|正确答案|答案|$)', answer_content)
|
||||
for letter, content in option_matches:
|
||||
options[letter] = content.strip().rstrip('。;;')
|
||||
|
||||
# 找出正确答案
|
||||
correct_match = re.search(r'(?:正确答案|答案)[是为::]*\s*([A-D])', answer_content)
|
||||
if correct_match and correct_match.group(1) in options:
|
||||
return f'"answer": "{options[correct_match.group(1)]}"'
|
||||
|
||||
# 如果没有选项格式或无法处理,返回原始内容
|
||||
return full_match
|
||||
|
||||
# 4. 执行替换
|
||||
original_content = content
|
||||
# 匹配 "answer": "..." 模式
|
||||
pattern = r'"answer":\s*"([^"]*(?:\\.[^"]*)*)"'
|
||||
|
||||
# 统计处理的答案数量
|
||||
matches = re.findall(pattern, content)
|
||||
total_answers = len(matches)
|
||||
print(f"找到 {total_answers} 个答案")
|
||||
|
||||
# 处理包含选项的答案
|
||||
processed = 0
|
||||
for match in re.finditer(pattern, content):
|
||||
answer_text = match.group(1)
|
||||
if re.search(r'[A-D][\.、]', answer_text):
|
||||
processed += 1
|
||||
|
||||
print(f"其中 {processed} 个答案包含选项格式")
|
||||
|
||||
# 执行替换
|
||||
content = re.sub(pattern, clean_answer, content)
|
||||
|
||||
# 5. 额外的清理模式
|
||||
print("\n4. 执行额外的清理模式...")
|
||||
|
||||
# 清理常见的选项格式
|
||||
def additional_clean(text):
|
||||
"""额外的清理规则"""
|
||||
# 移除"选项:"开头
|
||||
text = re.sub(r'"answer":\s*"选项[::]\s*', '"answer": "', text)
|
||||
|
||||
# 如果答案以单个字母开头(如"A 内容"),去掉字母
|
||||
text = re.sub(r'"answer":\s*"[A-D]\s+([^"]+)"', r'"answer": "\1"', text)
|
||||
|
||||
# 如果答案以"A."或"A、"开头,去掉
|
||||
text = re.sub(r'"answer":\s*"[A-D][\.、]\s*([^"]+)"', r'"answer": "\1"', text)
|
||||
|
||||
return text
|
||||
|
||||
content = additional_clean(content)
|
||||
|
||||
# 6. 保存文件
|
||||
print("\n5. 保存更新后的文件...")
|
||||
with open('src/mocks/resumeInterviewMock.js', 'w', encoding='utf-8') as f:
|
||||
f.write(content)
|
||||
|
||||
# 7. 验证语法
|
||||
print("\n6. 验证语法...")
|
||||
import subprocess
|
||||
result = subprocess.run(['node', '-c', 'src/mocks/resumeInterviewMock.js'],
|
||||
capture_output=True, text=True)
|
||||
|
||||
if result.returncode == 0:
|
||||
print("✅ 语法检查通过!")
|
||||
|
||||
# 检查是否有变化
|
||||
if content != original_content:
|
||||
# 再次统计包含选项的答案
|
||||
remaining_options = len(re.findall(r'"answer":\s*"[^"]*[A-D][\.、]', content))
|
||||
print(f"\n清理结果:")
|
||||
print(f"- 原始包含选项的答案: {processed} 个")
|
||||
print(f"- 剩余包含选项的答案: {remaining_options} 个")
|
||||
print(f"- 成功清理: {processed - remaining_options} 个")
|
||||
else:
|
||||
print("\n未发现需要清理的选项格式")
|
||||
else:
|
||||
print("❌ 语法错误:")
|
||||
print(result.stderr)
|
||||
print("\n正在恢复备份...")
|
||||
with open(backup_file, 'r', encoding='utf-8') as f:
|
||||
content = f.read()
|
||||
with open('src/mocks/resumeInterviewMock.js', 'w', encoding='utf-8') as f:
|
||||
f.write(content)
|
||||
print("已恢复到备份版本")
|
||||
|
||||
print("\n✅ 清理完成!")
|
||||
Reference in New Issue
Block a user