资讯动态

工程热力学期末考试题PDF结构化:提取、拆分、识别公式并导入Anki

发布时间:2026/9/19 14:17:23 来源:尧图企业网站定制
简介工程热力学是能源动力类专业的核心基础课这份PDF为期末考试题资料适合正在复习备考的本科生及需要梳理知识框架的初学者。资源为单个PDF文件大小仅28KB可直接打印或导入移动端随时刷题。文件内按判断题、填空题、问答题、计算题四大部分编排完整覆盖热力学第一定律、第二定律、熵产与作功能力损失、理想气体状态方程、水蒸气临界压力、朗肯循环与再热、喷管流动和马赫数计算等高频考点其中计算题给出了详细求解过程便于对照检查。已有152人浏览学习适合作为考前自测与查漏补缺的辅助资料。资源以试卷形式呈现答案要点与解题步骤均包含在题目和解答中能有效帮助学习者快速回顾核心公式、辨析易混概念并训练规范解题思路。1. 工程热力学期末考试题.pdf 这份材料到底该怎么被程序消费拿到一份《工程热力学期末考试题.pdf》很多人第一反应是打开看但看完就忘了。真正能帮上忙的做法是把这份 PDF 变成一份结构化题库让其中的每一个选择题、答案、公式和图像都变成可以被程序检索、标记和重排的数据。这篇文章就是讲这件事的落地路径从 PDF 提取文本到拆分题目再到识别公式和图片最后接进 Anki。如果你正被大量工程热力学习题困住或者想给教学资料做自动化整理下面这些操作可以直接照抄。2. 从 PDF 里把工程热力学期末考试题变成纯文本的技术选型与坑位工程热力学期末考试题这种 PDF版式一般有两种一种是 Word 转出来的文字型 PDF另一种是扫描或拍照后合并的图片型 PDF。前者可以直接抽文本后者必须先做 OCR。先判断类型再决定管线这是我处理这类文件的一贯顺序。2.1 为什么先选 pdfplumber 而不是 PyPDF2处理文字型工程热力学期末考试题我会优先用 pdfplumber而不是 PyPDF2 或 pypdf。原因很直接PyPDF2 只提供extract_text()这种简单的文本抽取它不告诉你每段文字在哪一页哪个位置也无法在文字和图片之间建立关联。工程热力学的题目里有大量公式、角标、上下标PDF 内嵌字体如果带自定义编码PyPDF2 抽出来的经常是乱码。pdfplumber 基于 pdfminer.six保留了字符级坐标遇到排版混乱的页面可以按位置过滤。下面是最小提取脚本import pdfplumber with pdfplumber.open(工程热力学期末考试题.pdf) as pdf: print(总页数:, len(pdf.pages)) for i, page in enumerate(pdf.pages): text page.extract_text(layoutTrue) if text and len(text.strip()) 20: print(f--- Page {i 1} ---) print(text[:300])layoutTrue会在输出时保留文本的横向间隔这样选择题的A. B. C. D.能保持在近似的列位置。实际使用中我一般先打印每页前 300 个字符快速确认哪些页有正文哪些页是空白或只有图片。参数上还可以加x_tolerance3来调整字符宽度容忍度默认值是 3遇到字距较疏的页面这个值要适当提高。2.2 处理两类排版文字型题目和图片型公式工程热力学题目里最头疼的是公式和图表。文字型 PDF 中的公式可能是被转换成图片的也可能是 OMML 转换时生成的矢量字体。如果公式是图片extract_text()只能抽到图周围的文字公式本身是空白。这种情况需要结合page.images来定位图片区域。page pdf.pages[3] for img in page.images: print(图片对象:, img[name], 尺寸, img[width], x, img[height], 位置, (img[x0], img[top], img[x1], img[bottom]))这段代码把第四页所有图片的位置和大小列出来。看到某个图片坐标处在题目编号附近基本就能判断它是公式图还是示意图。工程热力学期末考试题里的压-焓图、焓熵图通常以大幅图片存在宽度可能超过页面一半而公式图片往往又小又窄。靠这个特征就能区分。2.2.1 用 pdfplumber 抽取文字和坐标如果需要按题目位置把文字和公式图对应起来可以用extract_words()拿到每个词的坐标再结合题号的位置做局部切割。words page.extract_words(use_text_flowFalse, keep_blank_charsFalse) for w in words: print(w[text], (w[x0], w[top], w[x1], w[bottom]))use_text_flowFalse表示按物理排版顺序取词不重新排序。试卷题目有时会分栏如果启用 text flow它会自动按阅读顺序排列反而打乱原始坐标。工程热力学期末考试题如果需要保留原始版式这个参数不要打开。2.3 遇到扫描版 PDF 时切换 OCR 管线的判定条件文本提取失败不能只靠肉眼判断要有一个客观条件。我一般这么设阈值某页extract_text()返回的字符数少于 15且该页图片数量大于等于 1就判定为扫描页。这时整份 PDF 走 OCR 管线。常见做法是先用 ocrmypdf 在 PDF 上叠加一层文本再用 pdfplumber 去读ocrmypdf 工程热力学期末考试题.pdf 工程热力学期末考试题_ocr.pdf -l chi_sim --force-ocr-l chi_sim指定简体中文语言包--force-ocr强制对所有页做 OCR哪怕页面上已经有文本也会重做。处理后的新 PDF 每个字符都有坐标再用之前的 pdfplumber 代码就能正常提取。工程热力学期末考试题里的专业英文缩写如h、s、cp可能会被误识别OCR 输出后要多做一轮字符替换。3. 用正则和结构规则把工程热力学期末考试题拆成题目、选项、答案文本抽出来之后下一步就是结构化。工程热力学期末考试题的题型通常有选择、判断、填空、计算。每种题型的版式有规律但只要用对方法都可以用正则加状态机解决。3.1 先观察版面题目编号规律、选项对齐方式在写分割脚本之前我会先打印一份完整文本仔细看题号格式。常见格式有1.或1、或(1)一、或第 1 题选择题选项往往在同一行如A. 增大 B. 减小也可能换行排列这些规律决定后续的正则表达式不要一开始就写死。观察后把规律记录在配置里后面参数调整方便。3.2 写一个能处理单选/多选/判断题的分割脚本先按题号切分再在每个切分块内识别选项和答案。下面是一个简洁的分割函数import re def split_questions(text): # 匹配 1/2/3 开头后面跟 . 或 、 的数字题号 pattern r\n(?\d{1,3}[、.]) parts re.split(pattern, text) questions [] for part in parts: part part.strip() if not part: continue m re.match(r(\d{1,3})[、.](.*), part, re.S) if not m: continue num int(m.group(1)) body m.group(2).strip() questions.append({id: num, raw: body}) return questions这里用\n(?\d{1,3}[、.])作为分割点匹配换行符后紧跟着一到三位数字和顿号/点的情况。重点在于(?...)是零宽断言它只把\n当作分割点不会吞掉题号。如果工程热力学期末考试题里同时有(1)这种括号题号就把 pattern 改成r\n(?\(\d{1,3}\)|\d{1,3}[、.])。3.3 参数表页码范围、题号正则、答案行特征实际抓题时我通常会把这些参数集中放在一个字典里方便按不同 PDF 调整。参数项当前示例说明页码范围pdf.pages[2:-1]跳过封面和目录题号正则\n(?\d{1,3}[、.])识别题号开始位置选项正则(?\n?[A-D])[A-D][.、]匹配选项行答案行特征答[:]或答案[:]题干尾部直接给答案公式图片尺寸阈值宽 200高 100判定为公式图而非图表在脚本里把这些参数暴露出来遇到一份新的工程热力学期末考试题只需要改这张表里的值不用动代码逻辑。3.4 处理跨页题目和题号混淆的 3 个方法跨页是高频坑。题目在第 2 页末尾断了第 3 页开头继续直接按页处理会把一道题拆成两半。我一般用以下 3 个方法第一合并文本时保留分页标记\n PAGE BREAK \n切分题目时如果某个raw里包含分页标记就把它替换成空再重新拼接下一题。第二检测题号连续性。如果分割后第 1 题后面直接出现第 3 题缺少第 2 题说明第 2 题被打散了需要检查上一块的raw中是否已经包含了第 2 题的题干。第三根据选项数量判断截断位置。一道完整的单选题一定有四到五个选项如果切分出的块里选项数不足就把下一块的文本并入。实际经历中判断题是最容易误判的。判断题往往没有选项题干直接跟( )或者答案标记。正则如果按选项行匹配很容易把判断题的括号当成空白选项。这时要单独把判断题和选择题分开处理用题干是否含( )来区分。4. 公式与图表从 PDF 里“抠”出来的常用工具和调用参数工程热力学期末考试题里的热力学第一定律方程、熵变计算式、压-焓图是复习时最需要的部分。文本提取过程往往拿不到公式内容这一章专门讲怎么把公式和图表从 PDF 中拆出来并转成可编辑格式。4.1 用 LaTeX 识别工具 Mathpix 把公式转成 LaTeX 的注意事项Mathpix 是目前识别公式最稳定的云服务但它是收费的注册后会送少量免费额度。它的 HTTP API 接受图片 URL 或 base64 图片内容返回 LaTeX 字符串。常见做法是先上传图片获得 URL再调用 API。curl -X POST https://api.mathpix.com/v3/latex \ -H app_key: YOUR_APP_KEY \ -H app_id: YOUR_APP_ID \ -H Content-Type: application/json \ -d {url: https://your-image-host/formula.png}响应里的latex字段就是识别出的 LaTeX 代码。使用它时要注意识别结果里经常包含\text { }包裹的中文实际排版时需要手动处理。工程热力学期末考试题里的变量下标如h_1、s_2识别成h_{1}、s_{2}的准确率较高但角标带括号时容易出错需要人工复核。4.2 开源方案 pix2tex 的本地跑通最小命令不想付费就用开源模型 pix2tex。它的模型是 LaTeX-OCR可以本地运行。传统安装方式很简单pip install pix2tex[gui]装完之后命令行直接调用python -m pix2tex.cli --file path/to/formula.png --temperature 0.2--temperature在这里控制采样随机度0.2 是较保守的值能减少错误变量名。实际对工程热力学期末考试题里的公式图做测试温度调低之后像T_1这种简单下标更稳温度太高会产生离谱的字母。如果不想装 GUI 依赖也可以只装推理核心pip install pix2tex然后写一个 Python 脚本调用模型。这种方式适合批量处理。需要注意 pix2tex 对裁剪后的干净公式图识别最好带噪声或倾斜的图要先预处理。4.3 当题目里带压-焓图、焓熵图时怎么用 OpenCV 做区域裁剪工程热力学考试题里的压焓图、焓熵图往往是整页扫描件里的一部分。直接用 Mathpix 识别整页图公式会被淹没。这时候需要先用 PyMuPDF 或 pdfplumber 提取图片区域再用 OpenCV 裁剪。下面是用 PyMuPDF 提取页面中所有图片的代码import fitz # PyMuPDF doc fitz.open(工程热力学期末考试题.pdf) for page_index in range(len(doc)): page doc[page_index] images page.get_images(fullTrue) for img_index, img in enumerate(images): xref img[0] base_image doc.extract_image(xref) image_bytes base_image[image] with open(fpage{page_index1}_img{img_index}.png, wb) as f: f.write(image_bytes)提取出的图片可能带着大片白边先用 OpenCV 做前景裁剪import cv2 import numpy as np img cv2.imread(page1_img0.png) gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) _, thresh cv2.threshold(gray, 200, 255, cv2.THRESH_BINARY_INV) coords cv2.findNonZero(thresh) x, y, w, h cv2.boundingRect(coords) crop img[y:yh, x:xw] cv2.imwrite(crop.png, crop)cv2.threshold的阈值 200 是根据白底黑线公式图算的。压-焓图通常有网格线阈值过高会丢线条过低会把网格当成前景导致裁切范围变大。实际调参时可以把阈值从 180 到 230 每次加 10分别保存结果看哪个裁剪出的矩形最贴近实际图线区域。工程热力学期末考试题里的图大多是黑白印刷所以二值化效果比彩色图更稳定。5. 把结构化后的题库接进 Anki 或自建小系统的一个具体技巧题库结构化完成后最常用的产出是导入 Anki 做间隔重复复习。这里有一个容易被忽略的坑Anki 的 CSV 导入默认使用 UTF-8 编码但 Windows 下的 Excel 打开会乱码。所以导出 CSV 时一定要带 BOM。5.1 生成可直接导入 Anki 的 CSV 文件模板Anki 导入模板很简单一行一条记录字段之间用逗号分隔。如果字段内容包含换行需要用\n转义但 Anki 支持 HTML 标签所以我会把换行替换成br。import csv def to_anki_csv(questions, output_path): with open(output_path, w, newline, encodingutf-8-sig) as f: writer csv.writer(f) writer.writerow([题干, 选项, 答案, 解析]) for q in questions: stem q[raw].replace(\n, br) options q.get(options, ) answer q.get(answer, ) analysis q.get(analysis, ) writer.writerow([stem, options, answer, analysis])encodingutf-8-sig会把 BOM 写进文件这样 Excel 打开不再乱码Anki 导入时也不会自动识别成其他编码。选项字段可以用分号分隔Anki 侧的卡片模板里再用条件替换拆成A..B..C..。5.2 验证题库完整性的一个快速脚本导入 Anki 之前先跑一遍完整性检查比在手机上发现漏题再回头改效率高得多。我写了一个 30 行的验证脚本专门检查工程热力学期末考试题拆分后是否缺题、缺选项、缺答案。def validate(questions): errors [] ids [q[id] for q in questions] if len(ids) ! len(set(ids)): errors.append(存在重复题号) for q in questions: if len(q[raw]) 5: errors.append(f题号 {q[id]} 题干过短) if q.get(type) choice: if len(q.get(options, ).split(;)) 2: errors.append(f题号 {q[id]} 选项不足) if not q.get(answer): errors.append(f题号 {q[id]} 缺少答案) return errors这个脚本会输出所有异常不会自动修复。检查时优先看“缺少答案”因为有些工程热力学期末考试题的答案在试卷末尾而不是题后需要单独匹配。如果答案全部集中在末尾先按题号建立索引再完成答案回填最后用这个验证函数确认覆盖。这个流程跑通以后再拿到别的科目的 PDF只需要改题号正则和答案位置参数剩下的逻辑全部复用。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价