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

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):
        # 图片的XREF
        xref = 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感觉好用点。

### 可用于读取论文文档(如PDF内容Python第三方库 以下是几个常用的Python第三方库,可用于读取和解析PDF文档中的内容: #### 1. **PyMuPDF** PyMuPDF 是一个功能强大的PDF处理库,能够高效地读取、修改导出PDF文件内容。它不仅支持访问PDF页面上的文本、图像以及路径等基本元素,还提供了诸如文本布局分析这样的高级特性[^1]。通过该工具,可以轻松实现对PDF文档中各类数据的提取。 ```python import fitz # PyMuPDF 的别名 doc = fitz.open("example.pdf") # 打开 PDF 文件 page = doc.load_page(0) # 加载第一页 text = page.get_text() # 提取页面文字 print(text) ``` --- #### 2. **pdfplumber** `pdfplumber` 库专注于从PDF文件中精准抽取结构化信息,特别是表格数据。其 `extract_tables()` 方法可以直接识别提取PDF内的表格内容能很方便地转换为Pandas DataFrame以便进一步操作[^2]。 ```python import pdfplumber import pandas as pd with pdfplumber.open("example.pdf") as pdf: first_page = pdf.pages[0] tables = first_page.extract_tables() for table in tables: df = pd.DataFrame(table) print(df) ``` --- #### 3. **LangChain** 虽然 LangChain 主要被设计用来构建大型语言模型的应用程序框架,但它同样具备加载与解析PDF的功能,在某些场景下可以帮助用户完成复杂的文档自动化任务[^3]。例如,可以通过集成其他组件来增强对于学术文章的理解能力或者优化检索效率。 --- #### 4. **通用方法:结合多个库** 有时单独依靠某个单一库可能无法满足需求,这时可考虑综合运用多种技术手段。比如先利用上述提到过的任意一种方式获取原始资料后再配合正则表达式或者其他专门针对自然语言处理(NLP)方向开发出来的模块做深入挖掘工作。 此外,《Python库大全》列举了许多不同领域下的优秀开源项目资源列表[^4],其中不乏涉及网络爬虫、数据库管理、数据分析乃至图形界面创建等方面的知识点介绍;而有关于如何有效拆分大段落叙述部分,则可以从《第一阶段:加载文件-读取文件-文本分割(Text splitter)》一节找到灵感[^5]——即采用合适的策略把整体分成易于理解的小单元再逐一攻克难关! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值