南宁学院教学大纲检查与修订
用途
对南宁学院本科课程教学大纲做规范化自检,产出自检问题报告;在需要时进一步产出建议性修订版大纲。
自检依据为 40 项检查清单,该清单已用学校近年 7 份《教学大纲编制质量评价表》测评明细报告实证校准。
何时使用
- 要求检查、自检、审核某门课程的教学大纲
- 要求找出大纲存在的问题、给出修改建议
- 要求按学校评价表预估大纲得分
- 要求产出大纲的建议性修订版
工作流
阶段 1 解析大纲
- 定位待检大纲文件(
.doc老式二进制居多)。 - 提取全文:
-.doc:node scripts/extract_syllabus.js <文件或目录> -o <输出目录>(需word-extractor,设置NODE_PATH)
-.docx:python scripts/extract_syllabus.py <文件或目录> -o <输出目录> - 通读全文,确认表1—表6 是否存在、各部分是否齐全。
- 转换后体检(必做):若该文件由
.doc转换而来,先查是否残留转换缺陷——
python scripts/scan_verbs.py <大纲.docx>会一并报告空壳表(0 行)与表1/表2/表3 定位结果;
出现空壳表或"表格内容散成段落",按references/08-转换缺陷诊断与批量处理.md处理后再往下走。
阶段 2 识别模板版本
按 references/02-模板结构与填写规范.md 第六节判断是否为旧版。
旧版识别要点:表5 的列若为"课程目标/毕业要求及权重/教学内容/考核方式及权重/评价方法",即为旧版,全文无表6。
旧版须先做结构性改版再检查内容——此项单列在报告最前。
阶段 3 逐项自检(40 项)
- 读取
references/01-自检清单.md(A—F 六组共 40 项,含 20 项重点)。 - 对每条链实际核算,不得凭印象判定:
- 先用scripts/check_consistency.py核算学时链、权重链、匹配链(按脚本注释构造 JSON,数据须从大纲原文摘取)
- 其余链(名称链、目标链、口径链、载体链)按references/03-一致性核对规则.md逐条核对 - 课程目标 / 学习目标可测性——必须"逐条扫描动词",不得凭整体印象或摘取有利表述(对应 C1、D2、B1):
- 直接用脚本扫,不要人工扫读:python scripts/scan_verbs.py <大纲.docx>
会输出表1课程目标列、表2/表3学习目标列的每一处模糊动词(表号+行号+原文片段)及 C1/D2 判定。
- 定位表1"课程目标"列、表2"学习目标"列、表3"学习目标"列(表1 课程目标一般在第 2 列;表2/表3 学习目标一般在第 3 列,须按表头动态确认列号)。
- 逐行扫描,凡出现"了解、理解、掌握、熟悉、知道、学会、领会、体会、欣赏、培养、讲授、学习、懂得、明白、熟知、认知、认识、有所了解"等模糊动词,逐条记录所在表号/行号+原文片段,并给出可测替换动词与可观测成果形式(如"能够运行×程序输出×结果""能绘制×图并说明×")。
- 判定阈值:C1 表1课程目标列无模糊动词→符合;≤2 处且已补可观测结果→基本符合;≥3 处或含多处未界定→不符合。D2 表2+表3学习目标列无模糊动词→符合;合计≤4 处且已补可观测成果→基本符合;合计≥5 处→不符合。
- 完整动词表与替换建议见references/04-行为动词与表述.md与清单附录二。 - 无现行人才培养方案时,A4/A5/C5/C8/D8 中依赖培养方案的项一律判"待核",不得臆断。
阶段 4 输出自检问题报告
按 references/06-输出规范与模板.md 第一节的结构撰写,保存到 <工作区>/8.自检问题报告/。
硬性要求:
- 每项问题必须给出问题位置 + 证据原文,不得只写结论
- 修改建议必须可操作(给出可替换的表述或具体数值),避免"应进一步完善"之类空话
- 用 references/05-评价表对标与评分.md 预估得分与等级,并标注"供参考"
- 值得肯定的做法单列一节,便于课程负责人保留
如需交付 Word,走文档排版转为公文风格(A4、页眉"南宁学院教学大纲"、页码底端居中、宋体、1.2 倍行距)。
阶段 5 在原文上加批注(按需,默认交付形式)
用户偏好:不要另起一份改写版,保留大纲原文,在问题位置加 Word 原生批注。
用 scripts/comment_helper.py:
from comment_helper import Commenter
cm = Commenter(author="大纲自检", initials="JD")
cm.add(tb.cell(3, 4), "【问题】……\n【建议】……") # 单元格
cm.add(paragraph, "【问题】……\n【建议】……") # 段落
doc.save(TMP); cm.finish(TMP, OUT)
Commenter.verify(OUT) # 须全部通过
批注体例:
- 每条固定 【问题】+【建议】 两段;同一位置多处问题用【问题1】【问题2】分列
- 必须引用原文的错误数据与文字,并给出可直接替换的表述或数值
- 同时对做得好的地方加肯定性批注,便于课程负责人知道要保留什么
- 凡依赖人才培养方案的事项,标注"待核"并写明核对路径,不得代替课程负责人下结论
交付前务必 Commenter.verify():zip_ok / has_comments_part / content_type_ok / rels_ok 全 True,
且 anchors == references == count。
原文保留性校验:抽查关键单元格(错误课时、错别字、旧标题)确认为原文未改。
目标文件已带批注时(第二轮补充批注),必须改用合并式批注器:
Commenter.finish() 会覆盖 comments.xml 并把 ID 从 1 重编,会清空上一轮批注并造成 ID 冲突。
from merge_commenter import MergeCommenter, verify
d = Document(src); cm = MergeCommenter(src, author="大纲自检", initials="JD")
cm.add(cell_or_para, "【问题】……\n【建议】……") # 先全部 add
d.save(TMP) # 再 save(顺序不能颠倒)
cm.finish_merge(TMP, dst); verify(dst) # 再合并落盘
若仅需移除某一类旧批注再重加(如动词批注整轮重做),判定该类批注须用其特征句
(动词批注为"不可直接测评的动词")——不能用"动词"二字,否则会误删正文里提到"动词"的普通批注。
文件被 Word/WPS 占用时会抛 PermissionError,原文件不受影响,关闭后重跑该文件即可。
关键规则
- 数据必须算平:修订后表2/表3 合计、表5 行列合计须实际核算至 100%。
- 名称必须统一:考核方式名称在"文字表述—表4—表5—表6"四处统一后再落表。
- 模板与评价实践冲突时如实标注:模板注中列举"出勤情况",但评价实践多次要求去掉考勤分。按评价实践倾向处理(不建议以出勤单独计分),并在报告中说明该张力,由课程负责人确认——不替学校下结论。
- 不得凭印象判定:凡涉及数字、名称、口径,一律回到原文与培养方案核对。
- 不重写教学设计:课程内容、章节划分、思政元素、教材选择属教师设计,仅在其违反规范时提出修改。
- 两类评价表勿混淆:《教学大纲编制质量评价表》(10 项)针对大纲;《课程非笔试试卷考试考核质量评价表(2025)》(7 项)针对考核材料。
- 学时核算必须先判表2口径(2026-10-10 由用户明确,最易误判之处):
- 课程基本信息中的学时 = 总学时 = 理论学时 + 实践学时;
- 表2"合计"写总学时,或只写理论学时——两种写法均合规(推荐写总学时);
- 表3"合计" = 实践学时(确定无疑);
- 禁止在未判明表2口径前套用"表2合计+表3合计=总学时"——该式仅在表2写理论学时成立,
套到写总学时的大纲上必然得出"学时超出总学时"的假阳性(曾据此误删一版正确结论)。
- 核对口诀:先看表2合计等于哪个数——等于理论学时走情形一(相加=总学时),
等于总学时走情形二(用"总学时-表3合计"反推理论学时),两者皆不等才算真错。
- 详见references/03-一致性核对规则.md第 1 节。 - 版面"乱"先查转换缺陷,不要直接改内容:
.doc若走"文本重建"而非 WPS 保真转换,
会残留空壳表(0 行)、表格内容散成段落、凭空错字。正确做法是找回原始.doc重新转换,
再迁移批注(详见references/08-转换缺陷诊断与批量处理.md);在新转换的干净结构下重扫动词,
结果可能与旧文件不同,须同步更新报告中的 C1/D2 与指标 6/8 估分。 - 批量处理四道防线(一次事故曾毁掉 22 份文件):
① 备份名带唯一前缀(<专业>__<课程>__<原文件名>,因大量文件同名);
② 单文件失败不中断整轮;③ 落盘/终检失败回滚备份;④ 正文须与处理前逐字一致。
参考资源
| 文件 | 内容 | 何时加载 |
|---|---|---|
references/01-自检清单.md |
A—F 共 40 项检查项、4 个附录(含高频问题速查 33 条、评价表对标) | 阶段 3 必读 |
references/02-模板结构与填写规范.md |
南院教〔2025〕35号模板五大结构、表1—表6 定义、排版、旧版识别 | 阶段 2 必读 |
references/03-一致性核对规则.md |
七条链(学时/权重/匹配/名称/目标/口径/载体)与待核情形 | 阶段 3 必读 |
references/04-行为动词与表述.md |
可测动词表、典型错误表述、三维与高阶性 | 检查 C1/C2/D2 时 |
references/05-评价表对标与评分.md |
十项指标权重、等级标准、杠杆提示 | 估分时 |
references/06-输出规范与模板.md |
问题报告模板、修订版要求 | 阶段 4/5 必读 |
references/08-转换缺陷诊断与批量处理.md |
.doc 转换缺陷(空壳表/散段)诊断与修复、内容比对、批量处理安全须知 |
阶段 1 体检、批量处理前必读 |
scripts/extract_syllabus.py / .js |
提取 .docx / .doc 全文 | 阶段 1 |
scripts/check_consistency.py |
学时链、权重链、匹配链核算 | 阶段 3 |
scripts/scan_verbs.py |
动词可测扫描:表1课程目标列/表2表3学习目标列的模糊动词逐条命中 + C1/D2 判定 + 空壳表体检 | 阶段 3 步骤 3 |
scripts/comment_helper.py |
给 docx 加 Word 原生批注(含 verify 自检) | 阶段 5(文件无批注时) |
scripts/merge_commenter.py |
合并式批注器:给已带批注的 docx 追加批注(ID 接续、保留旧批注) | 阶段 5(文件已有批注时) |
scripts/migrate_comments.py |
批注迁移:按锚文本把旧 docx 的全部批注挂到新转换的 docx 上 | 阶段 1 转换缺陷修复后 |
> 注:.doc 可在装了 WPS 的机器上先保真转换为 .docx 再批注(见下方环境备忘),
> 明显优于"用 python-docx 按原文重建";转换后仍须抽查关键单元格确认原文未改。
环境备忘
.doc→.docx保真转换(推荐,需本机装有 WPS):用 pywin32 调 WPS COM 另存为 docx,格式 100% 保留。
python import win32com.client app = win32com.client.DispatchEx("KWPS.Application") app.Visible = False; app.DisplayAlerts = 0 d = app.Documents.Open(src, ReadOnly=True) d.SaveAs2(dst, 16) # 16 = docx d.Close(False); app.Quit()
WPS 主程序通常在C:/Program Files/WPS Office/<版本>/office6/;
注意与wpscloudsvr.exe区分——后者是云服务进程,不能用于本机文件转换
(曾因只找到wpscloudsvr.exe而误判本机无法转换)。
Microsoft 的Wordconv.exe(Office16 目录下)在本机不可用(本机未装 Word,仅装了 Visio);
本机通常亦无 LibreOffice。- 无 WPS 时的兜底:
.doc解析走 Nodeword-extractor(运行前设置NODE_PATH指向含该模块的node_modules),
再用 python-docx 按原文重建 docx;重建后必须逐项核对内容与原文一致。 - 版面目检(推荐):
ExportAsFixedFormat(dst, 17)导出 PDF,再用pymupdf
(pip install pymupdf)按页渲染 PNG 逐页看图——"版面乱不乱"只有肉眼能最终确认,
文本层面全部校验通过也可能仍有排版问题。 - 批量转换
.doc时,每份约 2 秒;注意目标文件若在 Word/WPS 中打开会失败(先关闭)。 - PDF 测评报告可用
pdfplumber提取;注意 PDF 正文后的表格区会重复文本,须先剔除---TABLE---之后内容再解析分数。 - HTML→DOCX:venv 在 Windows 下为
Scripts/python.exe(非bin/python),需手动执行依赖安装。