使用 pdftools 从 PDF 读取 table

Read table from PDF using pdftools

我正在尝试从 pdftools 包生成的字符向量中提取表格数据。输出(修剪后)如下所示:

pdftext <- c("   Clostridium perfringens     no./100ml         0        0          0        0      1409       0          0\n     Colony count 22°C           cfu/ml          -        0      15.673 >300.000       52       0          0\n     Colony count 37°C           cfu/ml          -        0       3.942      41        52       0          0")
lines <- strsplit(pdftext,"\n")
lines
[[1]]
[1] "   Clostridium perfringens     no./100ml         0        0          0        0      1409       0          0"
[2] "     Colony count 22°C           cfu/ml          -        0      15.673 >300.000       52       0          0"
[3] "     Colony count 37°C           cfu/ml          -        0       3.942      41        52       0          0"

我一直在使用以下方法将它们拆分并连接到字符矩阵中:

do.call(rbind,lapply(lines, function(x) {strsplit(x," [ ]+")})[[1]])

这失败了,因为包含 15.673 >300.000 的列之间只有一个 space。

这里可能不止一个问题:

  1. 如何将字符向量传递给 read.fwf?
  2. 你能推荐一个更好的正则表达式来拆分 15.673 >300.000 而不是 Colony count 22°C 吗?
  3. 有没有更简单的方法来拆分这个 table?我的代码看起来有点笨拙。

谢谢。

我发布了 3 个问题。这是 RegExp 问题 (2) 的答案。

@rawr 帮助改进了 PCRE 表达式,但是当我处理 500 份报告时,我发现了更多问题。我找不到可以应对所有变化的规则,因此更好的 RegExp 无法解决问题。列边界也不同,所以固定宽度不会解决问题,除非我检测到每个页面的列。

我通过解析输出两次解决了这个问题。在第一遍中,我按 {2,}(即 >=2 spaces)拆分并获取前两列文本。在第二遍中,我按 {1,}(即 >=1 space)拆分并获取最后 7 列数字。两次传递都被强制转换为字符向量的数据帧,然后 cbind 将它们组合起来。