news 2026/6/2 5:30:54

基于 Streamlit + PyMuPDF 的论文 PDF 信息抽取与 Excel 导出工具实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于 Streamlit + PyMuPDF 的论文 PDF 信息抽取与 Excel 导出工具实战

论文资料整理最麻烦的地方,往往不是“读不懂论文”,而是要把一批 PDF 里的标题、作者、摘要、关键词、参考文献和页级文本统计整理成可复用表格。手动复制容易耗时,也容易被 PDF 换行、页眉页脚、多栏排版和参考文献断行影响。本文围绕一个可直接运行的Streamlit + PyMuPDF项目,展示如何把真实论文 PDF 批量解析为结构化数据,并导出 Excel、CSV、JSON 和 Markdown 报告。

这次没有使用虚构样本文档,而是下载并解析 3 篇公开论文 PDF:Transformer、BERT 和 RAG。项目在本地实际运行后共处理 3 篇论文、50 页文本、144 条参考文献,并使用真实 Streamlit 页面截图展示结果。流程图和系统框图采用清晰的中文说明图,图中不额外放文章标题,保证读者能直接理解处理链路。

关键词:Streamlit、PyMuPDF、论文 PDF 解析、关键词提取、参考文献抽取、Excel 导出、Python 项目实战

真实样本与运行环境

这个项目的目标很明确:把“论文 PDF”变成“可以筛选、统计、复用的数据表”。实际测试使用的 3 篇论文都来自公开论文页面,分别是Attention Is All You NeedBERT: Pre-training of Deep Bidirectional Transformers for Language UnderstandingRetrieval-Augmented Generation for Knowledge-Intensive NLP Tasks。它们都是原生文本 PDF,适合验证 PyMuPDF 的页面文本解析、字段抽取和参考文献分组能力。

真实论文阅读场景通常会同时打开 PDF、网页资料、笔记和导出表格。下图来自 Wikimedia Commons,用来说明项目所面向的资料整理场景:用户不是只看一篇论文,而是需要把多篇论文的信息汇总到统一结构里。

运行环境建议使用 Python 3.10+。验证时只补充安装缺失依赖,不主动降级或大范围改动已有依赖。最终验证命令如下:

python run_demo.py streamlit run app.py

离线脚本实际输出结果为:处理论文 3 篇、总页数 50 页、参考文献 144 条,Excel 文件保存到outputs/extraction_result.xlsx。这些数字来自真实 PDF 解析结果,不是手写示例数据。

系统流程与模块设计

项目采用轻量工程结构:app.py负责 Streamlit 页面,run_demo.py负责离线批量演示,src/pdf_parser.py负责 PDF 文本解析和字段抽取,src/exporter.py负责 Excel/CSV/JSON/Markdown 导出,src/visualizer.py负责生成结果图表。

下面的流程图用中文标签标出真实处理链路。用户上传或选择真实论文 PDF 后,系统先逐页解析文本,再抽取标题、摘要、关键词和参考文献,最后生成表格、报告和截图图表。

模块之间保持低耦合:Web 页面只调用解析函数和导出函数,不直接写复杂规则;解析模块只返回结构化PaperRecord;导出模块只处理 DataFrame 和文件保存。这种拆分适合课程设计、办公工具和二次开发,因为每个环节都能单独替换。

系统框图同样使用中文标注。左侧是用户入口、离线调度和图表生成,右侧是文本解析、字段抽取和报告导出,数据在模块之间按结构化对象传递。

核心代码实现

PDF 解析的入口是parse_pdf()。它既支持本地文件路径,也支持 Streamlit 上传文件的二进制内容,因此同一套解析逻辑可以同时服务离线脚本和 Web 页面。

