繁体   English   中英

如何将使用pdf文件提取的日期与使用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中的日期模式有多个匹配项,因此在将文本附加到一起之前进行提取会更安全,然后只能使用第一个值。

df$c0=dates
print(df)

嗨,我是中国人。

在此处输入图片说明

您应该只重命名colname:

colnames(df)=c("c2","c3","c4","c5","c6","c7","c8","c9")
df$c1=dates
print(df)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM