从 pdf 中提取表格

2024-01-07

我正在尝试从这个表中获取数据PDF https://www.dropbox.com/s/y3nivxhjvvzva7d/test1.pdf?dl=0。我尝试过 pdfminer 和 pypdf,运气不错,但我无法真正从表中获取数据。

This is what one of the tables looks like: enter image description here

如您所见,某些列标有“x”。我正在尝试将此表放入对象列表中。

这是到目前为止的代码,我现在正在使用 pdfminer。

# pdfminer test
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfdevice import PDFDevice, TagExtractor
from pdfminer.pdfpage import PDFPage, PDFTextExtractionNotAllowed
from pdfminer.converter import XMLConverter, HTMLConverter, TextConverter, PDFPageAggregator
from pdfminer.cmapdb import CMapDB
from pdfminer.layout import LAParams, LTTextBox, LTTextLine, LTFigure, LTImage
from pdfminer.image import ImageWriter
from cStringIO import StringIO
import sys
import os


def pdfToText(path):
    rsrcmgr = PDFResourceManager()
    retstr = StringIO()
    codec = 'utf-8'
    laparams = LAParams()
    device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
    fp = file(path, 'rb')
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    password = ''
    maxpages = 0
    caching = True
    pagenos = set()

    records = []
    i = 1
    for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password,
                                  caching=caching, check_extractable=True):
        # process page
        interpreter.process_page(page)

        # only select lines from the line containing 'Tool' to the line containing "1 The 'All'"
        lines = retstr.getvalue().splitlines()

        idx = containsSubString(lines, 'Tool')
        lines = lines[idx+1:]
        idx = containsSubString(lines, "1 The 'All'")
        lines = lines[:idx]

        for line in lines:
            records.append(line)
        i += 1

    fp.close()
    device.close()
    retstr.close()

    return records


def containsSubString(list, substring):
    # find a substring in a list item
    for i, s in enumerate(list):
        if substring in s:
            return i
    return -1


# process pdf
fn = '../test1.pdf'
ft = 'test.txt'

text = pdfToText(fn)
outFile = open(ft, 'w')
for i in range(0, len(text)):
    outFile.write(text[i])
outFile.close()

That produces a text file and it gets all of the text but, the x's don't have the spacing preserved. The output looks like this: enter image description here

x 在文本文档中只是单倍行距

现在,我只是生成文本输出,但我的目标是使用表中的数据生成一个 html 文档。我一直在寻找 OCR 示例,其中大多数看起来令人困惑或不完整。我愿意使用 C# 或任何其他可能产生我正在寻找的结果的语言。

EDIT:将会有多个这样的 pdf 文件,我需要从中获取表格数据。所有 pdf 的标题都是相同的(据我所知)。


