Извлечение / анализ из PDF в CSV с использованием R? - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь извлечь данные из плохо отформатированного PDF в файл .csv для геокодирования.Данные, которые меня интересуют, - это местоположения Фермерских рынков в Колорадо на 2018 год (https://www.colorado.gov/pacific/sites/default/files/Colorado%20Farmers%27%20Markets.pdf).. Обязательные поля, которые я хочу получить: Business_Name, Адрес, Город, Штат, Почтовый индекс, Часы, Сезон, Электронная почта иСайт. Проблема в том, что все данные находятся в одном столбце, и не все записи имеют 100% полные данные. То есть одна запись может иметь пять атрибутов (имя, адрес, часы, почтовый индекс, веб-сайт).а другой может иметь только 2 строки атрибутов (имя, адрес).

Я нашел здесь встроенную карту местоположений (http://www.coloradofarmers.org/find-markets/), которая ссылается на файл PDF выше. Я смог сохранить этосопоставьте с MyMaps и скопируйте / вставьте таблицу в CSV, но в ней отсутствуют записи.

Существует ли способ чистого анализа этих данных из PDF в CSV? Я представляю, что мне нужно сделать, это создать словарьиз городов Колорадо с рынками (например, «Денвер», «Канон Сити», «Теллурид»), а затем, в основном, просмотрите R через столбец, вставьте каждую новую строку, которая существует между поискомгорода в строке предыдущего города все в одном ряду в отдельных полях столбцов.Или как одно разделенное запятыми поле для последующего анализа на основе того, как поля выглядят.

Вот что у меня есть:

#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)

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 07 апреля 2019

Вы можете пытаться извлечь только информацию, которая соответствует.Я не эксперт, но я пытался построить логику для какой-то части.Страницы 2-20 не содержат грязных данных.Кроме того, если вы заметите, каждая группа может быть разделена на вечера (по большей части).Поскольку количество столбцов для некоторых из них различается, было сложно построить одну логику.Даже извлеченный фрейм данных потребует некоторого преобразования.

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()))))
}
}

...