首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pdftools从PDF读取表

使用pdftools从PDF读取表
EN

Stack Overflow用户
提问于 2016-11-28 07:20:31
回答 1查看 2.3K关注 0票数 1

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

代码语言:javascript
复制
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"

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

代码语言:javascript
复制
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. 有更简单的方法把这张桌子分开吗?我的代码看上去有点笨拙。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-12 21:56:38

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

@rawr有助于更好地表达PCRE,但当我浏览500份报告时,我发现了更多的问题。我找不到一条能够处理所有变化的规则,所以更好的RegExp不会解决这个问题。列的边界也会变化,所以固定的宽度不会解决这个问题,除非我检测到每一页的列。

我通过两次解析输出来解决这个问题。在第一次测试中,我使用{2,} (即>=2空格)进行拆分,并获得了前2列的文本。第二步,我用{1,} (即>=1空间)进行除法,得到最后7列数字。两次传递都被胁迫到字符向量的数据帧中,然后cbind将它们组合起来。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40839021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档