defparse_pdf(source,file_name=None,top_k_keywords=12,summary_sentences=4,min_keyword_len=3):pdf_bytes=read_pdf_bytes(source)inferred_name=file_nameor"uploaded.pdf"withfitz.open(stream=pdf_bytes,filetype="pdf")asdoc:metadata=dict(doc.metadataor{})pages=extract_pages(doc)full_text=normalize_space("\n\n".join(page.textforpageinpages))title=extract_title_from_first_page(doc,full_text,metadata)authors=extract_authors(full_text,title)year=extract_year(full_text,metadata)doi=extract_doi(full_text)abstract=extract_abstract(full_text)keywords=extract_auto_keywords(full_text,extract_declared_keywords(full_text))references=extract_references(full_text)

真实论文解析时会遇到一些细节问题。例如 arXiv PDF 的页眉有时字体比标题更大,如果只按“第一页最大字号”取标题,就会把arXiv:1706.03762v7误识别为论文标题。因此项目增加了页眉噪声过滤,优先排除 arXiv 编号、授权说明等非标题文本。BERT 论文的参考文献没有[1]这类编号,而是作者年份格式,所以参考文献分组同时支持编号制和作者年份制。

defis_title_noise(line:str)->bool:lowered=normalize_space(line).lower()noise_patterns=[r"^arxiv:\d{4}\.\d+",r"^provided proper attribution",r"^reproduce the tables and figures",]returnany(re.search(pattern,lowered,flags=re.I)forpatterninnoise_patterns)

导出部分使用 pandas 和 openpyxl,把不同类型的信息拆成多个 Sheet。这样打开 Excel 后可以直接筛选论文概览、关键词、参考文献和页面文本统计。

withpd.ExcelWriter(output_path,engine="openpyxl")aswriter:forsheet_name,frameinframes.items():frame.to_excel(writer,index=False,sheet_name=sheet_name)worksheet=writer.book[sheet_name]worksheet.freeze_panes="A2"worksheet.auto_filter.ref=worksheet.dimensions

真实运行截图与结果解读

下面是本地streamlit run app.py后的真实页面截图。左侧可以调节关键词数量、摘要句数和英文关键词最小长度;主区域展示上传入口、汇总指标和结构化字段表。当前截图解析的是 3 篇真实论文 PDF,页面指标显示 50 页、144 条参考文献。

离线脚本还会把论文概览保存成图片,便于写报告或博客时快速展示。表格中可以看到三篇真实论文的标题已经被正确抽取,页数分别为 15、16、19,参考文献数量分别为 43、21、80。

关键词页展示每篇论文的关键词明细。比如 Transformer 论文中出现了attentionsequencetransformerself-attention等高频词;BERT 论文中出现bertpre-traininglanguage等词;RAG 论文则集中在raggenerationretrieveddocuments等主题上。

批量关键词统计图由src/visualizer.py根据真实全文解析结果生成,不是手工绘制。它适合放在课程设计或论文综述报告中,用来说明这一批论文的主题分布。

参考文献页可以检查分组效果。真实 PDF 中的参考文献经常断行,项目会先定位References区域,再按编号制或作者年份制进行合并。下图展示的是 Streamlit 中的参考文献抽取结果。

运行方法与交付内容

安装依赖后,先运行离线脚本验证解析和导出:

python-mpipinstall-rrequirements.txt python run_demo.py

运行成功后会生成以下核心文件:

outputs/extraction_result.xlsx outputs/data/paper_summary.csv outputs/data/keywords.csv outputs/data/references.csv outputs/data/pages.csv outputs/data/extraction_result.json outputs/reports/attention_is_all_you_need_arxiv_1706_03762_report.md outputs/reports/bert_pretraining_arxiv_1810_04805_report.md outputs/reports/rag_knowledge_intensive_arxiv_2005_11401_report.md

如果需要浏览器交互页面,运行:

streamlit run app.py

资源包中包含完整源码、真实论文 PDF 样本、运行脚本、配置文件、输出结果和说明文档。博客包中包含正文 Markdown、属性文件和所有配图,可直接用于发布或继续微调。

项目边界与扩展方向

