Что у меня есть
У меня есть два файла .pdf, в которых есть таблица с информацией о покупке и продаже и датой в верхнем правом углу заголовка каждой страницы. Смотрите файлы здесь . При необходимости сохраните два файла .pdf и приведенный ниже сценарий в одной папке на вашем компьютере и запустите сценарий, чтобы воспроизвести проблему.
Что мне нужно
Я хочу извлечь только содержимое таблицы из каждого файла, объединить и преобразовать его в таблицу и вставить один первый столбец (в таблицу) с датами, извлеченными из заголовочных файлов.
Таким образом, если первые 5 строк в таблице содержатся в первом файле PDF, то первые 5 строк в первом столбце должны быть заполнены той же самой датой, извлеченной из заголовка первого файла. Если следующие 2 строки после предыдущих 5 строк идут из второго файла, то эти 2 строки в первом столбце должны быть заполнены той же датой, извлеченной из заголовка второго файла.
Что я уже пробовал
Я уже извлек таблицу из каждого файла, присоединяюсь и создаю тиббл, как вы можете видеть ниже. Даже создать код для извлечения даты. Но на самом деле я не знаю, как связать дату, извлеченную из заголовка, с содержимым таблицы каждого файла и вставить ее в таблицу.
Код - извлечение информации из таблицы
## EXTRACT PDF FILE INFORMATION AND GENERATE A CLEAN DATASET
# load library
library(pdftools)
library(tidyverse)
# create a list with all file names
file_names <- dir(pattern = 'N.*')
# extract text from each file and append into a list
text_raw <- list()
for (i in 1:length(file_names)) {
doc <- pdf_text(file_names[i])
text_raw <- append(text_raw, doc)
}
# clean data
text_clean <- text_raw %>%
str_split('\r\n') %>%
unlist() %>%
as.vector() %>%
str_to_lower() %>%
str_squish() %>%
str_subset('1-bovespa') %>%
str_replace('1-', '') %>%
str_remove_all('#2?|on|nm|sa') %>%
str_squish()
# convert as tibble
df <- tbl_df(text_clean)
# split column
df <- separate(df,
value,
c('c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8'),
sep = ' ')
print(df)
Код - Даты выписки
# filter dates
dates <- text_raw %>%
str_split('\r\n') %>%
unlist() %>%
as.vector() %>%
str_squish() %>%
str_subset('\\d{4}\\s\\d{1}\\s\\d{2}\\/\\d{2}\\/\\d{4}$') %>%
str_remove_all('(\\d+\\s\\d{1}\\s)')
print(dates)
Фактический вывод
c1 c2 c3 c4 c5 c6 c7 c8
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 bovespa c vista cielo 800 10,79 8.632,00 d
2 bovespa c vista cielo 200 10,79 2.158,00 d
3 bovespa c vista brf 400 23,81 9.524,00 d
4 bovespa c vista brf 100 23,81 2.381,00 d
Ожидаемый результат
c1 c2 c3 c4 c5 c6 c7 c8 c9
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 10/01/2019 bovespa c vista cielo 800 10,79 8.632,00 d
2 10/01/2019 bovespa c vista cielo 200 10,79 2.158,00 d
3 18/01/2019 bovespa c vista brf 400 23,81 9.524,00 d
4 18/01/2019 bovespa c vista brf 100 23,81 2.381,00 d
Любая помощь?