Извлечение текста из PDF с критериями поиска - PullRequest
0 голосов
/ 19 июня 2020

Мне нужно извлечь текст из PDF, у меня есть список ключевых слов, которые говорят мне, какую часть текста мне нужно извлечь.

PDF выглядит примерно так:

  • Элемент схемы: Keyword1 Это мое ключевое слово

  • Размер шрифта: 14 Мне не нужно это

  • Руководство по полному элементу схемы: Текстовый текст. Это текст, который мне нужен, и он может быть длиной от 2 до 3 строк. И даже содержать несколько предложений.

  • Элемент схемы: Keyword2 Это мое ключевое слово

  • Размер шрифта: 18 Мне это не нужно

  • Руководство по полному элементу схемы: Текст text, это текст, который мне нужен, и он может быть от 2 до 3 строк. И даже содержать несколько предложений. Этот текст отличается от текста выше.

Пока это мой код:

library(pdftools)
library(pdfsearch)
library(tidyverse)
pdf <- pdf_text(dir(pattern = "*.pdf")) %>%
read_lines()
Keyword_list <- c("swDisproportionateCost", `"swDisproportionateCostOtherEULegislation", "swExemptionsTransboundary","swDisproportionateCostAlternativeFinancing","swDisproportionateCostAnalysis","swDisproportionateCostScale")`

Затем я попытался использовать keyword_search, но он только сказал мне в какой строке было ключевое слово.

Я хотел бы извлечь текст в курсиве в новый столбец в моем списке keyword_list. Я думаю, что это можно сделать с помощью регулярного выражения, используя ключевое слово и текст, выделенный жирным шрифтом в качестве начала и конца.

Вот ссылка на pdf. https://www.dropbox.com/s/kyyzr5wnh8z87if/FINAL%20Draft4_WFD_Reporting_Guidance_2022_resource_page.pdf?dl=0

1 Ответ

0 голосов
/ 22 июня 2020

Это просто обычная работа по извлечению текста. Есть много способов сделать это, и я уверен, что есть более элегантные способы сделать это, чем этот, но этот выполняет свою работу:

library(pdftools)
library(dplyr)

keywords <- pdf_text("mypdf.pdf") %>%
strsplit("Schema element:") %>%
  lapply(function(x) x[-1]) %>%
  lapply(function(x) sapply(strsplit(x, "\r\n"), `[`, 1)) %>%
  unlist %>%
  trimws()

text <- pdf_text("mypdf.pdf") %>%
  strsplit("Guidance on completion of schema element:") %>%
  lapply(function(x) x[-1]) %>%
  lapply(function(x) sapply(strsplit(x, ":"), `[`, 1)) %>%
  lapply(function(x) sapply(strsplit(x, "\r\n"), 
                            function(y) paste(y[-length(y)], collapse = ""))) %>%
  unlist() %>%
  {gsub("  ", " ", .)} %>%
  trimws() %>%
  strsplit("Guidance on contents") %>%
  sapply(`[`, 1)

df <- tibble(keywords, text)

Итак, результат выглядит так:

df
#> # A tibble: 15 x 2
#>    keywords                       text                                                   
#>    <chr>                          <chr>                                                  
#>  1 swExemption44Driver            "Required. Select from the enumeration list the driver~
#>  2 swExemption45Impact            "Required. Select from the enumeration list the impact~
#>  3 swExemption45Driver            "Required. Select from the enumeration list the driver~
#>  4 swDisproportionateCost         "Required. Indicate if disproportionate costs have bee~
#>  5 swDisproportionateCostScale    "Conditional. Select from the enumeration list the  sc~
#>  6 swDisproportionateCostAnalysis "Conditional. Select from the enumeration list the  an~
#>  7 swDisproportionateCostAlterna~ "Conditional. Select from the enumeration list the  al~
#>  8 swDisproportionateCostOtherEU~ "Conditional. Indicate whether the costs of basic  mea~
#>  9 swTechnicalInfeasibility       "Required. Report how ‘technical infeasibility’ has be~
#> 10 swNaturalConditions            "Required. Select from the enumeration list the  eleme~
#> 11 swExemption46                  "Required. Select from the enumeration list the reason~
#> 12 swExemption47                  "Required. Select from the enumeration list the  modif~
#> 13 swExemptionsTransboundary      "Required. Indicate whether the application of  exempt~
#> 14 swExemptionsReference          "Required. Provide references or hyperlinks to the  re~
#> 15 driversSWExemptionsReference   "Required. Provide references or hyperlinks to the  re~

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...