当前位置: 首页 > news >正文

python读取学术论文PDF文件内容

目录

    • 1、PyPDF2
    • 2、pdfplumber
    • 3、PyMuPDF
    • 4、pdfminer
    • 总结

1、PyPDF2

PyPDF2 是一个常用的库,可以用来读取、合并、分割和修改PDF文件。读取pdf内容:

import PyPDF2# 打开PDF文件
with open('ELLK-Net_An_Efficient_Lightweight_Large_Kernel_Network_for_SAR_Ship_Detection.pdf', 'rb') as file:reader = PyPDF2.PdfReader(file)# 获取页面数num_pages = len(reader.pages)print(f"页面数: {num_pages}")# 读取每一页的文本for i in range(num_pages):page = reader.pages[i]text = page.extract_text()print(f"第 {i + 1} 页的内容:\n{text}")

结果如下:
在这里插入图片描述

效果: 可以看出,读取是从左往右,从上往下,文本内容读取的还挺全的,但是图片、表格都读不出来。

2、pdfplumber

pdfplumber 是一个功能强大的库,专门用于提取PDF文件中的文本和表格数据。读取PDF内容:

import pdfplumber# 打开PDF文件
with pdfplumber.open('example.pdf') as pdf:for i in range(len(pdf.pages)):page = pdf.pages[i]text = page.extract_text()print(f"第 {i + 1} 页的内容:\n{text}")

结果如下:
在这里插入图片描述

效果: 看结果,这个库读取PDF是一整行一整行读取的,当文档内容是两页的时候,两列同一行会被同时读取。看别人说读取表格方便,但是这里也没读取出来,具体如下图所示。
在这里插入图片描述

此外,使用table = page.extract_table()单独读取有表格的页,输出结果为None

3、PyMuPDF

PyMuPDF 是另一个高效的库,可以处理PDF文件,支持文本提取、图像提取等功能。读取pdf如下:

import fitz  # PyMuPDF
from PIL import Image
import io
# 打开PDF文件
doc = fitz.open('ELLK-Net_An_Efficient_Lightweight_Large_Kernel_Network_for_SAR_Ship_Detection.pdf')
for page_number,page in enumerate(doc):text = page.get_text()print(f"第 {page.number + 1} 页的内容:\n{text}")# 获取页面中的所有图片image_list = page.get_images(full=True)# 遍历所有图片for img_index, img in enumerate(image_list):# 图片的XREFxref = img[0]# 获取图片对象base_image = doc.extract_image(xref)# 获取图片的二进制数据image_bytes = base_image["image"]# 将二进制数据转为PIL图像image = Image.open(io.BytesIO(image_bytes))# # 左右翻转# image = image.transpose(method=Image.FLIP_LEFT_RIGHT)# 上下翻转image = image.transpose(method=Image.FLIP_TOP_BOTTOM)# 获取图片的扩展名image_ext = base_image["ext"]# 保存图片# with open(f"page_{page_number + 1}_img_{img_index + 1}.{image_ext}", "wb") as image_file:#     image_file.write(image_bytes)image.save(f"page_{page_number + 1}_img_{img_index + 1}.{image_ext}")print(f"第 {page_number + 1} 页中提取的图片 {img_index + 1} 已保存。")

读取效果如下:
在这里插入图片描述

效果:文字提取效果与PyPDF2差不多,不同点是遇到大的空格会直接换行。可以读取图片,我这里发现读取的图片需要上下翻转。插入的图片可以直接读取,但是流程图可能因为是visio画的,读取不出来。另外,三线表格还是没有读取出来。

4、pdfminer

pdfminer.six 是一个专注于从PDF文件中提取文本和元数据的库。读取PDF如下:

from pdfminer.high_level import extract_text# 提取文本
text = extract_text('example.pdf')
print(text)

读取结果:
在这里插入图片描述

效果: 读取结果整体空行多。读取方式按行读取,有左右两列的时候,哪一列先读到就读哪一列,因此顺序可能会错乱,就像上面结果图一项,该页内容先读取的右边的列。

总结

看网上的说法是:
PyPDF2:适合基本的PDF操作,如合并和提取文本。
pdfplumber:非常适合提取文本和表格。
PyMuPDF:功能强大,处理速度快,支持多种操作。
pdfminer.six:更适合复杂的文本提取需求。
但在读取类似上面这样的论文文档时,PyPDF2和PyMuPDF感觉好用点。

