+
62
-

python如何将word文档中的标注文本分离成试卷和答案?

python如何将word文档中的标注文本分离成试卷和答案?


网友回复

+
26
-

通过 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%

我知道答案,我要回答