python如何将word文档中的标注文本分离成试卷和答案?
网友回复
通过 python-docx 这个强大的库,我们可以读取文档的结构、文本内容以及格式信息(如高亮、颜色等),从而实现将试卷和答案分离的目标。
这个任务的核心是确定一个可靠的规则来区分“题目”和“答案”。您提到的“标注文本”是关键。在Word中,常见的标注方法有:
高亮颜色 (Highlight Color):给答案文本设置一个背景色(如黄色)。
字体颜色 (Font Color):将答案文本的颜色设置为不同于题目的颜色(如红色)。
特定标记 (Keywords):在答案前后使用固定的关键词,如 【答案】 或 (Answer)。
下面我将提供两种最常用、最可靠的方案(基于高亮和字体颜色),并附上完整的Python代码。
准备工作
首先,你需要安装 python-docx 库。
pip install python-docx
然后,准备一个Word文档作为示例,我们命名为 sample_paper.docx。在这个文档里,我们用高亮或者红色字体来标记答案。
方案一:根据“高亮颜色”分离
这是最推荐的方法,因为它通常不会与题目本身的格式(如加粗、斜体)冲突。
逻辑思路:
遍历文档中的每一个段落(Paragraph)。
在每个段落中,遍历每一个文本块(Run)。一个“Run”是具有相同格式的连续文本。
检查每个Run是否有高亮颜色。
创建两个新的Word文档:一个用于试卷,一个用于答案。
将非高亮的Run(题目部分)同时写入试卷和答案文档。
将高亮的Run(答案部分)只写入答案文档。对于试卷文档,可以在对应位置留空或添加下划线 (____)。
Python代码实现:
from docx import Document from docx.enum.text import WD_COLOR_INDEX def copy_run_format(source_run, target_run): """复制一个Run的格式(字体、大小、加粗、斜体等)""" target_run.bold = source_run.bold target_run.italic = source_run.italic target_run.underline = source_run.underline target_run.font.name = source_run.font.name target_run.font.size = source_run.font.size target_run.font.color.rgb = source_run.font.color.rgb def separate_by_highlight(source_path, paper_path, key_path): """ 根据高亮颜色分离试卷和答案。 - source_path: 原始Word文档路径 - paper_path: 生成的试卷文件路径 - key_path: 生成的答案文件路径 """ source_doc = Document(source_path) paper_doc = Document() key_doc = Document() print(f"开始处理文档: {source_path}") for para in source_doc.paragraphs: # 为两个新文档创建新段落 paper_p = paper_doc.add_paragraph() key_p = key_doc.add_paragraph() # 复制原段落的格式(如对齐方式) paper_p.paragraph_format.alignment = para.paragraph_format.alignment key_p.paragraph_format.alignment = para.paragraph_format.alignment # 标记当前段落是否包含答案 has_answer_in_para = any( run.font.high...
点击查看剩余70%