我明白了,我走错了方向。我所做的是为 pdf 中的每个表格创建 png,现在我正在使用 opencv 和 python 处理图像。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 pdf 中提取表格 的相关文章

  • 如何使用我自己的自定义表单覆盖 django-rest-auth 中的表单?

    我正在使用 django rest auth 并尝试通过覆盖表单的方法之一来修复密码重置视图中的错误 尽管我已经使用不同的 django rest auth 表单成功完成了类似的操作 但我无法让它在这个表单上工作 无论我做什么 都会使用旧的
  • Python函数组成

    我尝试使用良好的语法来实现函数组合 这就是我所得到的 from functools import partial class compfunc partial def lshift self y f lambda args kwargs s
  • 在 PhotoImage 下调整图像大小

    我需要调整图像大小 但我想避免使用 PIL 因为我无法使其在 OS X 下工作 不要问我为什么 无论如何 因为我对 gif pgm ppm 感到满意 所以 PhotoImage 类对我来说没问题 photoImg PhotoImage fi
  • 如何调试 numpy 掩码

    这个问题与this one https stackoverflow com q 73672739 11004423 我有一个正在尝试矢量化的函数 这是原来的函数 def aspect good angle float planet1 goo
  • 当我从本地计算机更改为虚拟主机时,从 python 脚本调用 pdftotext 不起作用

    我编写了一个小的 python 脚本来解析 提取 PDF 中的信息 我在本地机器上测试了它 我有 python 2 6 2 和 pdftotext 版本 0 12 4 我正在尝试在我的虚拟主机服务器 dreamhost 上运行它 它有 py
  • Bokeh 中单独的节点和边缘悬停工具?

    我正在尝试为 Bokeh 中的节点和边缘获取单独的悬停工具提示 但未能使其正常工作 有人可以指出我做错了什么吗 我相信代码应该如下所示 from bokeh io import show output notebook from bokeh
  • 一个类似 dict 的 Python 类

    我想编写一个自定义类 其行为类似于dict 所以 我继承自dict 不过 我的问题是 我是否需要创建一个私有的dict我的成员 init 方法 我不明白这个有什么意义 因为我已经有了dict如果我只是继承自的行为dict 谁能指出为什么大多
  • Python:“直接”调用方法是否实例化对象?

    我是 Python 新手 在对我的对象进行单元测试时 我注意到一些 奇怪 的东西 class Ape object def init self print ooook def say self s print s def main Ape
  • Jupyter笔记本突然变得很慢

    我以前在anaconda环境下运行jupyter运行得很好 显示警告后 IOPub data rate exceeded The notebook server will temporarily stop sending output to
  • 在 pygame 中,我如何创建一个数据结构来跟踪调整大小事件和对象的坐标?

    我希望在调整屏幕大小后使鼠标事件与对象保持同步 有人告诉我需要创建一个数据结构来跟踪 调整事件大小 新坐标以匹配调整大小 如何使用简单的代数方程来完成此操作并将其集成到调整大小事件中以进行准确更新 反过来做 创建一个虚拟游戏地图 在绘制场景
  • 如何在 Python 中跟踪日志文件?

    我想在 Python 中提供 tail F 或类似内容的输出 而无需阻塞或锁定 我找到了一些非常旧的代码来做到这一点here http code activestate com recipes 436477 filetailpy 但我认为现
  • 无法将matplotlib安装到pycharm

    我最近开始使用Python速成课程学习Python编程 我陷入困境 因为我无法让 matplotlib 在 pycharm 中工作 我已经安装了pip 我已经通过命令提示符使用 pip 安装了 matplotlib 现在 当我打开 pych
  • RuntimeError(f"目录 '{directory}' 不存在") RuntimeError: 目录 'app/static' 不存在

    当我运行 server py 文件时出现错误 File C Users nawin AppData Local Programs Python Python38 lib site packages starlette staticfiles
  • 在 for 循环中访问 itertools 产品的元素

    我有一个列表列表 是附加 itertools 产品的一些其他结果的结果 我想要的是能够使用 for 循环访问列表列表中列表的每个元素 但我无法访问所有元素 我只能访问最后一个列表的元素 结果是一个非常巨大的列表列表 例如 1 2 4 3 6
  • 使用 Sphinx 时,如何记录没有文档字符串的成员?

    我正在为我发布的包编写文档 我发现您的文档越全面 人们就越容易找到您的包来使用 废话 实际上 我在充满爱心地编写代码的所有功能和细节方面获得了很多乐趣 然而 我对如何为类级变量编写与 Sphinx 兼容的文档感到完全困惑 特别是 我有一些e
  • Python RE(总之检查第一个字母是否区分大小写,其余部分不区分大小写)

    在下面的情况下 我想匹配字符串 Singapore 其中 S 应始终为大写 其余单词可能为小写或大写 但在下面的字符串 s 是小写的 它在搜索条件中匹配 任何人都可以让我知道如何实施吗 import re st Information in
  • 在 python 中使用高精度时间戳

    嘿 我正在使用 python 处理日期时间 我想知道解析这个时间戳的最佳方法是什么 时间戳是ISO标准 这里是一个例子 2010 06 19T08 17 14 078685237Z 现在到目前为止我已经使用过 time datetime d
  • 当训练和测试的特征数量不同时,如何处理生产环境中的One-Hot Encoding?

    在做某些实验时 我们通常在 70 上进行训练 在 33 上进行测试 但是 当您的模型投入生产时会发生什么 可能会发生以下情况 训练集 Ser Type Of Car 1 Hatchback 2 Sedan 3 Coupe 4 SUV 经过
  • 正则表达式 - 匹配不包含字符串的模式

    我对正则表达式很陌生 并且一直在寻找方法来做到这一点 但没有成功 给定一个字符串 我想删除以 abc 开头 以 abc 结尾且中间不包含 abc 的任何模式 如果我做 abc abc abc 它将匹配以 b 开头 以 abc 结尾并且中间包
  • 防止 Ada DLL 中的名称损坏

    有没有一种简单的方法可以防止在创建 Ada DLL 时 Ada 名称被破坏 这是我的 adb 代码 with Ada Text IO package body testDLL is procedure Print Call is begin

