《R数据科学实战:工具详解与案例分析 》 —1.6 pdftools—PDF文件

举报
华章计算机 发表于 2019/11/09 18:18:21 2019/11/09
【摘要】 本节书摘来自华章计算机《R数据科学实战:工具详解与案例分析》 一书中第一章,第1.6节,作者刘 健 邬书豪 。

1.6 pdftools—PDF文件

学术期刊、网络杂志和电子书籍一般都会以PDF格式的文件呈现。一般的计量型数据分析很少会遇到读取PDF文件的情况,不过在进行文本挖掘(Text Mining)和主题模型(Topic Modelling)预测中,pdftools包绝对是必备R包之一。该包只有两个母函数,一个用来从PDF中提取数据(此处的数据包括数字型和文字型数据),另一个则用来将文件渲染成PDF格式。本节我们只讨论第一个母函数—pdf_info。

pdf_info函数下面一共包含6个子函数,功能各不相同,详见表1-15。但是6个子函数的参数完全一致,分别是pdf、opw和upw,详见表1-16。

表1-15 数据导入函数'pdf_info子函数一览

image.png

image.png

 

表1-16 数据导入函数'pdf_info参数详解

image.png

 

由于篇幅有限,下面的代码只截取了部分结果进行解释。这里所用的PDF文档是pdftools包的帮助文档,读者可以自行到R官网上搜索下载。帮助文档是开放PDF文件,无须提供密码。读取文档代码如下:

    > library(pdftools)

    > pdf_info(pdf = "./helpDocs/pdftools.pdf")

    ## $version

## [1] "1.5"

##

## $pages

## [1] 5

...

当使用pdf_text提取文档内容时,全部内容都被提取为一个字符串向量,每页的内容都被单独放置于一个字符串中。帮助文档的PDF格式一共包含5页,所以这里会得到一个长度为5的字符串向量。有两种方式可用于查看提取的文本:可以直接将结果显示在console中(通过执行print(text)或直接运行text),也可以通过“[ ]”来指定显示某一页的内容。空白的位置都会以空格的字符格式显示,“\r\n”代表换行符号。提取文档内容的代码如下:

    > text<- pdf_text("./helpDocs/pdftools.pdf")

    > length(text)

    ## [1] 5

    > class(text)

    ## [1] "character"

    > text[1]

    ## [1] "                               Package ‘pdftools’\r\n                                            May 27, 2018\r\nType Package\r\nTitle Text Extraction, Rendering and Converting of PDF Documents\r\nVersion 1.8\r\nDescription Utilities based on 'libpoppler' for extracting text, fonts, attachments and\r\n

该文档无附件,所以会显示一个空列表:

> pdf_attachments(pdf = "./helpDocs/pdftools.pdf")

## list()

文档中一共包含了6种字体,pdf_fonts会给出字体的名称、类型、是否嵌入文档中这三类信息,具体如下:

    > pdf_fonts(pdf = "./helpDocs/pdftools.pdf")

    ##                                  name  type embedded file

## 1           DSHWTW+NimbusRomNo9L-Medi type1     TRUE    

## 2           UTHPMJ+NimbusRomNo9L-Regu type1     TRUE    

## 3             DSQFGA+Inconsolata-zi4r type1     TRUE    

## 4              LVIJIF+NimbusSanL-Regu type1     TRUE    

## 5 DQRZJT+NimbusRomNo9L-Regu-Slant_167 type1     TRUE    

## 6       YIECHJ+NimbusRomNo9L-ReguItal type1     TRUE

目录读取的子函数会将所读取的内容返回到一个列表中,如果直接将该列表显示在console中很可能会让人感觉不知所云,读者可以自行实践。最好的办法是将读取的内容使用jsonlite包转换成json列表的格式进行显示,以帮助理解文档的架构。jsonlite包的相关内容详见1.7节。jsonlite包转换成json列表的示例代码如下:

    > jsonlite::toJSON(x = pdf_toc(pdf = "./helpDocs/pdftools.pdf"), pretty = TRUE)

    ## {

##   "title": "",

##   "children": [

##     {

##       "title": "pdf_info",

##       "children": []

##     },

##     {

##       "title": "pdf_render_page",

##       "children": []

##     },

##     {

##       "title": "Index",

##       "children": []

##     }

##   ]

## }


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。