2列形式のPDFがたくさんあります。 Rのpdftools
パッケージを使用しています。各PDFを個別にトリミングせずに2列形式で各PDFを読む方法はありますか?2列PDFのテキストをRで抽出する
各PDFは選択可能なテキストで構成され、pdf_text
関数はテキストを読むのに問題ありません。唯一の問題は、最初の列の最初の行を読み取り、次の列に進むことです。最初の列。
ご協力いただきありがとうございます。
2列形式のPDFがたくさんあります。 Rのpdftools
パッケージを使用しています。各PDFを個別にトリミングせずに2列形式で各PDFを読む方法はありますか?2列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))、reduce = TRUE)[1:2]))'行にエラーが表示されます。エラーは 'lstops'が見つからないことを報告します。その前に定義されていません。 – tsouchlarakis
申し訳ありませんが、私はそれを投稿した昨日の夜遅かったです。私はそれをテストして修正しました。もう一回やってみよう。 –
これは素晴らしいことです!私はこのようなことをインターネット上で見つけることができませんでした。私はこれが人々の前進に役立つことを願っています。小さな変更では、forループの 'i < - 2'行を取り出す必要があります。それ以外の場合は、2ページ目の 'length(txt)'回だけが出力されます。 – tsouchlarakis
私は、2つのカラムpdfsを読み込む関数を認識していません。私は、各行を読み込み、行ごとに各列を分離し、各列をページごとにrbind()し、各列をページごとにrbind()し、各ページをrbind()して完全なデータセットそれは書かれた順序で読む。 –
それは理にかなっていますが、唯一の問題は、Rが列をまっすぐに読んで両側にある単語の間にスペースだけを置くということです。その空間を通常の空間と区別する方法はありません。 – tsouchlarakis