Извлечь текст из двухколоночного PDF с R

У меня много PDF-файлов в формате двух колонок. Я использую pdftools пакет в R. Есть ли способ прочитать каждый PDF в соответствии с форматом двух столбцов, не обрезая каждый PDF отдельно?

Каждый PDF состоит из выбираемого текста, а pdf_text Функция не имеет проблем с чтением текста, единственная проблема заключается в том, что она будет читать первую строку первого столбца, а затем переходить к следующему столбцу, вместо того, чтобы перемещаться вниз по первому столбцу.

Заранее большое спасибо за вашу помощь.

1 ответ

Решение

У меня такая же проблема. Что я сделал, так это получил наиболее часто встречающиеся значения пробелов для каждой из моих страниц pdfs и сохранил их в векторе. Затем я нарезал его, используя это значение.

library(pdftools)
src <- ""
trim <- function (x) gsub("^\\s+|\\s+$", "", x)

QTD_COLUMNS <- 2
read_text <- function(text) {
  result <- ''
  #Get all index of " " from page.
  lstops <- gregexpr(pattern =" ",text)
  #Puts the index of the most frequents ' ' in a vector.
  stops <- as.integer(names(sort(table(unlist(lstops)),decreasing=TRUE)[1:2]))
  #Slice based in the specified number of colums (this can be improved)
  for(i in seq(1, QTD_COLUMNS, by=1))
  {
    temp_result <- sapply(text, function(x){
      start <- 1
      stop <-stops[i] 
      if(i > 1)            
        start <- stops[i-1] + 1
      if(i == QTD_COLUMNS)#last column, read until end.
        stop <- nchar(x)+1
      substr(x, start=start, stop=stop)
    }, USE.NAMES=FALSE)
    temp_result <- trim(temp_result)
    result <- append(result, temp_result)
  }
  result
}

txt <- pdf_text(src)
result <- ''
for (i in 1:length(txt)) { 
  page <- txt[i]
  t1 <- unlist(strsplit(page, "\n"))      
  maxSize <- max(nchar(t1))
  t1 <- paste0(t1,strrep(" ", maxSize-nchar(t1)))
  result = append(result,read_text(t1))
}
result

Есть гораздо более простой способ сделать это, используя tabulizer::extract_text(file) функция.

Он работает с текстом PDF, содержащимся в одном столбце, и текстом PDF, содержащимся в 2+ столбцах. Да, это так просто!

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