簡體   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