Hầu hết các công cụ trích xuất PDF đang sử dụng sai API

Hầu hết các công cụ PDF đều sử dụng nguồn dữ liệu không chính xác.

Khi các nhà phát triển nói về việc trích xuất PDF, họ thường ám chỉ getTextContent(). Phương thức này cung cấp các mục văn bản và vị trí của chúng. Đây là lựa chọn mặc định cho hầu hết mọi công cụ chạy trên trình duyệt.

Nhưng getTextContent() chỉ là một chế độ xem đã qua xử lý. Nó là một phiên bản đơn giản hóa của những gì thực sự có sẵn.

Có ba cấp độ dữ liệu trong PDF.js:

getStructTree(): Cho bạn biết ý nghĩa của tài liệu. Nó chứa các bảng, tiêu đề và công thức. • getOperatorList(): Cho bạn biết những gì tài liệu vẽ ra. Nó bao gồm các đường kẻ, đường dẫn và hình khối. • getTextContent(): Đây là một chế độ xem đã được lọc từ những gì tài liệu vẽ ra.

Hầu hết các công cụ đều sử dụng tùy chọn thứ ba. Cách này hoạt động tốt với 80% các tài liệu như báo cáo đơn giản. Tuy nhiên, nó thất bại đối với các bài báo khoa học và các ấn phẩm phức tạp.

Chỉ sử dụng getTextContent() sẽ tạo ra bốn vấn đề lớn:

  • Bạn mất cấu trúc bảng. Bạn phải đoán vị trí các ô dựa trên vị trí của văn bản.
  • Bạn làm hỏng các phương trình toán học. Các phương trình LaTeX thường xuất hiện dưới dạng các khối văn bản khổng lồ, đơn lẻ.
  • Bạn bỏ lỡ các đường phân cột. Nhiều bố cục sử dụng các đường kẻ thực tế để phân chia các cột. Những đường kẻ này không tồn tại trong nội dung văn bản.
  • Bạn nhận được thứ tự đọc không chính xác. Văn bản thường xuất hiện theo thứ tự mà nó được vẽ ra, chứ không phải theo cách con người đọc.

Cách đúng đắn để xây dựng một bộ xử lý PDF là một hệ thống ba tầng:

  1. Kiểm tra getStructTree() trước. Nếu tài liệu có cấu trúc logic, hãy sử dụng nó để tìm bảng và tiêu đề ngay lập tức.
  2. Tiếp theo, kiểm tra getOperatorList(). Sử dụng các đường kẻ và đường dẫn rõ ràng để tìm ranh giới các cột.
  3. Sử dụng getTextContent() như một phương án dự phòng. Chỉ sử dụng toán học hình học khi hai tầng đầu tiên không cung cấp dữ liệu.

Cách tiếp cận này không làm tăng thêm khối lượng công việc. Tầng 1 và 2 đóng vai trò là các lối thoát nhanh. Nếu tài liệu có cấu trúc tốt, bạn sẽ bỏ qua các phép toán phức tạp. Bạn chỉ sử dụng suy luận phức tạp khi tài liệu không được gắn thẻ.

Kiến trúc này xử lý được cả các tệp doanh nghiệp đơn giản và các bài báo khoa học phức tạp.

Nguồn: https://dev.to/bonzai2carn/most-pdf-extractors-use-the-wrong-api-heres-what-we-built-instead-5dgh