基于python的PDF文件解析器汇总
基于python的PDF文件解析器汇总
大多数已发表的科学文献目前以 PDF 格式存在,这是一种轻量级、普遍的文件格式,能够保持一致的文本布局和格式。对于人类读者而言, PDF格式的文件内容展示整洁且一致的布局有助于阅读,可以很容易地浏览一篇论文并识别标题和图表。但是对于计算机而言,PDF 格式是一个非常嘈杂的 ASCII 文件,并不包含任何结构化文本的信息。因此,我们期望从这些已经发表的PDF格式科学文献中重新提取文字、图片、表格、注释、目录等数据来构建格式化的信息用于机器学习,例如目前最需要大量文本数据的自然语言处理(Natural Language Processing, NLP)或大语言模型(Large Language Modles ,LLMs)等应用中。
1. Nougat
Nougat (Neural Optical Understanding for Academic Documents)是Meta出品的一款基于ViT(Visual Transformer)的模型,通过光学字符识别(Optical Character Recognition, OCR)将科学论文转化为标记语言。
-
最新发布时间:2023年8月22日
-
GitHub address: GitHub - facebookresearch/nougat: Implementation of Nougat Neural Optical Understanding for Academic Documents
-
Project page: Nougat
1.1 安装
# from pip:
pip install nougat-ocr# or from github repository
pip install git+https://github.com/facebookresearch/nougat
1.2 测试
nougat path/to/file.pdf --out output_directory
1.3 用法
usage: nougat [-h] [--batchsize BATCHSIZE] [--checkpoint CHECKPOINT] [--model MODEL] [--out OUT][--recompute] [--markdown] [--no-skipping] pdf [pdf ...]positional arguments:pdf PDF(s) to process.options:-h, --help show this help message and exit--batchsize BATCHSIZE, -b BATCHSIZEBatch size to use.--checkpoint CHECKPOINT, -c CHECKPOINTPath to checkpoint directory.--model MODEL_TAG, -m MODEL_TAGModel tag to use.--out OUT, -o OUT Output directory.--recompute Recompute already computed PDF, discarding previous predictions.--full-precision Use float32 instead of bfloat16. Can speed up CPU conversion for some setups.--no-markdown Do not add postprocessing step for markdown compatibility.--markdown Add postprocessing step for markdown compatibility (default).--no-skipping Don't apply failure detection heuristic.--pages PAGES, -p PAGESProvide page numbers like '1-4,7' for pages 1 through 4 and page 7. Only works
1.4 优劣限制
-
- Nougat模型的训练数据几乎全是英文文献,因此对非英文文字的识别有待考证。特别是中文与英文和拉丁文体相差较大,因此中文文献的识别情况还很难说。
-
- 依旧是训练数据,训练数据全部为科学论文(来自于arXiv、PMC和IDL),因此对科学论文的识别精度较高,除此之外的PDF文档的识别效率依旧有待考证和进一步的优化。
-
- 由于这种方法是基于深度学习算法,因此在识别PDF文档时不可避免的需要使用GPU算力,且通常比经典方法(GROBID )要慢。
2. ScienceBeam Parser
- Githu address:ScienceBeam
2.1 安装
pip install sciencebeam-parser
2.2 测试
Python API: 服务器启动
from sciencebeam_parser.config.config import AppConfig
from sciencebeam_parser.resources.default_config import DEFAULT_CONFIG_FILE
from sciencebeam_parser.service.server import create_appconfig = AppConfig.load_yaml(DEFAULT_CONFIG_FILE)
app = create_app(config)
app.run(port=8080, host='127.0.0.1', threaded=True)
Python API: 解析PDF文件
from sciencebeam_parser.resources.default_config import DEFAULT_CONFIG_FILE
from sciencebeam_parser.config.config import AppConfig
from sciencebeam_parser.utils.media_types import MediaTypes
from sciencebeam_parser.app.parser import ScienceBeamParserconfig = AppConfig.load_yaml(DEFAULT_CONFIG_FILE)# the parser contains all of the models
sciencebeam_parser = ScienceBeamParser.from_config(config)# a session provides a scope and temporary directory for intermediate files
# it is recommended to create a separate session for every document
with sciencebeam_parser.get_new_session() as session:session_source = session.get_source('example.pdf',MediaTypes.PDF)converted_file = session_source.get_local_file_for_response_media_type(MediaTypes.TEI_XML)# Note: the converted file will be in the temporary directory of the sessionprint('converted file:', converted_file)
3. pdfrw
3.1 安装
pip install pdfrw
3.2 测试
from pdfrw import PdfReader
def get_pdf_info(path):pdf = PdfReader(path)print(pdf.keys())print(pdf.Info)print(pdf.Root.keys())print('PDF has {} pages'.format(len(pdf.pages)))if __name__ == '__main__':get_pdf_info('example.pdf')
4. PDFQuery
4.1 安装
pip install pdfquery
4.2 测试
from pdfquery import PDFQuerypdf = PDFQuery('example.pdf')
pdf.load()# Use CSS-like selectors to locate the elements
text_elements = pdf.pq('LTTextLineHorizontal')# Extract the text from the elements
text = [t.text for t in text_elements]print(text)
5. pdfminer.six
-
GitHub address:pdfminer.six
-
最新发布时间:2023年12月28日
5.1 安装
pip install pdfminer.six
5.2 测试
from pdfminer.high_level import extract_texttext = extract_text("example.pdf")
print(text)
5.3 功能
- 支持各种字体类型(Type1、TrueType、Type3 和 CID)。
- 支持提取图像(JPG、JBIG2、Bitmaps)。
- 支持各种压缩方式(ASCIIHexDecode、ASCII85Decode、LZWDecode、FlateDecode、RunLengthDecode、CCITTFaxDecode)。
- 支持 RC4 和 AES 加密。
- 支持提取 AcroForm 交互式表单。
- 提取目录。
- 提取标记内容。
- 自动布局分析。
6. SciPDF Parser
基于GROBID (GeneRation Of BIbliographic Data))
-
Github address: SciPDF Parser
-
最新发布时间:
6.1 安装
# from pip
pip install scipdf-parser# or from github respository
pip install git+https://github.com/titipata/scipdf_parser
6.2 测试
在解析PDF之前需要先运行GROBID
bash serve_grobid.sh
该脚本将会运行 GROBID在默认端口:8070
以下为python 解析PDF文件的脚本。
import scipdf
article_dict = scipdf.parse_pdf_to_dict('example_data/futoma2017improved.pdf') # return dictionary# option to parse directly from URL to PDF, if as_list is set to True, output 'text' of parsed section will be in a list of paragraphs instead
article_dict = scipdf.parse_pdf_to_dict('https://www.biorxiv.org/content/biorxiv/early/2018/11/20/463760.full.pdf', as_list=False)# output example
>> {'title': 'Proceedings of Machine Learning for Healthcare','abstract': '...','sections': [{'heading': '...', 'text': '...'},{'heading': '...', 'text': '...'},...],'references': [{'title': '...', 'year': '...', 'journal': '...', 'author': '...'},...],'figures': [{'figure_label': '...', 'figure_type': '...', 'figure_id': '...', 'figure_caption': '...', 'figure_data': '...'},...],'doi': '...'
}xml = scipdf.parse_pdf('("example.pdf', soup=True) # option to parse full XML from GROBID
7. pdfplumber
-
GitHub address: pdfplumber
-
最新发布时间:2024年3月7日
7.1 安装
pip install pdfplumber
7.2 测试
pdfplumber < example.pdf > background-checks.csv
7.3 用法
| 参数 | 描述 |
|---|---|
--format [format] | csv or json. The json format returns more information; it includes PDF-level and page-level metadata, plus dictionary-nested attributes. |
--pages [list of pages] | A space-delimited, 1-indexed list of pages or hyphenated page ranges. E.g., 1, 11-15, which would return data for pages 1, 11, 12, 13, 14, and 15. |
--types [list of object types to extract] | Choices are char, rect, line, curve, image, annot, et cetera. Defaults to all available. |
--laparams | A JSON-formatted string (e.g., '{"detect_vertical": true}') to pass to pdfplumber.open(..., laparams=...). |
--precision [integer] | The number of decimal places to round floating-point numbers. Defaults to no rounding. |
7.4 python package usage
import pdfplumberwith pdfplumber.open("example.pdf") as pdf:first_page = pdf.pages[0]print(first_page.chars[0])
8. borb
8.0 简介
borb 是一个纯 Python 库,用于读取、写入和操作 PDF 文档。它将 PDF 文档表示为嵌套列表、字典和基本数据类型(数字、字符串、布尔值等)的类似 JSON 的数据结构。
-
Github address: borb
-
最新发布时间:2024年5月
8.1 安装
- 下载地址: borb · PyPI
# from pip
pip install borb# reinstalled the latest version (rather than using its internal cache)
pip uninstall borb
pip install --no-cache borb
8.2 测试(创建pdf)
from pathlib import Pathfrom borb.pdf import Document
from borb.pdf import Page
from borb.pdf import SingleColumnLayout
from borb.pdf import Paragraph
from borb.pdf import PDF# create an empty Document
pdf = Document()# add an empty Page
page = Page()
pdf.add_page(page)# use a PageLayout (SingleColumnLayout in this case)
layout = SingleColumnLayout(page)# add a Paragraph object
layout.add(Paragraph("Hello World!"))# store the PDF
with open(Path("output.pdf"), "wb") as pdf_file_handle:PDF.dumps(pdf_file_handle, pdf)
8.3 功能
- 读取PDF并提取元信息
- 修改元信息
- 从PDF中提取文本
- 从PDF中提取图像
- 改变PDF中的图像
- 向PDF添加注释(笔记、链接等)
- 向PDF添加文本
- 向PDF添加表格
- 向PDF添加列表
- 使用页面布局管理器
9. PyPDF4
-
Github address:PyPDF4
-
最新发布时间:2018年8月8日
9.1 安装
pip install pypdf
9.2 测试
from pypdf import PdfReaderreader = PdfReader("example.pdf")
page = reader.pages[0]
print(page.extract_text())
相关文章:
基于python的PDF文件解析器汇总
基于python的PDF文件解析器汇总 大多数已发表的科学文献目前以 PDF 格式存在,这是一种轻量级、普遍的文件格式,能够保持一致的文本布局和格式。对于人类读者而言, PDF格式的文件内容展示整洁且一致的布局有助于阅读,可以很容易地…...
C++多线程同步总结
C多线程同步总结 关于C多线程同步 一、C11规范下的线程库 1、C11 线程库的基本用法:创建线程、分离线程 #include<iostream> #include<thread> #include<windows.h> using namespace std; void threadProc() {cout<<"this is in t…...
【机器学习】基于CNN-RNN模型的验证码图片识别
1. 引言 1.1. OCR技术研究的背景 1.1.1. OCR技术能够提升互联网体验 随着互联网应用的广泛普及,用户在日常操作中频繁遇到需要输入验证码的场景,无论是在登录、注册、支付还是其他敏感操作中,验证码都扮演着重要角色来确保安全性。然而&am…...
一文读懂Samtec分离式线缆组件选型 | 快速攻略
【摘要/前言】 2023年,全球线缆组件市场规模大致在2100多亿美元。汽车和电信行业是线缆组件最大的两个市场,中国和北美是最大的两个制造地区。有趣的是,特定应用(即定制)和矩形组件是两个最大的产品组。 【Samtec产品…...
批量申请SSL证书如何做到既方便成本又最低
假如您手头拥有1千个域名,并且打算为每一个域名搭建网站,那么在当前的网络环境下,您必须确保这些网站通过https的方式提供服务。这意味着,您将为每一个域名申请SSL证书,以确保网站数据传输的安全性和可信度。那么&…...
Python 设计模式(创建型)
文章目录 抽象工厂模式场景示例 单例模式场景实现方式 工厂方法模式场景示例 简单工厂模式场景示例 建造者模式场景示例 原型模式场景示例 抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种将一组相关…...
PyTorch 索引与切片-Tensor基本操作
以如下 tensor a 为例,展示常用的 indxing, slicing 及其他高阶操作 >>> a torch.rand(4,3,28,28) >>> a.shape torch.Size([4, 3, 28, 28])Indexing: 使用索引获取目标对象,[x,x,x,....] >>> a[0].shape torch.Size([3, 2…...
深入浅出 LangChain 与智能 Agent:构建下一代 AI 助手
我们小时候都玩过乐高积木。通过堆砌各种颜色和形状的积木,我们可以构建出城堡、飞机、甚至整个城市。现在,想象一下如果有一个数字世界的乐高,我们可以用这样的“积木”来构建智能程序,这些程序能够阅读、理解和撰写文本…...
scss是什么安装使⽤的步骤
当谈到SCSS时,我们首先需要了解它是什么。SCSS,也称为Sassy CSS,是Sass(Syntactically Awesome Stylesheets)的一种语法,它是CSS的预处理器,允许你使用变量、嵌套规则、混合(mixin&a…...
Pspark从hive读数据写到Pgsql数据库
前提条件 要使用PySpark从Hive读取数据并写入到PostgreSQL数据库,你需要确保以下几点: 你的PySpark环境已经配置好,并且能够连接到你的Hive数据。 PostgreSQL JDBC驱动程序已经添加到你的PySpark环境中。 你已经在PostgreSQL中创建好了相应…...
Pixi.js学习 (六)数组
目录 前言 一、数组 1.1 定义数组 1.2 数组存取与删除 1.3 使用数组统一操作敌机 二、实战 例题一:使用数组统一操作敌机 例题一代码: 总结 前言 为了提高作者的代码编辑水品,作者在使用博客的时候使用的集成工具为 HBuilderX。 下文所有截…...
操作系统复习-Linux的文件系统
文件系统概述 FAT FAT(File Allocation Table)FAT16、FAT32等,微软Dos/Windows使用的文件系统使用一张表保存盘块的信息 NTFS NTFS (New Technology File System)WindowsNT环境的文件系统NTFS对FAT进行了改进,取代了日的文件系统 EXT EXT(Extended…...
代码随想录算法训练营第三十六天| 860.柠檬水找零、 406.根据身高重建队列、 452. 用最少数量的箭引爆气球
LeetCode 860.柠檬水找零 题目链接:https://leetcode.cn/problems/lemonade-change/description/ 文章链接:https://programmercarl.com/0860.%E6%9F%A0%E6%AA%AC%E6%B0%B4%E6%89%BE%E9%9B%B6.html 思路 贪心算法:遇见20的时候有两种找零的…...
如何在C#中实现多线程
在C#中实现多线程有多种方式,包括使用System.Threading.Thread类、System.Threading.Tasks.Task类、System.Threading.Tasks.Parallel类以及异步编程模型(async和await)。下面我将为你展示每种方法的基本用法。 1. 使用System.Threading.Thread类 using System; using Syst…...
【LLM】快速了解Dify 0.6.10的核心功能:知识库检索、Agent创建和工作流编排(二)
【LLM】快速了解Dify 0.6.10的核心功能:知识库检索、Agent创建和工作流编排(二) 文章目录 【LLM】快速了解Dify 0.6.10的核心功能:知识库检索、Agent创建和工作流编排(二)一、创建一个简单的聊天助手&#…...
【介绍下Pandas,什么是Pandas?】
🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…...
linux系统安装anaconda,并通过java程序调用python程序
虚拟环境准备 首先准备一块空的分区,安装anaconda至少要20g以上才能执行简单程序,这里准备20G的磁盘空间 创建分区,执行以下步骤,之后执行reboot重启 fdisk /dev/sda p n 回车 回车 w查看当前系统创建的分区,我这里是名为sda3的…...
Stable diffusion的SDXL模型,针不错!(含实操)
与之前的SD1.5大模型不同,这次的SDXL在架构上采用了“两步走”的生图方式: 以往SD1.5大模型,生成步骤为 Prompt → Base → Image,比较简单直接;而这次的SDXL大模型则是在中间加了一步 Refiner。Refiner的作用是什么呢…...
wordpress轻量免费主题
WordPress建站公司 适合提供WordPress建站服务的公司或个体(个人)工作室使用的WordPress建站公司主题模板。 https://www.jianzhanpress.com/?p545 首屏大图红色简洁wordpress主题 首屏大图红色简洁wordpress主题,非常地高端大气上档次,可用于多个行…...
Go AfterFunc 不触发
前言 函数原型为: func AfterFunc(d Duration, f func()) *TimerGo 的 time.AfterFunc 的作用是等待指定的时间间隔,然后在它自己的 goroutine 中调用 f。 现在有一个问题,我明明调用了 AfterFunc,但是它还没调用我指定的函数&…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
