Используя R для преобразования структурированных данных из PDF в Excel, код работает, но необходимо уточнить - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть несколько форм 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 Ответ

0 голосов
/ 21 декабря 2018

Мне нравится 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, если в этой строке ничего не найдено.

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

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

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

...