使用 R 从两列 PDF 中提取文本
Extract Text from Two-Column PDF with R
我有很多两栏格式的 PDF。我在 R 中使用 pdftools
包。有没有一种方法可以根据两列格式阅读每个 PDF 而无需单独裁剪每个 PDF?
每个PDF都包含可选择的文本,pdf_text
函数读取文本没有问题,唯一的问题是它会读取第一列的第一行,然后继续下一列,而不是向下移动第一列。
非常感谢您的帮助。
我遇到了同样的问题。我所做的是为我的每个 pdf 页面获取最频繁的 space 值并将其存储到 Vector 中。然后我使用该值对其进行切片。
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 文本和包含在 2+ 列中的 PDF 文本。是的,就这么简单!
我有很多两栏格式的 PDF。我在 R 中使用 pdftools
包。有没有一种方法可以根据两列格式阅读每个 PDF 而无需单独裁剪每个 PDF?
每个PDF都包含可选择的文本,pdf_text
函数读取文本没有问题,唯一的问题是它会读取第一列的第一行,然后继续下一列,而不是向下移动第一列。
非常感谢您的帮助。
我遇到了同样的问题。我所做的是为我的每个 pdf 页面获取最频繁的 space 值并将其存储到 Vector 中。然后我使用该值对其进行切片。
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 文本和包含在 2+ 列中的 PDF 文本。是的,就这么简单!