使用R识别PDF表格

2024-03-29

我正在尝试从一些 pdf 报告内的表格中提取数据。

我看过一些使用 pdftools 和类似软件包的示例,我成功地获取了文本,但是,我只想提取表格。

有没有办法使用 R 来识别和提取表格?


很好的问题,我最近也在想同样的事情,谢谢!

我做到了,与制表者 ‘0.2.2’正如@hrbrmstr 也建议的那样。如果您正在使用R > 3.5.x,我提供以下解决方案。按特定顺序安装这三个包:

# install.packages("rJava")
# library(rJava) # load and attach 'rJava' now
# install.packages("devtools")
# devtools::install_github("ropensci/tabulizer", args="--no-multiarch")

Update:再次测试该方法后,看起来只需这样做就足够了install.packages("tabulizer") now. rJava将作为依赖项自动安装。

现在您已准备好从 PDF 报告中提取表格。

library(tabulizer)

## load report
l <- "https://sedl.org/afterschool/toolkits/science/pdf/ast_sci_data_tables_sample.pdf" 
m <- extract_tables(l, encoding="UTF-8")[[2]]  ## comes as a character matrix
## Note: peep into `?extract_tables` for further specs (page, location etc.)!

## use first row as column names
dat <- setnames(type.convert(as.data.frame(m[-1, ]), as.is=TRUE), m[1, ])
## example-specific date conversion
dat$Date <- as.POSIXlt(dat$Date, format="%m/%d/%y")
dat <- within(dat, Date$year <- ifelse(Date$year > 120, Date$year - 100, Date$year))

dat ## voilà
#    Speed (mph)          Driver                        Car    Engine       Date
# 1      407.447 Craig Breedlove          Spirit of America    GE J47 1963-08-05
# 2      413.199       Tom Green           Wingfoot Express    WE J46 1964-10-02
# 3      434.220      Art Arfons              Green Monster    GE J79 1964-10-05
# 4      468.719 Craig Breedlove          Spirit of America    GE J79 1964-10-13
# 5      526.277 Craig Breedlove          Spirit of America    GE J79 1965-10-15
# 6      536.712      Art Arfons              Green Monster    GE J79 1965-10-27
# 7      555.127 Craig Breedlove Spirit of America, Sonic 1    GE J79 1965-11-02
# 8      576.553      Art Arfons              Green Monster    GE J79 1965-11-07
# 9      600.601 Craig Breedlove Spirit of America, Sonic 1    GE J79 1965-11-15
# 10     622.407   Gary Gabelich                 Blue Flame    Rocket 1970-10-23
# 11     633.468   Richard Noble                   Thrust 2 RR RG 146 1983-10-04
# 12     763.035      Andy Green                 Thrust SSC   RR Spey 1997-10-15

希望对你有帮助。

限制:当然,这个例子中的表格非常简单,也许你必须搞乱gsub和这种东西。

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

使用R识别PDF表格 的相关文章