相关文章:

python读取学术论文PDF文件内容

目录 1、PyPDF22、pdfplumber3、PyMuPDF4、pdfminer总结 1、PyPDF2 PyPDF2 是一个常用的库,可以用来读取、合并、分割和修改PDF文件。读取pdf内容: import PyPDF2# 打开PDF文件 with open(ELLK-Net_An_Efficient_Lightweight_Large_Kernel_Network_for…...

5550 取数(max)

经验值:2000 时间限制:1000毫秒 内存限制:128MB 庐阳区2020年信息学竞赛试题 不许抄袭,一旦发现,直接清空经验! 题目描述 Description 盒子里面有N个球,每个球上都一个数。你每次可以取走一…...

Windows常用网络命令

ipconfig 功能:查看维护本地的IP地址 ipconfig 显示计算机中网络适配器的ip地址、子网掩码及默认网关。 ipconfig /all 显示所有网络适配器(网卡、拨号连接等)的完整tcp/ip配置信息。与不带参数的用法相比,它的信息更全更多&am…...

地磁传感器(学习笔记上)

在咱们地磁传感器里的开发板: 开发板上的地磁传感器型号是QMC5883L,它也是使用I2C与ESP32通信,I2C地址为0X0D。这个项目,我们使用地磁传感器QMC5883L计算方位角,最终,把开发板放平到桌子上,旋转…...

使用 NumPy 和 Matplotlib 进行高级数据可视化:实践指南

使用 NumPy 和 Matplotlib 进行高级数据可视化:实践指南 数据科学和工程实践中,NumPy 和 Matplotlib 是强大的组合工具。本文将进一步展示如何借助这两个库进行更复杂的可视化任务,例如创建多曲线、叠加图、动态可视化等场景。 一、环境准备…...

mysql 启动报错 ‘/var/run/mysqld/mysqld.sock‘

问题描述: Docker 拉取 Ubuntu镜像,启动ubuntu容器后 在里边安装mysql 当容器启动时,不将/var/lib/mysql 目录映射到宿主机时,mysql可以正常启动使用当容器启动时,将/var/lib/mysql 目录映射到宿主机后,my…...

JAVA基础:常用类 (习题笔记)

