使用pdftools从PDF中读取表格

时间:2016-11-28 07:20:31

标签: r regex text-extraction

我正在尝试从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的列之间只有一个空格。

这里可能有多个问题:

  1. 如何将字符向量传递给read.fwf?
  2. 你能否建议一个更好的正则表达式,它会分割15.673 >300.000而不是Colony count 22°C
  3. 是否有更简单的方法将这个表分开?我的代码看起来都有些笨拙。
  4. 谢谢。

1 个答案:

答案 0 :(得分:1)

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

@rawr有助于更好的PCRE表达,但在我完成500份报告时,我发现了更多问题。我无法找到能够应对所有变化的规则,因此更好的RegExp无法解决问题。列边界也有所不同,因此固定宽度不会解决问题,除非我检测到每页的列。

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