使用 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。
这里可能不止一个问题:
- 如何将字符向量传递给 read.fwf?
- 你能推荐一个更好的正则表达式来拆分
15.673 >300.000
而不是 Colony count 22°C
吗?
- 有没有更简单的方法来拆分这个 table?我的代码看起来有点笨拙。
谢谢。
我发布了 3 个问题。这是 RegExp 问题 (2) 的答案。
@rawr 帮助改进了 PCRE 表达式,但是当我处理 500 份报告时,我发现了更多问题。我找不到可以应对所有变化的规则,因此更好的 RegExp 无法解决问题。列边界也不同,所以固定宽度不会解决问题,除非我检测到每个页面的列。
我通过解析输出两次解决了这个问题。在第一遍中,我按 {2,}
(即 >=2 spaces)拆分并获取前两列文本。在第二遍中,我按 {1,}
(即 >=1 space)拆分并获取最后 7 列数字。两次传递都被强制转换为字符向量的数据帧,然后 cbind
将它们组合起来。
我正在尝试从 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。
这里可能不止一个问题:
- 如何将字符向量传递给 read.fwf?
- 你能推荐一个更好的正则表达式来拆分
15.673 >300.000
而不是Colony count 22°C
吗? - 有没有更简单的方法来拆分这个 table?我的代码看起来有点笨拙。
谢谢。
我发布了 3 个问题。这是 RegExp 问题 (2) 的答案。
@rawr 帮助改进了 PCRE 表达式,但是当我处理 500 份报告时,我发现了更多问题。我找不到可以应对所有变化的规则,因此更好的 RegExp 无法解决问题。列边界也不同,所以固定宽度不会解决问题,除非我检测到每个页面的列。
我通过解析输出两次解决了这个问题。在第一遍中,我按 {2,}
(即 >=2 spaces)拆分并获取前两列文本。在第二遍中,我按 {1,}
(即 >=1 space)拆分并获取最后 7 列数字。两次传递都被强制转换为字符向量的数据帧,然后 cbind
将它们组合起来。