首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用R?从PDF提取/解析为CSV?

使用R?从PDF提取/解析为CSV?
EN

Stack Overflow用户
提问于 2019-02-27 03:34:21
回答 1查看 620关注 0票数 0

我正尝试从格式不佳的PDF中提取数据到.csv文件中进行地理编码。我关心的数据是2018年科罗拉多州农贸市场的位置(https://www.colorado.gov/pacific/sites/default/files/Colorado%20Farmers%27%20Markets.pdf)。我希望有必要的领域有Business_Name,地址,城市,州,邮政编码,小时,季节,电子邮件和网站。问题是所有数据都在一列中,并不是所有条目都有100%完整的数据。也就是说,一个条目下可能有5个属性(名称、地址、小时、邮政编码、网站),而另一个条目可能只有2行属性(名称、地址)。

我在这里找到了一个嵌入的位置地图(http://www.coloradofarmers.org/find-markets/),它引用了上面的PDF文件。我可以将此映射保存到MyMaps,并将表复制/粘贴到CSV,但缺少条目。

有没有办法干净利落地将这些数据从PDF解析为CSV?我想我需要做的是创建一个带有市场的科罗拉多州城镇的字典(例如:‘'Denver','Canon City','Telluride'),然后基本上让R遍历列,将存在于前一个城市行上的查找城市之间的每个新行都放在单独的字段列中。或者作为一个逗号分隔的字段,然后根据字段的外观进行解析。

这是我到目前为止所知道的:

代码语言:javascript
复制
#Set the working directory
setwd("C:/Users/bwhite/Desktop")

#download the PDF of data
?download.file
download.file("https://www.colorado.gov/pacific/sites/default/files/Colorado%20Farmers%27%20Markets.pdf", destfile = "./ColoradoMarkets2018.pdf", method = "auto", quiet = FALSE, mode = "w", cacheOK=TRUE)

#import the pdf table library from CRAN
install.packages("pdftables")

library(pdftables)

#convert pdf to CSV
?convert_pdf
convert_pdf("Colorado Farmers' Markets.pdf",output_file = "FarmersMarkets.csv", 
            format = "csv", message = TRUE, api_key = "n7qgsnz2nkun")

# read in CSV
Markets18 <-read.csv("./FarmersMarkets.csv")

#create a look-up table list of Colorado cities
install.packages("htmltab")
library(htmltab)

CityList <-htmltab("https://en.wikipedia.org/wiki/List_of_cities_and_towns_in_Colorado",1)
names(CityList)

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2019-04-07 18:51:43

您只能尝试提取一致的信息。我不是专家,但我试着为某些部分建立一个逻辑。第2-20页在某种程度上没有脏数据。另外,如果您注意到,每组都可以在下午分成两组。(大多数情况下)。由于它们中的一些列的数量不同,因此很难构建一个逻辑。即使是提取的数据帧也需要进行一些转换。

代码语言:javascript
复制
library(pdftools)

text<-pdf_text("Colorado Farmers' Markets.pdf")
library(plyr)

new<-data.frame()


text4<-data.frame(Reduce(rbind, text),row.names =c() ,stringsAsFactors = FALSE)
for (i in 2:20){

list1<-text4[i,1]
list1<-strsplit(list1,'p.m.')
final<-data.frame(Reduce(rbind, list1),row.names =c() ,stringsAsFactors = FALSE)
for (i in 1:dim(final)[1]){
  c<-final[i,]
  c<-strsplit(c,'\n')

  new<-rbind.fill(new,data.frame(t(data.frame(c,row.names =c()))))
}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54892822

复制
相关文章

相似问题

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