Trích xuất bảng từ PDF Python PyPDF2

Một thẻ đã tồn tại với tên chi nhánh được cung cấp. Nhiều lệnh Git chấp nhận cả tên thẻ và tên nhánh, vì vậy việc tạo nhánh này có thể gây ra hành vi không mong muốn. Bạn có chắc chắn muốn tạo nhánh này không?

Tiết lộ. Bài đăng này có thể chứa các liên kết liên kết, nghĩa là khi bạn nhấp vào liên kết và mua hàng, chúng tôi sẽ nhận được hoa hồng

Bạn muốn xuất bảng từ file PDF bằng ngôn ngữ lập trình Python?

Camelot là một thư viện Python và một công cụ dòng lệnh giúp mọi người dễ dàng trích xuất các bảng dữ liệu bị mắc kẹt trong các tệp PDF, kiểm tra tài liệu chính thức và kho lưu trữ Github của họ

Trong khi Tabula-py là một trình bao bọc Python đơn giản của tabula-java, có thể đọc các bảng trong PDF. Nó cho phép bạn chuyển đổi tệp PDF thành CSV, TSV, JSON hoặc thậm chí là DataFrame của gấu trúc

Trong hướng dẫn này, bạn sẽ tìm hiểu cách trích xuất các bảng trong PDF bằng cách sử dụng cả thư viện camelot và tabula-py trong Python

Có liên quan. Cách trích xuất hình ảnh từ PDF bằng Python

Trước tiên, bạn cần cài đặt các phụ thuộc cần thiết để thư viện camelot hoạt động bình thường, sau đó bạn có thể cài đặt các thư viện bằng dòng lệnh

pip3 install camelot-py[cv] tabula-py

Lưu ý rằng bạn cần đảm bảo rằng bạn đã cài đặt đúng cách Tkinter và ghostscript [là các phần phụ thuộc cần thiết cho camelot] trong máy tính của bạn

Trích xuất các bảng PDF bằng Camelot

Bây giờ bạn đã cài đặt tất cả các yêu cầu cho hướng dẫn này, hãy mở một tệp Python mới và làm theo

import camelot

# PDF file to extract tables from
file = "foo.pdf"

Tôi có một tệp PDF trong thư mục hiện tại có tên là "foo. pdf" [lấy tại đây] là một trang PDF bình thường chứa một bảng được hiển thị trong hình ảnh sau

Chỉ là một bảng ngẫu nhiên, hãy giải nén nó bằng Python

# extract all the tables in the PDF file
tables = camelot.read_pdf[file]

hàm read_pdf[] trích xuất tất cả các bảng trong tệp PDF, hãy in số lượng bảng được trích xuất

# number of tables extracted
print["Total tables extracted:", tables.n]

kết quả này

Total tables extracted: 1 

Chắc chắn rồi, nó chỉ chứa một bảng, in bảng này dưới dạng Khung dữ liệu Pandas

# print the first table as Pandas DataFrame
print[tables[0].df]

đầu ra

              0            1                2                     3                  4                  5                 6
0  Cycle \nName  KI \n[1/km]  Distance \n[mi]  Percent Fuel Savings
1                                                  Improved \nSpeed  Decreased \nAccel  Eliminate \nStops  Decreased \nIdle
2        2012_2         3.30              1.3                  5.9%               9.5%              29.2%             17.4%
3        2145_1         0.68             11.2                  2.4%               0.1%               9.5%              2.7%
4        4234_1         0.59             58.7                  8.5%               1.3%               8.5%              3.3%
5        2032_2         0.17             57.8                 21.7%               0.3%               2.7%              1.2%
6        4171_1         0.07            173.9                 58.1%               1.6%               2.1%              0.5%

Điều đó chính xác, hãy xuất bảng thành tệp CSV

# export individually as CSV
tables[0].to_csv["foo.csv"]

CSV không phải là tùy chọn duy nhất, bạn cũng có thể sử dụng các phương pháp

import camelot

# PDF file to extract tables from
file = "foo.pdf"
6,
import camelot

# PDF file to extract tables from
file = "foo.pdf"
7,
import camelot

# PDF file to extract tables from
file = "foo.pdf"
8 và
import camelot

# PDF file to extract tables from
file = "foo.pdf"
9, đây là một ví dụ xuất sang bảng tính Excel

import camelot

# PDF file to extract tables from
file = "foo.pdf"
2

Hoặc nếu bạn muốn xuất tất cả các bảng trong một lần

import camelot

# PDF file to extract tables from
file = "foo.pdf"
3

tham số f cho biết định dạng tệp, trong trường hợp này là "csv". Bằng cách đặt tham số nén bằng True, thao tác này sẽ tạo tệp ZIP chứa tất cả các bảng ở định dạng CSV

