Используя R для преобразования структурированных данных из PDF в Excel, код работает, но необходимо уточнить

У меня есть несколько форм HICF (здравоохранение), и я хочу автоматически извлекать определенные поля. В настоящее время я могу иметь кучу PDF-файлов в каталоге. Код ссылается на них, берет все данные и разделяет каждую строку, где есть \n.

Затем он объединяет все наборы данных в один файл. Проблема в том, что данные все еще немного запутаны и отличаются друг от друга.

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

Я хотел бы, чтобы выходные данные находили текст между выбранными словами и экспортировали эти данные в файл csv.

Как бы вы предложили обновить этот код?

install.packages("pdftools")
install.packages("tesseract")
install.packages("plyr")
install.packages("qpcR")

library(pdftools)
library(tesseract)
library (plyr)
library(qpcR)
text <- ocr("POC File 12.20 (3).pdf")
test2<-strsplit(text,"\n")
df <- ldply (test2, data.frame)
compile<-df



file_list <- list.files()
for (file in file_list){
 text <- ocr(file)
 test2<-strsplit(text,"\n")
 df <- ldply (test2, data.frame)
 compile<-qpcR:::cbind.na(compile,df)
}
write.csv(compile,"compiled.csv")

1 ответ

Мне нравится stringr-пакет для извлечения частей текста, который я думаю, это то, что вы ищете. Я также включил несколько примеров данных, это делает то, что вы хотите?

library(stringr)
mytextlines <- c("somedata_This word WantedData That word",
                 "NothingToExtractHere",
                 "somedata_other word WantedOtherData other close")
LookFor <- c(Tag1="This word *(.*?) *That word",
             Tag2="Other word *(.*?) *Other close")

found <- sapply(LookFor, function(look) {
  gsub(look, '\\1', str_extract(mytextlines, pattern=regex(look, ignore_case = TRUE)), ignore.case = TRUE)
})

Он выведет матрицу со строкой для каждой строки текста и столбцом для каждого тега, который вы ищете, и NA, если ничего не было найдено в этой строке.

Регулярные выражения ищут что-то:

  • начиная с "Это слово",
  • следуют любые пробелы,
  • после чего-либо (но если это заканчивается пробелом (ами), то оставьте их для следующей части),
  • следуют любые пробелы,
  • с последующим "Это слово"

И gsub заменить эти 5 элементов только на 3-й элемент (часть в скобках)

Другие вопросы по тегам