Используя 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-й элемент (часть в скобках)