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

发布时间:2026/6/2 5:31:10

基于 Streamlit + PyMuPDF 的论文 PDF 信息抽取与 Excel 导出工具实战 论文资料整理最麻烦的地方往往不是“读不懂论文”而是要把一批 PDF 里的标题、作者、摘要、关键词、参考文献和页级文本统计整理成可复用表格。手动复制容易耗时也容易被 PDF 换行、页眉页脚、多栏排版和参考文献断行影响。本文围绕一个可直接运行的Streamlit PyMuPDF项目展示如何把真实论文 PDF 批量解析为结构化数据并导出 Excel、CSV、JSON 和 Markdown 报告。这次没有使用虚构样本文档而是下载并解析 3 篇公开论文 PDFTransformer、BERT 和 RAG。项目在本地实际运行后共处理 3 篇论文、50 页文本、144 条参考文献并使用真实 Streamlit 页面截图展示结果。流程图和系统框图采用清晰的中文说明图图中不额外放文章标题保证读者能直接理解处理链路。关键词Streamlit、PyMuPDF、论文 PDF 解析、关键词提取、参考文献抽取、Excel 导出、Python 项目实战真实样本与运行环境这个项目的目标很明确把“论文 PDF”变成“可以筛选、统计、复用的数据表”。实际测试使用的 3 篇论文都来自公开论文页面分别是Attention Is All You Need、BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding和Retrieval-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_nameNone,top_k_keywords12,summary_sentences4,min_keyword_len3):pdf_bytesread_pdf_bytes(source)inferred_namefile_nameoruploaded.pdfwithfitz.open(streampdf_bytes,filetypepdf)asdoc:metadatadict(doc.metadataor{})pagesextract_pages(doc)full_textnormalize_space(\n\n.join(page.textforpageinpages))titleextract_title_from_first_page(doc,full_text,metadata)authorsextract_authors(full_text,title)yearextract_year(full_text,metadata)doiextract_doi(full_text)abstractextract_abstract(full_text)keywordsextract_auto_keywords(full_text,extract_declared_keywords(full_text))referencesextract_references(full_text)真实论文解析时会遇到一些细节问题。例如 arXiv PDF 的页眉有时字体比标题更大如果只按“第一页最大字号”取标题就会把arXiv:1706.03762v7误识别为论文标题。因此项目增加了页眉噪声过滤优先排除 arXiv 编号、授权说明等非标题文本。BERT 论文的参考文献没有[1]这类编号而是作者年份格式所以参考文献分组同时支持编号制和作者年份制。defis_title_noise(line:str)-bool:lowerednormalize_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,flagsre.I)forpatterninnoise_patterns)导出部分使用 pandas 和 openpyxl把不同类型的信息拆成多个 Sheet。这样打开 Excel 后可以直接筛选论文概览、关键词、参考文献和页面文本统计。withpd.ExcelWriter(output_path,engineopenpyxl)aswriter:forsheet_name,frameinframes.items():frame.to_excel(writer,indexFalse,sheet_namesheet_name)worksheetwriter.book[sheet_name]worksheet.freeze_panesA2worksheet.auto_filter.refworksheet.dimensions真实运行截图与结果解读下面是本地streamlit run app.py后的真实页面截图。左侧可以调节关键词数量、摘要句数和英文关键词最小长度主区域展示上传入口、汇总指标和结构化字段表。当前截图解析的是 3 篇真实论文 PDF页面指标显示 50 页、144 条参考文献。离线脚本还会把论文概览保存成图片便于写报告或博客时快速展示。表格中可以看到三篇真实论文的标题已经被正确抽取页数分别为 15、16、19参考文献数量分别为 43、21、80。关键词页展示每篇论文的关键词明细。比如 Transformer 论文中出现了attention、sequence、transformer、self-attention等高频词BERT 论文中出现bert、pre-training、language等词RAG 论文则集中在rag、generation、retrieved、documents等主题上。批量关键词统计图由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。对于扫描版图片 PDFPyMuPDF 只能拿到很少文本需要增加 OCR 模块例如 PaddleOCR 或其他 OCR 服务。对于复杂双栏论文、页眉页脚严重干扰、参考文献格式特殊的 PDF规则抽取仍然需要按模板调参。这个项目的优势是轻量、可解释、可离线运行。它没有强制调用大模型也不需要 GPU 和模型权重。后续如果要升级可以沿着三个方向扩展第一接 OCR自动处理扫描论文第二接大模型摘要把抽取出的摘要和正文片段改写成更自然的中文总结第三接 RAG 知识库把每页文本切分成 chunk用向量检索支持问答。作为课程设计或 CSDN 源码项目建议先保证“真实 PDF 输入、真实页面截图、真实 Excel 导出”这条主线稳定再逐步加 OCR、大模型和知识库。这样项目既容易运行也容易向读者解释清楚。参考资料Attention Is All You Need PDFhttps://arxiv.org/pdf/1706.03762BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding PDFhttps://arxiv.org/pdf/1810.04805Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks PDFhttps://arxiv.org/pdf/2005.11401Wikimedia Commons 论文阅读场景图https://commons.wikimedia.org/wiki/File:Scholarly_journals_on_screens.jpgPyMuPDF Text Recipeshttps://pymupdf.readthedocs.io/en/latest/recipes-text.htmlStreamlit file uploader 文档https://docs.streamlit.io/develop/api-reference/widgets/st.file_uploaderpandas DataFrame.to_excelhttps://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_excel.html

相关新闻