![](/img/trans.png)
[英]Unable to Replace “\r\n-” in Text Extracted from PDF File Using readtext() from readtext Package in R
[英]How to associate a date extracted from a pdf file with the data extracted from it using R?
我有兩個.pdf文件,每個文件的內部都有一個表格,其中包含買賣股票信息以及每個頁面右上角標題上的日期。 在這里查看文件。 如有必要,將下面的兩個.pdf文件和腳本保存到計算機的同一文件夾中,然后運行腳本以重現該問題。
我只想從每個文件中提取表內容,將其聯接並轉換為小標題,並插入一個第一列(小標題),其中包含從頭文件中提取的日期。
因此,如果小標題中的前5行來自第一個pdf文件,則第一列中的前5行必須用從第一個文件的標題中提取的相同日期填充。 如果前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
有什么幫助嗎?
我認為提取日期的工作不必要地復雜,更不用說它似乎對我們中的某些人有用,但對我的代碼運行卻失敗了。 相反,我構造了一個日期模式並用stringi::stri_extract
提取:
stringi::stri_extract( regex="[0-3][0-9]/[01][0-9]/20[0-1][0-9]", text_clean)
[1] "18/01/2019" # this pattern designed for this century dates in the DD/MM/YYYY format
dates <- stringi::stri_extract( regex="[0-3][0-9]/[01][0-9]/20[0-1][0-9]", text_clean)
df$C9 <- dates
此外,由於每個pdf中的日期模式有多個匹配項,因此在將文本附加到一起之前進行提取會更安全,然后只能使用第一個值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.