一个用于处理 MS Word (.docx) 文档的综合工具,专门设计用于英语教案生成。支持结构解析、模板清理、内容生成和文档重构。
- 🔍 结构解析: 提取 Word 文档的层次化 JSON 表示(章节、段落、表格)
- 🧹 模板清理: 创建空白版本的文档模板
- 📝 内容生成: 基于解析结构和用户主题智能生成内容
- 🏗️ 文档构建: 将生成的内容注入模板生成最终文档
- 📚 题库集成: 支持本地题库索引和按需加载,自动标注题目来源
- 🎯 专为教案设计: 针对英语教学场景优化的模板和内容生成逻辑
- Python 3.8+
- python-docx 库
# 克隆项目
git clone https://github.com/xielk/doc-processor.git
cd doc-processor
# 安装依赖
pip install python-docx一个完整的教案生成工作流包含以下步骤:
python scripts/parser.py input.docx > structure.json这会提取文档结构并保存为 JSON 格式。
python scripts/cleaner.py input.docx template_clean.docx生成一个空白模板,保留格式但清空内容。
内容生成需要结合学生信息和教学目标。以下是标准流程:
A. 准备学生信息
- 学生姓名:[学生姓名]
- 年级:初中三年级
- 当前水平:[区域]一模 98 分
- 目标分数:130 分
- 薄弱点:阅读 C/D 篇、写作
- 上课日期:2025-03-05
B. 搜索题库(自动)
系统会自动从本地题库搜索相关真题:
from scripts.searcher import search_question_bank
# 搜索阅读材料(优先嘉定区2025年)
results, passages = search_question_bank(
topic="阅读B篇",
district="嘉定",
year="2025"
)
# 搜索语法题目
results, questions = search_question_bank(
topic="非谓语动词",
district="嘉定",
year="2024"
)C. 创建内容 JSON
基于模板结构和题库结果,创建 content.json:
{
"p_1": "[培训机构]英语学科",
"p_2": "[学生姓名]专属辅导讲义",
"t_1": [
["学生姓名", "年级", "上课日期", "上课时间", "时长"],
["[学生姓名]", "初中三年级", "2025-03-05", "10:00:00", "2h"],
["任课教师", "班主任", "教学组长", "教学主管", "学生签字"],
["[教师名]", "[班主任名]", "[教学组长]", "[教学主管]", ""]
],
"p_32": "【学员诊断】\n[学生姓名]同学...",
...
}python scripts/builder.py template_clean.docx content.json output.docx确保你有一个 Word 格式的教案模板。模板应包含表格结构:
- 基本信息表(学生姓名、年级、日期等)
- 教学内容表(教学目标、重难点等)
- 教学过程表(知识详解、真题在线等)
- 避免使用
/tmp/目录保存模板(文件可能被清理) - 建议保存到用户目录:
~/Documents/templates/
python scripts/parser.py "~/Documents/templates/lesson_template.docx" > structure.json查看生成的 structure.json,了解模板的段落 ID 和表格结构。
# 确保题库索引已创建
python scripts/indexer.py
# 在 Python 中搜索题目
python << 'PYEOF'
from scripts.searcher import search_question_bank
# 搜索特定区域 C 篇阅读
results, passages = search_question_bank(
topic="C篇",
district="[区域]",
year="2025",
max_docs=3
)
for p in passages[:3]:
print(f"来源: {p['source']}")
print(f"内容: {p['content'][:200]}...")
print()
PYEOF基于搜索到的题目和学员信息,创建 content.json:
{
"p_1": "[培训机构]英语学科",
"p_2": "[学生姓名]专属辅导讲义",
"t_1": [
["学生姓名", "年级", "上课日期", "上课时间", "时长"],
["[学生姓名]", "初中三年级", "2025-03-05", "10:00:00", "2h"],
["任课教师", "班主任", "教学组长", "教学主管", "学生签字"],
["[教师名]", "[班主任名]", "[教学组长]", "[教学主管]", ""]
],
"t_2": [
["教学内容", "阅读理解C篇首字母填空突破"],
["教学目标", "1. 掌握C篇首字母填空三步法..."],
...
],
"p_32": "【学员诊断与提分策略】\n\n[学生姓名]同学现状分析:...",
"p_33": "【C篇首字母填空真题精讲】\n\nPassage 1([年份] [区域]一模)...",
...
}python scripts/builder.py \
"~/Documents/templates/lesson_template_clean.docx" \
"content.json" \
"~/Documents/output/output_C篇突破.docx"doc-processor/
├── SKILL.md # 技能说明文档(强制阅读)
├── PROMPT.md # 对话提示词
├── README.md # 本文件
├── scripts/ # Python 脚本
│ ├── parser.py # 文档结构解析器
│ ├── cleaner.py # 模板清理器
│ ├── builder.py # 文档构建器
│ ├── indexer.py # 题库索引生成器
│ ├── searcher.py # 题库搜索器
│ ├── smart_builder.py # 智能构建器(含异常处理)
│ └── generator.py # 内容生成器(示例)
└── [generated files] # 生成的文件
├── structure.json # 解析的结构
├── content.json # 生成的内容
└── output.docx # 最终文档
提取 Word 文档的层次结构:
- 段落 (p_X): 普通段落,按顺序编号
- 表格 (t_X): 表格结构,按顺序编号
- 章节 (sec_X): 标题段落
content.json 使用 ID 映射到文档位置:
{
"p_1": "第一段内容",
"p_2": "第二段内容",
"t_1": [
["表头1", "表头2"],
["数据1", "数据2"]
]
}索引系统:
- 首次使用需创建索引:
python scripts/indexer.py - 索引位置:
[你的题库路径]/index.json
搜索策略:
- 优先搜索学员所在区(如[区域名])
- 优先搜索最新年份(2025 > 2024 > 2023)
- 限制加载文件数(3-5个),控制 Token 消耗
来源标注:
- 格式:
([年份] [区域]一模)、([年份] [区域]二模) - 每道题目必须标注来源
问题:在新 session 中运行时报错 FileNotFoundError: /tmp/template.docx
原因:/tmp/ 目录下的文件在 session 结束后会被清理
解决方案:
- 将模板移动到永久目录:
cp "/tmp/template.docx" "~/Documents/templates/"- 使用绝对路径:
python scripts/builder.py \
"~/Documents/templates/template.docx" \
"content.json" \
"output.docx"- 重新上传模板:如果文件已丢失,需要重新上传
可能原因:
- 模板文件损坏
- content.json 中的 ID 与模板不匹配
- 使用了错误的模板版本
解决方法:
- 重新解析模板生成 structure.json
- 检查 content.json 的 ID 是否正确
- 确保使用清理后的模板(clean template)
可能原因:
- 索引未创建
- 搜索关键词不匹配
- 题库中没有该区/年份的题目
解决方法:
# 重新创建索引
python scripts/indexer.py
# 扩大搜索范围(不限定年份)
results, questions = search_question_bank(
topic="非谓语",
district="[区域]",
year=None # 搜索所有年份
)当题库有新文件时:
python scripts/indexer.py这会重新扫描整个题库目录并更新索引。
- Web UI 界面
- 支持更多文档格式(.doc, .pdf)
- AI 自动内容生成集成
- 云端题库同步
欢迎提交 Issue 和 PR!
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 打开 Pull Request
本项目基于 MIT 许可证开源 - 详见 LICENSE 文件
xielk - GitHub
⭐ 如果这个项目对你有帮助,请给个 Star!