R语言使用pdftools读取PDF文本如何获取字符串类型结果
R中使用pdftools读取PDF获取字符串类型内容的实现方法
现有实现代码
install.packages("pdftools") library("pdftools") pdf.file <- "https://eparlib.nic.in/bitstream/123456789/809853/1/pms_16_17_07-02-2019_eng.pdf" setwd("D:/Assignment 1/") download.file(pdf.file, destfile = "speech1.pdf", mode = "wb") pdf.text <- pdftools::pdf_text("speech1.pdf") cat(pdf.text[[2]]) typeof(pdf.text)
核心原因说明
首先明确R的类型规则:R底层没有独立的string基础类型,所有字符串的底层存储类型都是character,你需要的“字符串类型”实际是长度为1的character向量(单文本标量)。pdf_text()默认返回的是和PDF页数等长的character向量,每个元素对应单页的文本内容,因此直接调用typeof()只会返回character,但对象是多元素向量,不是单块字符串。
可行实现方案
方案1:获取原生R格式的单字符串
直接用paste()将多页文本拼接为单元素character向量,页与页之间用换行符分隔,这就是R原生支持的标准字符串格式:
# 拼接所有页面为完整单字符串 pdf_text_string <- paste(pdf.text, collapse = "\n\n") # 验证 typeof(pdf_text_string) # 底层类型为character,符合R字符串存储规则 length(pdf_text_string) # 返回1,说明是单个字符串标量 cat(pdf_text_string) # 可直接输出完整文本
如果只需要指定页面作为字符串,直接提取对应下标的元素即可,单元素提取的结果本身就是长度为1的字符串:
# 提取第2页为单独字符串 page2_string <- pdf.text[[2]]
方案2:适配tidyverse生态的显式string类
如果你需要和stringr、dplyr等tidyverse生态的函数适配,想要显式带string类属性的对象,可以借助stringr包转换,转换后的对象兼容所有R原生字符串操作函数:
# 安装加载stringr install.packages("stringr") library(stringr) # 转换为显式string类对象 pdf_text_string <- as_string(paste(pdf.text, collapse = "\n\n")) # 验证 class(pdf_text_string) # 类属性包含"string",可被tidyverse函数直接识别为字符串 typeof(pdf_text_string) # 底层仍为character,由R底层类型规则决定,不存在其他存储形式
注意:不存在能让
typeof()返回"string"的转换方法,R的底层类型定义里就没有对应枚举值,所有声称返回string类型的R包,本质都是在character类型基础上加了类属性,底层存储逻辑完全一致。
内容的提问来源于stack exchange,提问作者Kaustav Mallick
相关产品推荐
相关产品推荐

