R 中的 Tabulizer 包:如何在特定标题后抓取表格

2024-05-07

如何从 PDF 中抓取一些标题文本前面的表格? 我正在尝试 tabulizer 包。这是从特定页面获取表格的示例(波兰语“公共卫生需求地图”)

library(tabulizer)
library(tidyverse)
options(java.parameters = "-Xmx8000m")

location<-"http://www.mpz.mz.gov.pl/wp-content/uploads/sites/4/2019/01/mpz_choroby_ukladu_kostno_miesniowego_woj_dolnoslaskie.pdf"

(out<-extract_tables(location, pages = 8,encoding = "UTF-8", method = "stream", outdir = getwd())[[4]] %>%
as.tibble())

这让我在特定页面得到一张桌子。但我会从网站上抓取大量这样的 pdf 文件:http://www.mpz.mz.gov.pl/mapy-dla-30-grup-chorob-2018/ http://www.mpz.mz.gov.pl/mapy-dla-30-grup-chorob-2018/然后是包含每种疾病的许多链接的子页面,获取波兰每个省的 rvest 链接,我需要在特定标题字符串后抓取表格,例如。

表 1.2.2:结构和结构 wiekowej - Choroby układowe tkanki łącznej"

我需要检测 Tabela(...) Struktura zapadalnosci(...)",因为表格可能不在同一页面。非常感谢您提前提供任何指示和想法。

编辑:在我提出问题后,到目前为止我成功地找到了表格可能所在的页面,可能非常无效:

library(pdfsearch)

pages <-
  keyword_search(
    location,
    keyword = c(
      'Tabela',
      'Struktura zapadalnosci rejestrowanej'
    ),
    path = TRUE,
    surround_lines = FALSE
  ) %>%
  group_by(page_num) %>%
  mutate(keyword = paste0(keyword, collapse = ";")) %>%
  filter(
    str_detect(keyword, "Tabela") &
      str_detect(keyword, "Struktura zapadalnosci rejestrowanej")
  ) %>%
  pull(page_num) %>%
  unique()

我可以帮助您解决基本问题,但有一个问题(见最后)。我用pdftools代替pdfsearch但在这种情况下它基本上做同样的事情(查找带有表格的页面)。为了节省时间,我一开始只下载一次PDF:

options(java.parameters = "-Xmx8000m")# needs to be set before loading tabulizer
library(tabulizer)
library(tidyverse)

location <- "http://www.mpz.mz.gov.pl/wp-content/uploads/sites/4/2019/01/mpz_choroby_ukladu_kostno_miesniowego_woj_dolnoslaskie.pdf"
download.file(location, "test.pdf", mode = "wb")

现在将 pdf 转换为 data.frame,其中 df 的每一行都在一行中:

raw <- pdftools::pdf_data("test.pdf") 
pages <- lapply(seq_along(raw), function(p) {
  if (nrow(raw[[p]]) > 0) {
    raw[[p]]$page <- p
    raw[[p]]
  }
}) %>% 
  bind_rows() %>% 
  group_by(y, page) %>% 
  summarise(text = paste(text, collapse = " ")) %>% 
  arrange(page, y)

该数据框是可搜索的,我们只保留适合您的关键字的行:

tables <- pages %>% 
  filter(grepl("Tabela .* Struktura zapadalnosci", text))

有 8 行符合关键词。我们只从中提取表格。此外,该函数内lapply循环只保留行数最多的矩阵。如果一页上有两个表格,这可能会出现问题,但通常只使用“最佳猜测”效果很好tabulizer找到表结构。

tables_list <- lapply(tables$page, function(p) {
  cat(p, "\n")
  out <- extract_tables("test.pdf", 
                        pages = p,
                        encoding = "UTF-8", 
                        method = "stream", 
                        output = "matrix")
  out <- as_tibble(out[[which.max(sapply(out, nrow) + sapply(out, ncol))]]) # keep the biggest table
  attr(out, "caption") <- tables$text[tables$page %in% p]
  return(out)
})

物体tables_list现在包含一个列表data.frames,每个转换表:

> tables_list[[1]]
# A tibble: 16 x 8
   V1                  V2    V3    V4    V5    V6    V7    V8   
   <chr>               <chr> <chr> <chr> <chr> <chr> <chr> <chr>
 1 dolnośląskie        77,05 74,65 4,04  10,59 13,37 27,87 44,14
 2 kujawsko-pomorskie  78,12 65,93 4,29  14,96 14,82 27,01 38,92
 3 lubelskie           76,50 56,83 2,67  14,83 17,00 29,00 36,50
 4 lubuskie            79,10 76,23 4,92  12,70 12,70 30,74 38,93
 5 łódzkie             74,37 67,77 6,45  13,84 15,09 30,03 34,59
 6 małopolskie         72,71 55,35 6,99  14,63 12,01 25,87 40,50
 7 mazowieckie         76,31 68,52 5,89  12,11 12,30 27,03 42,67
 8 opolskie            79,55 54,65 4,83  10,04 17,47 26,02 41,64
 9 podkarpackie        75,10 47,32 7,57  14,86 18,29 25,31 33,98
