Menu

App script quản lý rủi ro cho cá nhân & doanh nghiệp với báo cáo chuẩn định dạng biểu đồ

Tự động hóa trích xuất dữ liệu từ file PDF bằng Python: Một hướng dẫn chi tiết

Bàn Việt Hiệp 24/03/2026 10:38 222 lượt xem 3 trả lời

Chào các bạn,

Dạo gần đây mình có làm việc nhiều với các file PDF chứa dữ liệu quan trọng và nhận thấy việc trích xuất thủ công tốn rất nhiều thời gian. Sau khi tìm hiểu, mình đã khám phá ra cách sử dụng Python để tự động hóa quá trình này, đặc biệt là với các file PDF có cấu trúc tương đối ổn định. Hôm nay, mình muốn chia sẻ lại kinh nghiệm này với mọi người trên diễn đàn.

Chúng ta sẽ sử dụng thư viện PyPDF2 để đọc nội dung từ file PDF và re (regular expression) để trích xuất các thông tin cần thiết.

Các bước thực hiện cơ bản:

  • Cài đặt thư viện: pip install pypdf2
  • Mở và đọc file PDF.
  • Duyệt qua từng trang để lấy nội dung văn bản.
  • Sử dụng biểu thức chính quy để tìm kiếm và trích xuất dữ liệu mong muốn (ví dụ: mã số, ngày tháng, số tiền...).
  • Lưu dữ liệu trích xuất được vào file CSV hoặc Excel để tiện xử lý tiếp.

Ví dụ đơn giản:

Giả sử chúng ta có một file PDF chứa các hóa đơn và muốn trích xuất 'Mã hóa đơn' và 'Tổng tiền'. Chúng ta có thể định nghĩa các mẫu regex tương ứng.

import PyPDF2
import re

def extract_data_from_pdf(pdf_path):
    text = ""
    with open(pdf_path, 'rb') as file:
        reader = PyPDF2.PdfReader(file)
        for page in reader.pages:
            text += page.extract_text()

    # Ví dụ regex cho Mã hóa đơn (giả định định dạng HD-XXXXX)
    invoice_codes = re.findall(r'HD-\d{5}', text)

    # Ví dụ regex cho Tổng tiền (giả định có dấu phẩy và đơn vị VNĐ)
    amounts = re.findall(r'\d{1,3}(?:,\d{3})*\s*VNĐ', text)

    return invoice_codes, amounts

# Sử dụng hàm
pdf_file = 'path/to/your/invoice.pdf'

invoices, total_amounts = extract_data_from_pdf(pdf_file)

print("Mã hóa đơn:", invoices)
print("Tổng tiền:", total_amounts)

Lưu ý rằng việc xây dựng biểu thức chính quy (regex) có thể cần điều chỉnh tùy thuộc vào định dạng cụ thể của file PDF bạn đang xử lý. Đối với các file PDF có cấu trúc phức tạp hoặc là ảnh scan, bạn có thể cần kết hợp thêm các thư viện OCR như pytesseract.

Hy vọng chia sẻ này hữu ích cho các bạn đang cần xử lý dữ liệu từ file PDF. Nếu có câu hỏi hoặc có cách nào hay hơn, đừng ngần ngại chia sẻ nhé!

3

Hay quá bạn ơi! Mình cũng đang đau đầu với việc xử lý đống file PDF đây. Python đúng là cứu cánh cho nhiều bài toán tự động hóa.

Bạn có thể chia sẻ thêm về cách xử lý các file PDF có cấu trúc hơi khác nhau một chút không? Ví dụ như khi các trường thông tin không cố định vị trí hay định dạng.

Mình cũng từng thử qua PyPDF2 nhưng thấy việc trích xuất dữ liệu có cấu trúc phức tạp hơi khó. Hy vọng bài viết chi tiết của bạn sẽ giúp ích cho mọi người!

4

Cái vụ xử lý PDF này đúng là nhức đầu thật. Python với PyPDF2 là một lựa chọn hay ho đấy.

Mình có thêm một chút ý kiến thế này: với các file PDF mà cấu trúc không quá chuẩn, ngoài re, bạn có thể thử thêm các thư viện như pdfminer.six hoặc tabula-py. tabula-py đặc biệt hữu ích nếu PDF của bạn chứa các bảng dữ liệu, nó có thể trích xuất bảng ra dạng DataFrame của Pandas rất tiện.

Quan trọng là xác định được "mẫu" chung trong dữ liệu của bạn, dù nó có hơi xê dịch một chút. Chúc bạn thành công với những file PDF sắp tới!

1

Hay quá bạn ơi! Mình cũng đang đau đầu với việc xử lý đống file PDF đây. Python đúng là cứu cánh cho nhiều bài toán tự động hóa.

Bạn có thể chia sẻ thêm về cách xử lý các file PDF có cấu trúc hơi khác nhau một chút không? Ví dụ như khi các trường thông tin không cố định vị trí hay định dạng. Mình thấy cái này là thách thức lớn nhất khi làm việc với PDF.

4

Bạn cần đăng nhập để trả lời chủ đề này.

Đăng nhập Đăng ký