1,验证键盘输入的用户名不能为空,长度大于6,不能有数字。 提示:使用字符串String类的相关方法完成 package packagingClass;import java.util.Scanner;public class Exercises1 {//程序入口public static void main(String[] arg…...

element 按钮变形 el-button样式异常

什么都没动,element UI的按钮变形了,莫名其妙,连官网的也变形了,换了其它浏览器又正常, 难道这是element UI的问题?NO,是浏览器的插件影响到了!去扩展插件里面一个个关闭扩展&#x…...

Windows/Linux(服务器)查看显卡的名称

文章目录 1. 使用 nvidia-smi(适用于 NVIDIA 显卡)2. 使用 wmic 命令(Windows) 1. 使用 nvidia-smi(适用于 NVIDIA 显卡) 如果服务器上安装了 NVIDIA 驱动程序,可以使用 nvidia-smi 工具来查看…...

算法基础 - 时间复杂度和空间复杂度(万字长文详解)

文章目录 前言什么是算法效率时间复杂度定义作用类比理解 空间复杂度定义作用类比理解 大O表示法为什么需要?定义计算步骤1. 计算基本操作的执行次数 T(n)2. 确定 T(n) 的数量级(按规则)3. 使用大O表示法表示时间复杂度 常见复杂度O(1)说明案…...

【K8S系列】Kubernetes 中 Service IP 地址和端口不匹配问题及解决方案【已解决】

在 Kubernetes 中,Service 是实现 Pod 之间和 Pod 与外部之间通信的关键组件。Service 的 IP 地址和端口配置不当可能导致应用无法正常访问。本文将详细分析 Service IP 地址和端口不匹配的问题,常见原因及其解决方案。 一、问题描述 Service IP 地址和…...

10. 异常处理器

一、通过 注解 注册异常处理器 <?php namespace App\Exception\Handler;use App\Exception\FooException; use Hyperf\ExceptionHandler\ExceptionHandler; use Hyperf\HttpMessage\Stream\SwooleStream; use Swow\Psr7\Message\ResponsePlusInterface; use Throwable;use…...

python查询并安装项目所依赖的所有包

引言 如果需要进行代码的移植&#xff0c;肯定少不了在另一台pc或者服务器上进行环境的搭建&#xff0c;那么首先是要知道在已有的工程的代码中用到了哪些包&#xff0c;此时&#xff0c;如果是用人工去一个一个的代码文件中去查看调用了哪些包&#xff0c;这个工作甚是繁琐。…...

istio多主集群架构验证方法

istio单网格多集群架构搭建完成后&#xff0c;需要验证下当前集群是否可以发现对端集群&#xff0c;验证方法如下&#xff1a; 命名空间建议设置为&#xff1a;demo-dubbo deploy.yaml apiVersion: apps/v1 kind: Deployment metadata:finalizers:- kubebuilder.io/net.traf…...

Java全栈经典面试题剖析8】JavaSE高级 -- 线程同步、 线程通信、死锁、线程池

目录 面试题3.44 多线程的同步方式 面试题3.45 多线程安全问题怎么解决 面试题3.46 当一个线程进入一个对象的一个synchronized方法后&#xff0c;其它线程是否可进入此对象的其它方法? 面试题3.47 简述synchronized与java.util.concurrent.locks.Lock的异同&#xff…...

linux 驱动, struct file , struct node, private_data

首先是关于什么是 praviate_data : 来看看正点原子是怎么使用的。 网上找的一些资料&#xff1a; 总结一下&#xff1a; 1 私有数据 是 struct file特有的。 &#xff12;private_data 可以自己随便设置。 3 一般是在 open 函数中设置好&#xff0c;然后在 read, write 函…...

ubuntu 硬盘扩容

在 Linux 中&#xff0c;可以使用以下命令查看磁盘的使用情况和信息&#xff1a; 查看磁盘使用情况&#xff1a; df -h这个命令会显示所有文件系统的使用情况&#xff0c;以人类可读的格式&#xff08;例如 GB 或 MB&#xff09;。 查看磁盘分区和设备信息&#xff1a; lsblk这…...

cm211-1刷机教程镜像包

cm211-1刷机教程 包含镜像包酷看桌面 s905l3-l3b通用 镜像包&#xff1a;https://www.123684.com/s/WGAwjv-5tlv3 1.刷机教程 镜像为线刷镜像包&#xff0c;需要短接刷机 短接刷机&#xff0c;导入镜像包 开始即可。到100%就证明可以了。...

Android 15自定义设置导航栏与状态栏,EdgeToEdge适配

背景&#xff1a;android api 35&#xff0c;activity设置EdgeToEdge.enable((ComponentActivity) this)前提下 一、设置导航栏与状态栏颜色 设置的状态栏颜色&#xff0c;只需要设置fitsSystemWindows跟setOnApplyWindowInsetsListener xml设置&#xff1a; 代码&#xff1a;…...

设计模式概览

设计模式是一种在软件设计中被广泛使用的解决方案&#xff0c;旨在提高软件的可重用性、可维护性和可扩展性。设计模式可以分为三大类&#xff1a;创建型、结构型和行为型。 1、创建型模式 这些模式主要关注对象的创建过程&#xff0c;提供了不同的方式来创建对象&#xff0c…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像&#xff08;比如分辨率3000*3000的图像&#xff09;的办法&#xff0c;尤其是想把内存中的裸数据&#xff08;只有图像的数据&#xff0c;不包…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋

随着工业以太网的发展&#xff0c;其高效、便捷、协议开放、易于冗余等诸多优点&#xff0c;被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口&#xff0c;具有实时性、开放性&#xff0c;使用TCP/IP和IT标准&#xff0c;符合基于工业以太网的…...

comfyui 工作流中 图生视频 如何增加视频的长度到5秒

comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗&#xff1f; 在ComfyUI中实现图生视频并延长到5秒&#xff0c;需要结合多个扩展和技巧。以下是完整解决方案&#xff1a; 核心工作流配置&#xff08;24fps下5秒120帧&#xff09; #mermaid-svg-yP…...