xmc0001 2024-03-12 23:02 采纳率: 0%
浏览 77

python怎么处理在提取pdf中的表格跨页问题

_求解怎么处理在提取pdf中的表格跨页问题
用chatgpt跑的代码总解决不了。。
以下是代码:

import pdfplumber
import os
import re
import pandas as pd

# 创建一个新的 DataFrame 以保存提取的数据
data = {
    '时间': [],
    '基金公司': [],
    '产品名称': [],
    '投资reits名称': [],
    '持有份额': [],
    '公允价值': [],
    '占基金总净值比例(%)': []
}

# 设置 PDF 文件夹路径
pdf_folder_path = '/Users/xueminchun/Desktop/中泰Reits行研实习/汇添富FOF季报'

# 处理每个 PDF 文件
for pdf_file_name in os.listdir(pdf_folder_path):
    if pdf_file_name.endswith('.pdf'):
        pdf_file_path = os.path.join(pdf_folder_path, pdf_file_name)

        # 打开 PDF 文件
        with pdfplumber.open(pdf_file_path) as pdf:
            # 处理每一页
            for page_number in range(len(pdf.pages)):
                current_page = pdf.pages[page_number]
                text = current_page.extract_text()

                # 1. 提取“时间”列表
                match_time = re.search(r'2023年第[34]季度报告', text)
                if match_time:
                    data['时间'].append(match_time.group())
                else:
                    data['时间'].append(None)

                # 2. 提取“基金公司”列表
                match_fund_company = re.search(r'基金管理人:\s*(\S+)', text)
                if match_fund_company:
                    data['基金公司'].append(match_fund_company.group(1))
                else:
                    data['基金公司'].append(None)

                # 3. 提取“产品名称”列表
                lines = text.split('\n')
                for i, line in enumerate(lines):
                    if 'FOF' in line:
                        product_name_match = re.search(r'^(.*?FOF)', line)
                        product_name = product_name_match.group(1).strip() if product_name_match else None
                        data['产品名称'].append(product_name)
                        break
                else:
                    data['产品名称'].append(None)

                # 处理“6.1.1”部分的数据提取
                if "6.1.1" in text:
                    tables = current_page.extract_tables()
                    for table in tables:
                        for row in table[1:]:  # 跳过表头
                            # 确保行数据长度一致,不足的部分用空值填充
                            while len(row) < 6:
                                row.append("")  # 使用空字符串填充不足的部分
                            data['投资reits名称'].append(row[2])
                            data['持有份额'].append(row[3])
                            data['公允价值'].append(row[4])
                            data['占基金总净值比例(%)'].append(row[5])

# 将最终的数据保存为 DataFrame
df = pd.DataFrame(data)

print(df)

# 保存 DataFrame 到 Excel 文件
excel_path = 'extracted_data.xlsx'
df.to_excel(excel_path, index=False)

print(f'提取的数据已保存到 {excel_path}')

有的pdf中的表格是跨页的
如图:

img

  • 写回答

2条回答 默认 最新

  • GISer Liu 2024-03-13 00:53
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    根据你提供的代码和问题描述,处理提取 PDF 中跨页表格的问题需要一些额外的处理。通常情况下,跨页的表格在 PDF
    中可能被拆分成多个部分,需要将这些部分组合起来处理。以下是解决这个问题的思路和方案:

    解决思路:

    1. 检测跨页表格: 在处理每一页时,检查当前页面是否包含表格内容,如果是,则需要判断该表格是否跨页。
    2. 跨页表格处理: 如果表格跨页,需要将跨页的部分合并到同一个表格中,以便后续提取数据。
    3. 表格数据提取: 通过 PDF 解析库提取表格数据,并将数据存储到 DataFrame 中。

      解决方案:

      1. 检测跨页表格:

      在处理每一页时,可以检查页面中是否包含表格内容。如果检测到表格内容,需要判断表格是否跨页。
      pythonCopy code
      # 检测当前页面是否包含表格内容
      if current_page.find_tables():
      # 处理跨页表格
      # 在这里实现跨页表格处理的代码
      

      2. 跨页表格处理:

      跨页表格可能会被拆分成多个部分,需要将这些部分组合成完整的表格。可以通过判断表格的位置和大小来确定是否为同一个表格的不同部分。
      pythonCopy code
      # 获取当前页面的所有表格
      tables = current_page.extract_tables()
      # 判断是否存在跨页表格
      if len(tables) > 1:
      # 处理跨页表格,将多个部分合并成完整的表格
      complete_table = []
      for table in tables:
      complete_table.extend(table)
      else:
      # 当前页面只有一个表格,直接使用即可
      complete_table = tables[0]
      

      3. 表格数据提取:

      对于完整的表格数据,可以按照原有的逻辑提取数据,并将数据存储到 DataFrame 中。
      pythonCopy code
      # 处理完整的表格数据提取
      for row in complete_table[1:]:  # 跳过表头
      # 提取数据并存储到 DataFrame 中
      

      总结:

      以上是处理提取 PDF
      中跨页表格的思路和解决方案。通过检测跨页表格、跨页表格处理和表格数据提取,可以有效解决这个问题。根据以上方案,你可以在原有代码的基础上进行修改,实现跨页表格的正确提取。如果在实现过程中遇到问题,欢迎继续咨询。

    如果该回答解决了您的问题,请采纳!如果没有,请参考以下方案进行修订

    用户答题指南

    评论

报告相同问题?

问题事件

  • 修改了问题 3月12日
  • 创建了问题 3月12日

悬赏问题

  • ¥15 构建工单的总账影响在哪里查询或修改
  • ¥15 三个简单项目写完之后有重赏之后联系我
  • ¥15 python报内存不能read错误
  • ¥15 hexo安装这种情况怎么办
  • ¥100 找hCaptcha图形验证码自动识别解决方案
  • ¥15 启动pycharm出错
  • ¥15 Windows Script Host 无法找到脚本文件"C:\ProgramData\Player800\Cotrl.vbs”
  • ¥15 matlab自定义损失函数
  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy