Làm cách nào để trích xuất dữ liệu bảng từ PDF bằng Python?

Bài đăng này sẽ giới thiệu một số cách xóa bảng từ tệp PDF bằng Python. Để tìm hiểu thêm về cách cạo bảng và dữ liệu khác từ tệp PDF bằng R, hãy nhấp vào đây. Lưu ý, tùy chọn này sẽ chỉ hoạt động đối với các tệp PDF được nhập - không phải hình ảnh được quét

tabula-py

tabula-py là một gói rất hay cho phép bạn cạo các tệp PDF cũng như chuyển đổi các tệp PDF trực tiếp thành các tệp CSV. tabula-py có thể được cài đặt bằng pip

pip install tabula-py

Nếu bạn gặp sự cố với cài đặt, hãy kiểm tra điều này. Sau khi cài đặt, tabula-py rất dễ sử dụng. Dưới đây, chúng tôi sử dụng nó để cạo tất cả các bảng từ một bài báo về phân loại liên quan đến bộ dữ liệu Iris (có sẵn tại đây)

import tabula

file = "http://lab.fs.uni-lj.si/lasin/wp/IMIT_files/neural/doc/seminar8.pdf"

tables = tabula.read_pdf(file, pages = "all", multiple_tables = True)

Kết quả được lưu trữ trong các bảng là danh sách các khung dữ liệu tương ứng với tất cả các bảng được tìm thấy trong tệp PDF. Để tìm kiếm tất cả các bảng trong một tệp, bạn phải chỉ định tham số page = “all” và multiple_tables = True

Bạn cũng có thể sử dụng tabula-py để chuyển trực tiếp tệp PDF thành tệp CSV. Dòng đầu tiên bên dưới sẽ tìm bảng đầu tiên trong PDF và xuất nó thành CSV. Nếu chúng ta thêm tham số all = True, chúng ta có thể ghi tất cả các bảng của PDF vào CSV

# output just the first table in the PDF to a CSV
tabula.convert_into(file, "iris_first_table.csv")

# output all the tables in the PDF to a CSV
tabula.convert_into(file, "iris_all.csv", all = True)


tabula-py cũng có thể cạo tất cả các tệp PDF trong một thư mục chỉ bằng một dòng mã và thả các bảng từ mỗi tệp vào tệp CSV

tabula.convert_into_by_batch("/path/to/files", output_format = "csv", pages = "all")

Chúng ta có thể thực hiện thao tác tương tự, ngoại trừ thả các tệp ra JSON, như bên dưới

tabula.convert_into_by_batch("/path/to/files", output_format = "json", pages = "all")

lạc đà

Camelot là một khả năng khác để cạo các bảng từ các tệp PDF. Camelot có thể được cài đặt như vậy

pip install camelot-py[cv]

Camelot có một số phụ thuộc bổ sung, bao gồm GhostScript, được liệt kê tại đây. Sau khi cài đặt, chúng ta có thể sử dụng Camelot tương tự như tabula-py để cạo các bảng PDF

file = "http://lab.fs.uni-lj.si/lasin/wp/IMIT_files/neural/doc/seminar8.pdf"

tables = camelot.read_pdf(file, pages = "1-end")

Điều này trả về một đối tượng TableList. Để truy cập bất kỳ bảng nào được tìm thấy theo chỉ mục, bạn có thể thực hiện việc này

# get the 0th-indexed-table table
tables[0].df

# get the 3rd-indexed-table
tables[3].df

Một tính năng thú vị của Camelot là bạn cũng nhận được “báo cáo phân tích cú pháp” cho mỗi bảng cung cấp số liệu chính xác, trang tìm thấy bảng và tỷ lệ phần trăm khoảng trắng có trong bảng

________số 8

Làm cách nào để trích xuất dữ liệu bảng từ PDF bằng Python?