Bạn cũng có thể xuất các bảng sang định dạng HTML

import camelot

# PDF file to extract tables from
file = "foo.pdf"
0

hoặc bạn cũng có thể xuất sang các định dạng khác như JSON và Excel

Điều đáng chú ý là Camelot chỉ hoạt động với các tệp PDF dựa trên văn bản chứ không phải tài liệu được quét. Nếu bạn có thể nhấp và kéo để chọn văn bản trong bảng của mình trong trình xem PDF, thì đó là PDF dựa trên văn bản, do đó, điều này sẽ hoạt động trên giấy tờ, sách, tài liệu, v.v.

Đọc thêm. Cách chia nhỏ tệp PDF bằng Python

Trích xuất các bảng PDF bằng Tabula-py

Mở một tệp Python mới và nhập tabula

import camelot

# PDF file to extract tables from
file = "foo.pdf"
1

Chúng tôi chỉ đơn giản sử dụng phương pháp

# extract all the tables in the PDF file
tables = camelot.read_pdf[file]
0 để trích xuất các bảng trong tệp PDF [một lần nữa, hãy lấy ví dụ PDF tại đây]

import camelot

# PDF file to extract tables from
file = "foo.pdf"
2

Chúng tôi đặt

# extract all the tables in the PDF file
tables = camelot.read_pdf[file]
1 thành
# extract all the tables in the PDF file
tables = camelot.read_pdf[file]
2 để trích xuất các bảng trong tất cả các trang PDF, phương thức
# extract all the tables in the PDF file
tables = camelot.read_pdf[file]
3] trả về danh sách các
# extract all the tables in the PDF file
tables = camelot.read_pdf[file]
4 gấu trúc, mỗi
# extract all the tables in the PDF file
tables = camelot.read_pdf[file]
4 tương ứng với một bảng. Bạn cũng có thể chuyển một URL tới phương thức này và nó sẽ tự động tải xuống tệp PDF trước khi giải nén các bảng

Đoạn mã dưới đây là một ví dụ về việc lặp qua tất cả các bảng được trích xuất và lưu chúng dưới dạng bảng tính Excel

import camelot

# PDF file to extract tables from
file = "foo.pdf"
3

Điều này sẽ tạo thư mục

# extract all the tables in the PDF file
tables = camelot.read_pdf[file]
6 và đặt tất cả các bảng được phát hiện ở định dạng Excel vào thư mục đó, hãy dùng thử

Bây giờ, nếu bạn muốn trích xuất tất cả các bảng từ một tệp PDF và đổ chúng vào một tệp CSV thì sao?

import camelot

# PDF file to extract tables from
file = "foo.pdf"
4

Nếu bạn có nhiều tệp PDF và bạn muốn chạy phần trên trên tất cả chúng, thì bạn có thể sử dụng phương pháp

# extract all the tables in the PDF file
tables = camelot.read_pdf[file]
7

import camelot

# PDF file to extract tables from
file = "foo.pdf"
5

Điều này sẽ xem xét thư mục

# extract all the tables in the PDF file
tables = camelot.read_pdf[file]
8 và xuất tệp CSV cho từng tệp PDF trong thư mục đó

Sự kết luận

Đối với các tệp lớn, thư viện camelot có xu hướng hoạt động tốt hơn tabula-py. Tuy nhiên, đôi khi bạn sẽ gặp phải

# extract all the tables in the PDF file
tables = camelot.read_pdf[file]
9 đối với một số tệp PDF khi sử dụng thư viện camelot, bạn có thể sử dụng tabula-py thay thế

Lưu ý rằng điều này sẽ không chuyển đổi các ký tự hình ảnh thành văn bản kỹ thuật số, nếu muốn, bạn có thể sử dụng các kỹ thuật OCR để chuyển đổi các ký tự quang học của hình ảnh thành văn bản thực tế có thể thao tác được trong Python, các hướng dẫn bên dưới có thể giúp bạn đáng kể

Dưới đây là một số hướng dẫn PDF có liên quan có thể giúp bạn trong công việc của mình

Để biết danh sách đầy đủ, hãy kiểm tra trang của danh mục

Được rồi, đây là hướng dẫn dành cho hướng dẫn này, hãy xem tài liệu chính thức của Camelot và tài liệu chính thức của tabula-py để biết thêm thông tin chi tiết

Kiểm tra mã đầy đủ ở đây

Lặn sâu hơn với Python

Cuối cùng, nếu bạn là người mới bắt đầu và muốn học Python, tôi khuyên bạn nên tham gia khóa học Python For Everyone Coursera, trong đó bạn sẽ học được nhiều điều về Python, chúc may mắn

Chủ Đề