我有很多兩列格式的PDF。我在R中使用pdftools
包。有沒有辦法根據兩列格式讀取每個PDF,而無需單獨裁剪每個PDF?從兩列PDF中提取文本與R
每個PDF由可選擇的文本組成,並且pdf_text
函數讀取文本沒有問題,唯一的問題是它會讀取第一列的第一行,然後進入下一列,而不是向下移動第一列。
非常感謝您的幫助。
我有很多兩列格式的PDF。我在R中使用pdftools
包。有沒有辦法根據兩列格式讀取每個PDF,而無需單獨裁剪每個PDF?從兩列PDF中提取文本與R
每個PDF由可選擇的文本組成,並且pdf_text
函數讀取文本沒有問題,唯一的問題是它會讀取第一列的第一行,然後進入下一列,而不是向下移動第一列。
非常感謝您的幫助。
我會遇到同樣的問題。我所做的就是爲每個pdf頁面獲取最頻繁的空間值,並將其存儲到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
謝謝你的評論。我在'stops < - as.integer(names(sort(table(unlist(lstops)),decrease = TRUE)[1:2]))'行中出錯。錯誤報告找不到'lstops'。在此之前沒有定義。 – tsouchlarakis
對不起,昨天晚上我發佈了它。我測試並修復了它。再試一次。 –
這太棒了!在互聯網上我一直沒能找到像這樣的東西。我希望這會幫助人們前進。小的變化,需要取出for循環中的'i < - 2'行。否則,它只會打印第二頁,即「length(txt)」次。 – tsouchlarakis
我不知道讀取兩列pdf的函數。我認爲你必須編寫你自己的程序來讀取每一行,每行分隔每列,每個頁面每列每行rbind(),然後每個頁面每個列rbind(),然後rbind()每個頁面都有一個完整的數據集讀入它寫入的順序。 –
這很有道理,唯一的問題是R將直接讀取一列,並且只在兩邊的單詞之間放置一個空格。無法將該空間與正常空間區分開來。 – tsouchlarakis