Một mục mã nguồn mở trong kho dữ liệu GitHub của TopGit: ropensci/pdftools, 553 sao, C++. Text Extraction, Rendering and Converting of PDF Documents
Tóm tắt dựng từ metadata GitHub của chính dự án — chưa có bài review TopGit. Trang sẽ tự động cập nhật khi bài review đầy đủ được xuất bản.
VÌ SAO CHƯA CÓ REVIEW
TopGit viết bài đầy đủ cho repo có nhiều sao nhất và được yêu cầu nhiều nhất. Trang này là snapshot trong thời gian chờ — xem README gốc ở tab READ ME.
Scientific articles are typically locked away in PDF format, a format designed primarily for printing but not so great for searching or indexing. The new pdftools package allows for extracting text and metadata from pdf files in R. From the extracted plain-text one could find articles discussing a particular drug or species name, without having to rely on publishers providing metadata, or pay-walled search engines.
The pdftools slightly overlaps with the Rpoppler package by Kurt Hornik. The main motivation behind developing pdftools was that Rpoppler depends on glib, which does not work well on Mac and Windows. The pdftools package uses the poppler c++ interface together with Rcpp, which results in a lighter and more portable implementation.
Installation
On Windows and Mac the binary packages can be installed directly from CRAN:
install.packages("pdftools")
Installation on Linux requires the poppler development library. On Debian or Ubuntu use:
sudo apt-get install libpoppler-cpp-dev
If you want to install the package from source on MacOS you need brew:
brew install poppler
On Fedora:
sudo yum install poppler-cpp-devel
Getting started
The ?pdftools manual page shows a brief overview of the main utilities. The most important function is pdf_text which returns a character vector of length equal to the number of pages in the pdf. Each string in the vector contains a plain text version of the text on that page.
library(pdftools)
download.file("http://arxiv.org/pdf/1403.2805.pdf", "1403.2805.pdf", mode = "wb")
txt <- pdf_text("1403.2805.pdf")
# first page text
cat(txt[1])
# second page text
cat(txt[2])
In addition, the package has some utilities to extract other data from the PDF file. The pdf_toc function shows the table of contents, i.e. the section headers which pdf readers usually display in a menu on the left. It looks pretty in JSON:
# Table of contents
toc <- pdf_toc("1403.2805.pdf")
# Show as JSON
jsonlite::toJSON(toc, auto_unbox = TRUE, pretty = TRUE)
Other functions provide information about fonts, attachments and metadata such as the author, creation date or tags.
# Author, version, etc
info <- pdf_info("1403.2805.pdf")
# Table with fonts
fonts <- pdf_fonts("1403.2805.pdf")
Rendering pdf files
Another feature of pdftools is rendering of PDF files to bitmap arrays (images). The poppler library provides all functionality to implement a complete PDF reader, including graphical display of the content. In R we can use pdf_render_page to render a page of the PDF into a bitmap, which can be stored as e.g. png or jpeg.
# renders pdf to bitmap array
bitmap <- pdf_render_page("1403.2805.pdf", page = 1)
# save bitmap image
png::writePNG(bitmap, "page.png")
webp::write_webp(bitmap, "page.webp")
Limitations and related packages
Tables
Data scientists are often interested in data from tables. Unfortunately the pdf format is pretty dumb and does not have notion of a table (unlike for example HTML). Tabular data in a pdf file is nothing more than strategically positioned lines and text, which makes it difficult to extract the raw data with pdftools.
txt <- pdf_text("http://arxiv.org/pdf/1406.4806.pdf")
# some tables
cat(txt[18])
cat(txt[19])
The tabulizer package is dedicated to extracting tables from PDF, and includes interactive tools for selecting tables. However, tabulizer depends on rJava and therefore requires additional setup steps or may be impossible to use on systems where Java cannot be installed.
It is possible to use pdftools with some creativity to parse tables from PDF documents, which does not require Java to be installed.
Scanned text
If you want to extract text from scanned text present in a pdf, you'll need to use OCR (optical character recognition). Please refer to the rOpenSci tesseract package that provides bindings to the Tesseract OCR engine. In particular read the section of its vignette about reading from PDF files using pdftools and tesseract.
Trang TopGit này là một snapshot — tab "Readme" hiển thị nguyên văn README của repo (đã bỏ link, giữ ảnh). Repo GitHub ở github.com/ropensci/pdftools là nguồn chính thức.
TopGit chưa ghi nhận license cho ropensci/pdftools. Phần lớn repo public trên GitHub là mã nguồn mở, nhưng điều khoản khác nhau từng repo — mở file LICENSE để xác nhận.
ropensci/pdftools có trang demo không?
Dự án có trang chủ ở https://docs.ropensci.org/pdftools. Tab "Readme" ở trang này thường có ảnh chụp và hướng dẫn bắt đầu nhanh.
ropensci/pdftools còn đang phát triển không?
Commit gần nhất trên ropensci/pdftools là 10 ngày trước (theo timestamp GitHub). Repo có 72 fork — một chỉ báo về mức độ quan tâm của cộng đồng.
Đọc đầy đủ README ở tab phía trên.
Vẫn đang phân vân về pdftools?
Một cú bấm sẽ gửi câu hỏi kèm trang này cho AI — xem AI nói gì về pdftools.