随机推荐

  • 按关系属性排序 neo4j

    使用 Neo4j 1 9 3 我想创建一个音乐节目列表 在给定的节目中可能会表演三段 每件作品都有一个与之关联的作曲家 并且可能出现在许多不同的程序中 因此我无法在作品节点上放置序列号 我假设我可以创建该程序 其与每个部分的关系如下所示 p
  • Rails 4 加密 Cookie 重放攻击

    我最近升级到 Rails 4 并改用加密 cookie 作为会话存储 不幸的是 这似乎意味着重放攻击是可能的 即如果用户注销 任何 cookie 都不会失效 并且可以用于在没有用户 密码的情况下进行身份验证 据我所知 这是加密 cookie
  • Spring真的不支持接口注入吗?

    我知道 Spring 不支持接口注入 而且我已经读过很多次了 但今天 当我看到 Martin Fowler 写的一篇关于国际奥委会的文章时 link http martinfowler com articles injection html
  • Oracle PIVOT,两次?

    我一直在尝试在 Oracle 11g 中不再使用 DECODE 来透视行 其中有一个方便的 PIVOT 函数 但我可能发现了一个限制 我试图为基表中的每个值返回 2 列 就像是 SELECT somethingId splitId1 spl
  • 将“var”传递给另一个方法

    我可能完全错过了这里的重点 但是 如何将 var 传递给另一个方法 我正在使用 linq 将 XML 加载到可枚举对象列表中 我有不同的对象类型 具有不同的字段 但无论使用哪个对象 我的过程的最后一步都是相同的 XNamespace xml
  • 单例中 getter 和 setter 的线程安全

    我在 Swift 3 中创建了一个简单的单例 class MySingleton private var myName String private init static let shared MySingleton func setNa
  • 在 VSTS Powershell 内联脚本任务中运行 drop SQL DB 时找不到类型 [Microsoft.SqlServer.Management.Smo.Server]

    在我的 VSTS 版本中 当我运行以下内联 Powershell 版本 5 1 脚本时 srv new Object Microsoft SqlServer Management Smo Server db New Object Micro
  • 如何以 Angular(v2 及以上)反应形式查找无效控件

    我在 Angular 中有一个反应形式 如下所示 this AddCustomerForm this formBuilder group Firstname Validators required Lastname Validators r
  • 协变类型 T 发生在不变位置

    我正在 Scala 中迈出第一步 我想让以下代码起作用 trait Gene T val gene Array T 编译器给出的错误是 covariant type T occurs in invariant position in typ
  • 在 React 中,如何将参数从子组件传递到父组件?

    在 React JS 中 我无法将值从子组件传递到父组件 这个问题是上一个问题的后续问题在 React JS 中 我如何告诉父组件子组件发生了什么事 https stackoverflow com questions 58403770 in
  • 访问 firebase firestore 数据库仪表板是否会被视为读取操作?

    我现在正处于该项目的开发阶段 目前该项目仅使用一个 Android 应用程序作为前端 Android 使用限制和分页进行查询 但阅读的文档总数远远超出了预期 我试图弄清楚这一点 为什么即使用户只有一个 我 阅读的文档数量却如此之大 如果阅读
  • 带红色圆圈的 Intellij Idea 文件

    我的 Intellij Idea 在 Project Explorer 中的文件名都有一个红色小圆圈 上面写着 J 那代表什么 IntelliJ 识别出这是一个 java 文件 但它没有标记为项目源的一部分 检查您的项目是否遵循 Maven
  • 如何防止在 Vim 中遍历跳转列表时离开当前缓冲区?

    I frequently have several buffers open in my Vim session This means that my jump list stores locations from several buff
  • 使用 Jest 模拟基于承诺的请求

    我正在尝试使用 Jest 对函数进行单元测试 但在处理 jest 模拟模块时遇到了一些麻烦 相当于 Nodejs 世界中的 rewire 或 proxyquire 我实际上正在尝试测试是否已使用一些参数在模拟模块上调用了间谍 这是我要测试的
  • 在 ASP.NET MVC 的 Windsor 配置中,控制器的生活方式是否应该始终是瞬态的?

    我遇到了一个问题 我认为 Html DropDownList 会在我第一次提交表单时回发所选值 但每个后续回发只会发布初始回发中的数据 因此 我将生活方式 瞬态 添加到为温莎城堡配置控制器的组件元素中 这解决了问题 但当然使回发需要更长的时
  • SQLAlchemy:“NoneType”对象没有属性“drivername”

    我正在尝试将我的 Flask 应用程序连接到本地 MySQL 数据库进行测试 我创建了一个 Flask 对象和一个类来表示成功连接后创建的示例表 这些是我的项目的本地环境变量 env LOCAL MYSQL URL mysql Userna
  • 如何从文件中提取多行的电子邮件标题

    我正在尝试在 Linux 上使用 sed 从电子邮件文件中提取 To 标头 问题是 To 标头可能位于多行上 e g To email protected cdn cgi l email protection email protected
  • 在Excel中使用VBA查找活动单元格的列标题名称

    我有一个从数据列表创建的表 如何找到每列的标题文本 当我选择活动单元格的标题时 它会高亮为橙色 但我想使用 Visual Basic 检索该值 我能够找到 Excel 工作表的地址 但我需要表格的列标题 Private Sub Worksh
  • Hibernate 验证器验证约束 if @Constraint(validated by = {})

    我有一个 Spring Web 应用程序 它使用 hibernate 验证器进行验证 我有位于不同项目中的约束注释 我需要在我的 Spring 项目中拥有针对这些约束的验证器 因为我需要一些服务来执行验证 所以情况是 我无法将约束验证器放在
  • 使用R识别PDF表格

    我正在尝试从一些 pdf 报告内的表格中提取数据 我看过一些使用 pdftools 和类似软件包的示例 我成功地获取了文本 但是 我只想提取表格 有没有办法使用 R 来识别和提取表格 很好的问题 我最近也在想同样的事情 谢谢 我做到了 与制