10 podlaskie           74,18 68,00 5,82  10,55 17,09 32,36 34,18
11 pomorskie           76,57 74,96 5,71  12,74 13,76 26,65 41,14
12 śląskie             73,51 81,15 4,89  14,96 14,43 26,64 39,08
13 świętokrzyskie      74,45 56,51 4,91  14,00 14,74 27,27 39,07
14 warmińsko-mazurskie 75,91 63,22 5,62  13,59 18,48 29,53 32,79
15 wielkopolskie       72,66 62,71 3,62  14,37 14,77 29,45 37,79
16 zachodniopomorskie  74,26 73,21 8,44  13,71 11,60 24,89 41,35

我还将每个表格的标题(第一行)作为属性添加到data.frame:

> attr(tables_list[[1]], "caption")
[1] "Tabela 1.2.2: Struktura zapadalnosci rejestrowanej w zależności od płci, miejsca zamieszkania oraz grupy"

将此与 pdf 进行比较:

看起来这效果很好,只是列名消失了。不确定是否有办法保留它们,但这没有包含在您的问题中,所以也许您已经有了解决方案?

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

R 中的 Tabulizer 包:如何在特定标题后抓取表格 的相关文章

  • decompose() 的周期太少[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 错误看起来像这样 decompose
  • 返回数据帧 R 中的下一行

    我有一个看起来像这样的数据框 kind datetime book 2016 04 23 04 23 00 pen 2016 04 23 04 30 00 toy 2016 04 23 06 45 00 我想为数据集中的每一行返回下一行的日
  • 将年月格式转换为 POSIXct [重复]

    这个问题在这里已经有答案了 我有一些年月形式的数据 我想将其格式化以用于绘图ggplot date lt c 2016 03 2016 04 2016 05 2016 06 2016 07 2016 08 2016 09 2016 10 2
  • 是否可以通过扫描从控制台读取而不回显字符?

    这是一个示例函数 passwordEntry lt function cat Enter your password pwd lt scan n 1 what character quiet TRUE invisible pwd 并测试该功
  • 如何解决 TypeError: element_to_be_clickable() 需要 1 个位置参数?

    我收到错误TypeError element to be clickable takes 1 positional argument but 2 were given当我运行以下代码时 from selenium webdriver chr
  • 我无法下载 R 中的 reshape2 包 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我在尝试安装 R 包时收到此响应 gt installed packages reshape2 Package LibPath V
  • 多功能测试仪替代 system.time

    我已经看到 我认为是这样 使用了类似于 system time 的函数 它可以同时评估多个函数的时间并输出一个输出 我不记得它是什么 并且用我正在使用的术语进行互联网搜索并没有得到我想要的响应 有人知道我正在谈论的功能的名称 位置吗 你想要
  • 选择 R 中的数据表中隐藏时(在绿色加号下方)列的显示顺序

    Context 使用 DataTables 库制作交互式表格时 当屏幕宽度对于列的数量和宽度来说太窄时 列将隐藏在绿色 号下 我有一个非常宽的表格 有 20 多列 其中一些内容非常冗长 因此某些列在所有屏幕宽度下总是隐藏的 每次隐藏新列时
  • 通过间接引用列来修改数据框中的某些值

    我正在整理一些数据 我们将失败的数据分类到垃圾箱中 并按批次计算每个分类箱的有限产量 我有一个描述排序箱的元表 这些行按升序测试顺序排列 一些排序标签带有非语法名称 sort tbl lt tibble tribble weight lab
  • 时间戳半小时窗口内字段的平均值

    我的数据框有列名Timestamp es看起来像 Timestamp es 2015 04 01 09 07 42 31 2015 04 01 09 08 01 29 5 2015 04 01 09 15 03 18 5 2015 04 0
  • 从命令行运行 R 代码 (Windows)

    我在名为 analysis r 的文件中有一些 R 代码 我希望能够从命令行 CMD 运行该文件中的代码 而无需通过 R 终端 并且我还希望能够传递参数并在我的代码中使用这些参数 例如就像下面的伪代码 C gt execute r scri
  • API 请求和curl::curl_fetch_memory(url, handle = handle) 中的错误:SSL 证书问题:证书已过期

    几天前 我运行了代码几个月 没有任何问题 GET url myurl query 今天我遇到一个错误 Error in curl curl fetch memory url handle handle SSL certificate pro
  • 在 R 中创建虚拟变量,排除某些情况为 NA

    我的数据看起来像这样 V1 V2 A 0 B 1 C 2 D 3 E 4 F 5 G 9 我想创建一个虚拟变量R where 0 1 1 2 3 4 and NA 0 5 9 应该很简单 有人可以帮忙吗 我们可以转换V2 into a fa
  • R 中的列乘以子字符串

    假设我有一个数据框 其中包含多个组件及其在多个列中列出的属性 并且我想对这些列运行多个函数 我的方法是尝试将其基于每个列标题中的子字符串 但我无法弄清楚如何做到这一点 下面是数据框的示例 Basket F Type 1 F Qty 1 F
  • 在 R 中使用 lapply 绘制多个数据帧

    我正在尝试使用 lapply 函数绘制多个数据帧 每个数据帧一个图 但是尽管有关此主题的所有帖子我都找不到答案 因为我不断收到错误 图的输出列表为空 我的数据结构如下 df1 lt mtcars gt group by cyl gt tal
  • ggplot2 geom_密度和geom_histogram在一个图中

    如何制作一个所有条形加起来为 1 的直方图 并在适合的上方添加一个密度层 set seed 1234 df lt data frame sex factor rep c F M each 200 weight round c rnorm 2
  • 朴素贝叶斯分类器仅基于先验概率做出决策

    我试图根据推文的情绪将推文分为三类 买入 持有 卖出 我正在使用 R 和包 e1071 我有两个数据框 一个训练集和一组需要预测情绪的新推文 训练集数据框 text sentiment this stock is a good buy Bu
  • 基于时间窗口的不规则时间序列的优化滚动函数

    有没有办法使用 rollapply 来自zoo包或类似的东西 优化功能 rollmean rollmedian等 使用基于时间的窗口计算滚动函数 而不是基于大量观察的函数 我想要的很简单 对于不规则时间序列中的每个元素 我想计算一个具有 N
  • 更改闪亮 R 中的默认浏览器

    我在 RStudio 中使用 01 hello 虽然在 IE 中默认打开程序时它不会显示直方图 但即使在 Chrome 中 滑块也不起作用 我无法滑动条形图并看到直方图中的变化 如何更改 R 中的默认浏览器 以便闪亮启动 Chrome 而不
  • 如何仅删除单括号并保留配对的括号

    你好 我亲爱的老师 R 用户朋友们 我最近开始认真学习正则表达式 最近我遇到了一种情况 我们只想保留配对括号 并省略未配对的 这是我的样本数据 structure list t1 c Book Pg 1 Website Online Jou

随机推荐

  • 即使只有单个项目,也强制 uiscrollview 弹跳滚动

    我有一个 UIScrollView 其中包含不同数量的项目 子视图 当有多个项目时 滚动弹跳起作用 然而 有时滚动视图应该只有一项 我想向用户提供他们的滚动被识别的反馈 从而产生反弹效果 但是 UIScrollView 仅禁用一项滚动 答案
  • 为什么是补码?

    我正在编写一个教程来教孩子们 9 至 13 岁 编程 我从计算机本身开始 它们与计算机科学没有太大关系 更多的是涉及解决计算问题的过程 以此为出发点 我引导他们认识到机器可以帮助我们解决某些计算问题 人们擅长抽象思维和想象力 但计算机非常擅
  • 如何使用 URL 将数据从 javascript 发送到 ASP.NET MVC 控制器

    我需要一些帮助 我使用 ASP NET MVC4 以及 JavaScript 和 Knockout 编写了一个小应用程序 但我无法将数据从 javascript 发送到 MVC 控制器 反之亦然 例如JS部分是这样的 JavaScript
  • 防止 Excel 公式中的单元格数量增加

    我在 Excel 中有一个公式 需要根据该行中的数字除以一个常数对该列的几行运行 当我复制该公式并将其应用于范围中的每个单元格时 所有单元格编号都会随行增加 包括常量 所以 B1 127 C4 IF B4 lt gt B4 B1 如果我复制
  • @EnableJpaRepositories 正在寻找哪个包?

    我正在学习如何构建 JSF 和 Spring 集成的 webapp 我使用java config来配置 问题是 EnableJpaRepositories 我应该在这个注解中放入哪个包 包中包含实体类吗 或者配置类 或者 我可以将我的根包放
  • 推送通知发送成功,但设备收不到(偶尔)

    从昨天开始 我一直遇到一些设备无法收到推送通知的问题 证书 设备令牌似乎是正确的 直到昨天 该设备才能成功接收推送通知 在服务器端 没有错误或连接拒绝 并且推送通知似乎每次都成功发送 但仍然有很多情况下设备无法正确接收推送 一些周边信息 我
  • 在 PHP 中删除 foreach 之后数组中的空字段

    我是 PHP 新手 这是我的 mailing php 中的代码 当用户提交请求时 有 5 7 个可选字段和 20 25 个字段最终未被选择 输出列出所有字段和值 无论它们是空的还是已被选择 我知道我需要使用unset or array fi
  • 在mongodb中编辑子文档N-N关系

    我有一个应用程序 其中article可以链接到多个平台 文章包含平台列表 平台也包含文章列表 有关更多详细信息 请查看我几个月前提出的 stackoverflow 问题 https stackoverflow com a 40377383
  • 对于基于 Play 2.0 的 Java 应用程序,我可以使用 groovy 模板代替 scala 吗?

    我是 Play 2 0 新手 我很难理解用于创建视图的 scala 模板 我可以切换回 groovy 因为它存在于早期版本的 Play 框架中 例如 播放 1 2 播放 1 2 4 是的 有一个可用于 groovy 的模块 https gi
  • AngularJS'无法读取未定义的'then'属性'

    我遇到这个问题 当我单击登录按钮时 chrome 控制台会记录以下内容 angular min js 117 TypeError 无法读取未定义的属性 then 在 m scope logIn loginModuleController j
  • 如何在 django ImageField 中验证图像格式

    我们的项目使用Python 2 7 PIL 1 1 7和Django 1 5 1 有一个 ImageField 适用于许多图像格式 包括 bmp gif ico pnm psd tif 和 pcx 但是要求仅允许 png 或 jpg 图像
  • 我们可以在比赛中重用后卫内部的中间变量吗?

    说我有方法foo as def foo i Int Option Int some code 现在我想在一个Seq of Int如下 Seq 1 2 map case int gt foo int collect case Some int
  • Weblogic:Java 8 迁移后 AppMerge 无法合并您的应用程序

    我们正在将 Java EE 应用程序从Java 6 to Java 8 这意味着编译级别和迁移JRE6 上的 Weblogic 11g to JRE8 上的 Weblogic 12c 当我尝试部署项目时 出现以下错误 lt 20 7 201
  • 使用 python 解析大型(20GB)文本文件 - 将 2 行读为 1

    我正在解析一个 20Gb 文件并将满足特定条件的行输出到另一个文件 但是有时 python 会一次读取 2 行并将它们连接起来 inputFileHandle open inputFileName r row 0 for line in i
  • 如何使用 .schema 文件在 sqlite3 中创建 DB 文件

    我们的客户向我们提供了一个名为db schema 现在有一个命令可以用来运行这个文件来创建一个 dbsqlite3 中的文件 我可以做到这一点而不必输入中提到的所有查询吗db schema file 请帮忙 谢谢 如果该文件仅包含格式正确的
  • 0、-0 和 +0 之间的差异[重复]

    这个问题在这里已经有答案了 我一直不明白为什么 0分别对待0 有趣的事实是0等于 0 gt 0 0 true 那么问题来了 为什么 0 分别对待 https stackoverflow com a 23368135 1420197 than
  • 根据聚合创建大小均匀的组

    可能是一个新手问题 但我希望根据数据库总大小将我们的服务器库存分成几个大小均匀的组 并且很难弄清楚如何对它们进行分组 我认为 NTILE 可能会起作用 但我就是无法将注意力集中在平均分配组上 我下面的示例只是随机订购服务器 我希望结果是大小
  • 在提供给 sklearn 管道中的分类器之前获取所选特征的名称和数量

    我在用sel SelectFromModel ExtraTreesClassifier 10 threshold mean 选择我的数据集中最重要的特征 然后我想将这些选定的特征提供给我的 keras 分类器 但是我的基于 keras 的神
  • 替换 Select 语句中的 NULL 和空字符串

    我有一个专栏可以有NULL或空白区域 即 值 我想用有效值替换这两个值 例如 UNKNOWN 我发现的各种解决方案建议修改表本身内的值 然而 在这种情况下 这不是一个选项 因为数据库用于开发和 或修补得非常差的第三方应用程序 实际上 我认为
  • R 中的 Tabulizer 包:如何在特定标题后抓取表格

    如何从 PDF 中抓取一些标题文本前面的表格 我正在尝试 tabulizer 包 这是从特定页面获取表格的示例 波兰语 公共卫生需求地图 library tabulizer library tidyverse options java pa