Từ đây, chúng ta có thể thấy rằng bảng xác định được lập chỉ mục thứ 0 về cơ bản là khoảng trắng. Nếu chúng ta xem bản PDF thô, chúng ta có thể thấy không có bảng trên trang đó, vì vậy có thể bỏ qua khung dữ liệu trống này một cách an toàn

Giống như tabula-py, bạn có thể xuất tất cả các bảng đã loại bỏ thành một tệp. Camelot hỗ trợ (khi viết bài này) CSV, JSON, HTML và SQLite. Nếu bạn chọn CSV thì mặc định Camelot sẽ tạo 1 file CSV riêng cho từng bảng. Bạn có thể tạo tệp zip của các CSV này bằng cách thêm tham số nén = True. Chọn xuất sang excel sẽ tạo một sổ làm việc chứa một trang tính riêng cho mỗi bảng

# export all tables at once to CSV files
tables.export("camelot_tables.csv", f = "csv")

# export all tables at once to CSV files in a single zip
tables.export("camelot_tables.csv", f = "csv", compress = True)

# export each table to a separate worksheet in an Excel file
tables.export("camelot_tables.xlsx", f = "excel")

Nếu bạn chỉ muốn xuất một bảng, bạn có thể thực hiện giống như trong gấu trúc vì mỗi bảng riêng lẻ có thể được gọi là đối tượng khung dữ liệu

import tabula

file = "http://lab.fs.uni-lj.si/lasin/wp/IMIT_files/neural/doc/seminar8.pdf"

tables = tabula.read_pdf(file, pages = "all", multiple_tables = True)

0

Excalibur

Nếu bạn đang tìm kiếm một giao diện web để sử dụng để trích xuất các bảng PDF, bạn có thể xem Excalibur, được xây dựng trên Camelot

Nếu Camelot đã được cài đặt, bạn chỉ cần sử dụng pip để cài đặt Excalibur

import tabula

file = "http://lab.fs.uni-lj.si/lasin/wp/IMIT_files/neural/doc/seminar8.pdf"

tables = tabula.read_pdf(file, pages = "all", multiple_tables = True)

1

Bạn có thể bắt đầu với Excalibur từ dòng lệnh. Sau khi bạn mở dòng lệnh, chỉ cần gõ như sau

import tabula

file = "http://lab.fs.uni-lj.si/lasin/wp/IMIT_files/neural/doc/seminar8.pdf"

tables = tabula.read_pdf(file, pages = "all", multiple_tables = True)

2

Lệnh trên sẽ khởi tạo một cơ sở dữ liệu meta cần thiết cho ứng dụng. Tiếp theo, chạy lệnh bên dưới để khởi động máy chủ web qua Flask

Làm cách nào để trích xuất mục lục từ PDF bằng Python?

Phương pháp 1. .
Bước 1. Nhập thư viện và xác định đường dẫn tệp
Bước 2. Trích xuất bảng từ tệp PDF. Đoạn mã trên đọc trang đầu tiên của tệp PDF, tìm kiếm các bảng và nối từng bảng dưới dạng DataFrame vào danh sách DataFrames dfs
Bước 3. Ghi khung dữ liệu vào tệp CSV

Python có thể làm việc với PDF để trích xuất bảng dữ liệu không?

Phương pháp 1. Sử dụng tabula-py . Bạn có thể cài đặt thư viện tabula-py bằng lệnh. Tệp PDF được sử dụng ở đây là PDF.

Làm cách nào để trích xuất dữ liệu từ PDF bằng gấu trúc Python?

Ghi chú. Tất cả các dòng bắt đầu bằng # là nhận xét. .
Bước 1. Nhập tất cả thư viện. import tabula#the pd là tốc ký tiêu chuẩn cho gấu trúc. nhập gấu trúc dưới dạng pd
Bước 2. Chuyển đổi bảng PDF của bạn thành DataFrame. # khai báo đường dẫn tệp của bạn. file_path = "/path/to/pdf_file/data. pdf"#Chuyển đổi tệp của bạn