我有两个.pdf文件,每个文件的内部都有一个表,其中包含买卖股票信息以及每个页面右上角标题上的日期。请参阅文件here。如有必要,将下面的两个.pdf文件和脚本保存到计算机的同一文件夹中,然后运行脚本以重现问题。
我只想从每个文件中提取表内容,将其联接并转换为小标题,然后插入一个第一列(小标题),其中包含从头文件中提取的日期。
因此,如果小标题中的前5行来自第一个pdf文件,则必须用从第一个文件的标题中提取的相同日期填充第一列中的前5行。如果前5行之后的后2行来自第二个文件,则第一列中的这两行必须用从第二个文件的标题中提取的相同日期填充。
我已经从每个文件中提取了表格,加入并创建了一个小标题,如下所示。甚至创建代码以提取日期。但实际上,我不知道如何将从标头提取的日期与每个文件的表内容相关联,并将其插入到标题中。
代码-提取表信息
# 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
{{1}}
有帮助吗?
答案 0 :(得分:0)
我认为提取日期的工作不必要地复杂,更不用说它似乎对我们中的某些人有用,但对我的代码运行却失败了。相反,我构造了一个日期模式并使用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中的日期模式都有多个匹配项,因此在将文本附加到一起之前进行提取会比较安全,然后您只能使用第一个值。
答案 1 :(得分:-1)