随机推荐

  • 在 Brunch 应用程序中使用 npm 模块会导致“找不到模块”

    我想使用这个节点库 https github com sudhirj simply deferred https github com sudhirj simply deferred I ran npm install simply def
  • ios7取消3次后无法登录游戏中心增益[重复]

    这个问题在这里已经有答案了 问题很奇怪 我的系统版本是IOS 7 在ios 7模拟器上一切正常 但是 当我尝试在 iPhone 上进行身份验证时 回调块中的错误始终是 GkErrorCanceled the requested operat
  • Objective C - 如何连接整个字符串数组?

    我是 Objective C 新手 我想编写一个方法 它接受一个字符串数组并返回一个连接字符串 每个字符串之间有一个逗号 所以如果一个数组是 a b c d 我想返回a b c d 最简单的方法是什么 方法有很多种 最简单的就是 yourA
  • 如何在Python脚本中设置PATH=%PATH%作为环境?

    我正在尝试从Python程序启动一个exe文件 该exe文件是使用Visual Studio编译的C 项目的输出 在此 c 项目的属性中 配置 gt 属性 gt 调试 gt 环境 中的以下设置 PATH PATH lib testfolde
  • 与库版本相关的 TypeScript @types 版本

    谁能解释一下 TypeScript types 背后的版本控制https github com DefinitelyTyped DefinitelyTyped https github com DefinitelyTyped Definit
  • 像 Facebook 一样从任何 URL 获取特定图像

    My Question might be looks like similar to other questions but really this is not according to my knowledge i can t unde
  • 开发算法的人和开发人员之间最有效的工作流程是什么?

    我们正在开发具有视频模式识别功能的软件 我们有 7 位数学家正在创建算法 另外 我们有 2 名开发人员使用这些算法维护 开发应用程序 问题在于数学家使用不同的开发工具来创建算法 例如 Matlab C C 另外 因为他们不是开发人员 所以不
  • Android 在单击按钮时返回到第一个 Activity

    我正在编写一个应用程序 其中处理 4 个活动 比方说 A B C 和 D 活动 A 调用 B B 调用 C C 调用 D 在每个活动上 我都有一个名为 home 的按钮按钮 当用户单击任何 B C D 活动中的主页按钮时 应用程序应该返回到
  • 如何创建列表的 numpy 数组?

    我想创建一个 numpy 数组 其中每个元素都必须是一个列表 因此稍后我可以向每个元素附加新元素 我已经在谷歌和堆栈溢出上查看过 但似乎无处可寻 主要问题是 numpy 假设你的列表必须成为一个数组 但这不是我想要的 正如你发现的那样 np
  • 如何从 ngGrid 中显示的按钮调用作用域方法 - 在 Angular js 中

    angular module harbinger controller Admin UserlistController function rootScope scope location http userService etc scop
  • 使用 Dagger 2 进行 Presenter 注入

    我刚刚开始使用 Dagger 2 我在网上发现了数千个指南 每个指南都有不同的实现 我现在有点困惑 所以基本上这就是我现在写的 应用程序模块 java Module public class AppModule Application mA
  • 如何获取属于自定义属性的属性?

    我需要从自定义属性中查找应用自定义属性的属性的类型 例如 MyAttribute string MyProperty get set 给定 MyAttribute 实例 我如何获取 MyProperty 的类型描述符 换句话说 我正在寻找
  • 可滚动 TextView 不允许在应用程序暂停后选择文本

    我有一个可滚动的TextView用户可以在其中选择文本 我通过将移动方法设置为来添加滚动条ScrollingMovementMethod Problem 除非应用程序暂停 例如 切换应用程序后 否则选择效果很好 一旦应用程序再次处于活动状态
  • 在本地开发 Azure 函数

    我领导着一个由天蓝色函数开发人员组成的大型团队 因此 微软引用的大多数使用 azure Web 界面的示例对我来说不起作用 我正在使用模拟器在本地开发Azure功能以节省一些成本 我通过 Visual Studio 将所有功能发布到我的集成
  • 如何在 Flutter 中使用 Dio 和 multi_image_picker 插件上传多张图片

    我想在 Flutter 中使用 Dio 和 multi image picker 插件上传多张图片 List
  • Android 5.0 上点击 Switch 崩溃

    在 Android 5 0 中单击我的应用程序中的开关时 应用程序崩溃并显示如下所示的 logcat logcat 没有在其中的任何地方引用我的代码 并且此开关在所有以前的版本上都运行良好 除了背景颜色之外 该开关看起来是不可见的 并且只有
  • 在 Unix shell 中将一列数字相加

    给定文件列表files txt 我可以得到它们的尺寸列表 如下所示 cat files txt xargs ls l cut c 23 30 会产生这样的结果 151552 319488 1536000 225280 我怎样才能得到tota
  • 如何确定导致 Windows Installer 重复自我修复的原因?

    如何仅记录导致 Installshield 2008 所做的 MSI 文件通过 重新安装 的更改自我修复 自修复的原因是什么 如何使用 Installshield 2008 禁用 MSI 自我修复 自我修复 简单简短的解释 如果我删除文件
  • SampleSyncAdapter 断点不起作用

    我正在使用 Eclipse 来了解 SampleSyncAdapter 示例的工作原理 我无法让断点发挥作用 我在多个位置设置了断点 但没有一个被击中 例如 AuthenticatorActivity onCreate 永远不会被调用 有人
  • 从 pdf 中提取表格

    我正在尝试从这个表中获取数据PDF https www dropbox com s y3nivxhjvvzva7d test1 pdf dl 0 我尝试过 pdfminer 和 pypdf 运气不错 但我无法真正从表中获取数据 This i