当前版本主要面向原生文本 PDF。对于扫描版图片 PDF,PyMuPDF 只能拿到很少文本,需要增加 OCR 模块,例如 PaddleOCR 或其他 OCR 服务。对于复杂双栏论文、页眉页脚严重干扰、参考文献格式特殊的 PDF,规则抽取仍然需要按模板调参。

这个项目的优势是轻量、可解释、可离线运行。它没有强制调用大模型,也不需要 GPU 和模型权重。后续如果要升级,可以沿着三个方向扩展:第一,接 OCR,自动处理扫描论文;第二,接大模型摘要,把抽取出的摘要和正文片段改写成更自然的中文总结;第三,接 RAG 知识库,把每页文本切分成 chunk,用向量检索支持问答。

作为课程设计或 CSDN 源码项目,建议先保证“真实 PDF 输入、真实页面截图、真实 Excel 导出”这条主线稳定,再逐步加 OCR、大模型和知识库。这样项目既容易运行,也容易向读者解释清楚。

参考资料

  • Attention Is All You Need PDF:https://arxiv.org/pdf/1706.03762
  • BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding PDF:https://arxiv.org/pdf/1810.04805
  • Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks PDF:https://arxiv.org/pdf/2005.11401
  • Wikimedia Commons 论文阅读场景图:https://commons.wikimedia.org/wiki/File:Scholarly_journals_on_screens.jpg
  • PyMuPDF Text Recipes:https://pymupdf.readthedocs.io/en/latest/recipes-text.html
  • Streamlit file uploader 文档:https://docs.streamlit.io/develop/api-reference/widgets/st.file_uploader
  • pandas DataFrame.to_excel:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_excel.html
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/2 5:30:22

数据科学与AI入门实战指南:从Python基础到项目部署全路径解析

1. 项目概述:为什么现在学数据科学和AI,以及如何开始如果你最近在技术社区、招聘网站或者朋友圈里频繁看到“数据科学”、“机器学习”、“人工智能”这些词,并且心里有点痒痒,但又觉得门槛太高、无从下手,那你来对地方…

作者头像 李华
网站建设 2026/6/2 5:27:57

用STM32G431做个液位监测仪:从蓝桥杯真题到实际项目(附完整工程)

从竞赛到实战:基于STM32G431的智能液位监测系统开发指南在嵌入式系统开发领域,竞赛题目往往聚焦于特定功能的实现,而真实世界应用则需要考虑更多维度的因素。本文将带您从蓝桥杯嵌入式竞赛题目出发,构建一个完整的工业级液位监测系…

作者头像 李华
网站建设 2026/6/2 5:27:55

蛋白质组学检测中【抗体芯片】与【质谱检测】的差异解析

蛋白质是生命体各项生理活动的核心功能载体,是生命机制研究的关键对象,随着生命科学研究的深入,蛋白质组学的科研与应用价值愈发凸显。人体蛋白质体系结构复杂、来源多样,精准高效的检测技术,是挖掘蛋白功能、解析疾病…

作者头像 李华
网站建设 2026/6/2 5:27:55

ARM PMU性能监控单元架构与实战配置详解

1. ARM PMU性能监控单元架构解析性能监控单元(PMU)是现代处理器中用于硬件级性能分析的核心模块。在ARMv8/v9架构中,PMUv3实现了高度可配置的事件监控体系,能够精确统计CPU周期、指令执行、缓存命中等关键指标。不同于简单的计数器,ARM PMU提…

作者头像 李华
网站建设 2026/6/2 5:23:03

从数据洪流到用户洞察:构建动态画像与精准分析实战

1. 项目概述:从数据洪流中看清你的用户在今天的商业环境中,我们常常感觉自己被淹没在数据的海洋里。后台的日活、月活数字,电商平台的点击流,社交媒体上的互动记录,客服系统的对话文本……这些数据每天都在以惊人的速度…

作者头像 李华