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

python使用pdfplumber工具包加载pdf格式数据

说在前面

大问题,对于两栏pdf数据,我这边提取出来的数据发现它很离谱。

它居然直接忽略了两栏特性,直接将第1栏的句子拼接上了第2栏的句子

解决方法:pypdf2尝试后可以正确识别两栏数据,非常棒。

示例

pdfplumber代码

# 使用pdfplumber读取文件pdf_path = "./data/shakespeare.pdf"的第133页到1781页的数据,
# 并每200个words组成一个样本数据,每个样本数据单独一行,把所有分割的数据保存到txt文本中,和csv文件格式。
# 两种格式都要保存,csv有两列,第1列是id编号,第2列是每200个words数据。
# 问题:它对于两栏pdf数据不友好,它居然直接忽略的两栏,直接将第1栏的句子拼接上了第2栏的句子,很离谱,

import pdfplumber
import csv
from tqdm import tqdm

# PDF 文件路径
pdf_path = "./data/shakespeare.pdf"

# 输出文件路径
output_txt_path = "./data/shakespeare_samples.txt"
output_csv_path = "./data/shakespeare_samples.csv"


# 提取指定页码范围内的文本
def extract_text_from_pdf(pdf_path, start_page, end_page):
    text = ""
    with pdfplumber.open(pdf_path) as pdf:
        for page_num in tqdm(range(start_page - 1, end_page), desc="提取指定页码范围内的文本"):  # 页码从0开始
            text += pdf.pages[page_num].extract_text() + " "
    return text


# 分割文本为每200个单词一个样本
def split_text_into_samples(text, words_per_sample=200):
    words = text.split()
    samples = [" ".join(words[i:i + words_per_sample]) for i in tqdm(range(0, len(words), words_per_sample), desc="分割文本为每200个单词一个样本")]
    return samples


# 保存样本数据到TXT文件
def save_samples_to_txt(samples, output_path):
    with open(output_path, "w", encoding="utf-8") as txt_file:
        for sample in tqdm(samples, desc="保存样本数据到TXT文件"):
            txt_file.write(sample + "\n")


# 保存样本数据到CSV文件
def save_samples_to_csv(samples, output_path):
    with open(output_path, "w", newline="", encoding="utf-8") as csv_file:
        writer = csv.writer(csv_file)
        writer.writerow(["id", "text"])  # 写入表头
        for idx, sample in tqdm(enumerate(samples), desc="保存样本数据到CSV文件"):
            writer.writerow([idx + 1, sample])


# 主流程
if __name__ == "__main__":
    # 提取文本
    start_page = 134
    # end_page = 1782
    end_page = 140

    extracted_text = extract_text_from_pdf(pdf_path, start_page, end_page)

    # 分割为样本
    samples = split_text_into_samples(extracted_text, words_per_sample=200)

    # 保存到文件
    save_samples_to_txt(samples, output_txt_path)
    save_samples_to_csv(samples, output_csv_path)

    print(f"样本数据已保存到:\nTXT文件: {output_txt_path}\nCSV文件: {output_csv_path}")


http://www.kler.cn/a/420470.html

相关文章:

  • Cannot resolve symbol ‘ActivityThread‘ | Android 语法
  • 点云3DHarris角点检测算法推导
  • 蓝桥杯准备训练(lesson1,c++方向)
  • vscode 如何支持点击跳转函数,以C++为例,Python等其它编程语言同理,Visual Studio Code。
  • java将word docx pdf转换为图片(不需要额外下载压缩包,直接导入maven坐标)
  • Linux 系统中常用的命令
  • GaussDB TPOPS 搭建流程记录
  • 记录使用Spark计算订单明细表销量排行榜的实现
  • 流量特征分析
  • 【娱乐项目】竖式算术器
  • IDEA使用HotSwapHelper进行热部署
  • Docker Stack简介及使用
  • 近几年,GIS专业的五类就业方向!
  • vue2组件跨层级数据共享provide 和 inject
  • Unity类银河战士恶魔城学习总结(P156 Audio Settings音频设置)
  • 聚观早报 | 戴尔发布第三财季财报;REDMI K80屏幕细节
  • Android 车载虚拟化底层技术-Kernel4.19-Android10(双card)技术实现
  • 瀚高创库建表pgsql
  • linux的挂卸载
  • 【docker】多阶段构建与单阶段构建
  • leetcode每日一题(20241202)
  • BERT的中文问答系统36-2
  • Java GET请求 请求参数在Body中使用Json格式传参
  • 简单介绍下 VitePress 中的 vp-doc 和 vp-raw
  • Git:分支管理
  • 面试小札:JVM虚拟机