Hướng dẫn camelot python - trăn lạc đà

PDF ( Định dạng Tài liệu Di động ) được ra đời từ Dự án Camelot nhằm tạo ra “một cách phổ biến để truyền đạt tài liệu trên nhiều loại cấu hình máy, hệ điều hành và mạng truyền thông”. Về cơ bản, mục tiêu là làm cho tài liệu có thể xem được trên bất kỳ màn hình nào và có thể in được trên bất kỳ máy in hiện đại nào. PDF được xây dựng dựa trên PostScript (một ngôn ngữ mô tả trang), đã giải quyết vấn đề “xem và in ở mọi nơi” này. PDF đóng gói các thành phần cần thiết để tạo tài liệu “xem và in ở mọi nơi”. Chúng bao gồm các ký tự, phông chữ, đồ họa và hình ảnh.

Tệp PDF xác định các hướng dẫn để đặt các ký tự (và các thành phần khác) tại các tọa độ x, y  chính xác so với góc dưới cùng bên trái của trang. Các từ được mô phỏng bằng cách đặt một số ký tự gần hơn những ký tự khác. Tương tự, các khoảng trắng được mô phỏng bằng cách đặt các từ tương đối xa nhau. Sau đó, các bảng được mô phỏng như thế nào? Bạn đã đoán đúng - bằng cách đặt các từ như chúng sẽ xuất hiện trong bảng tính.

Định dạng PDF không có biểu diễn bên trong của cấu trúc bảng, điều này gây khó khăn cho việc trích xuất bảng để phân tích. Đáng buồn thay, rất nhiều dữ liệu mở được lưu trữ trong các tệp PDF, dữ liệu này không được thiết kế cho dữ liệu dạng bảng ngay từ đầu!

Camelot: Trích xuất bảng PDF cho con người

Hôm nay, chúng tôi vui mừng thông báo về việc phát hành Camelot, một thư viện Python và 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 bên trong các tệp PDF! Bạn có thể xem tài liệu tại Đọc tài liệu và theo dõi sự phát triển trên GitHub .

Cách cài đặt Camelot

Cài đặt rất dễ dàng! Sau khi cài đặt các phần phụ thuộc , bạn có thể cài đặt Camelot bằng cách sử dụng pip (công cụ được khuyến nghị để cài đặt các gói Python).

Cách sử dụng Camelot

Việc trích xuất bảng từ một tệp PDF bằng Camelot rất đơn giản. Đây là cách bạn làm điều đó. ( Đây là tệp PDF được sử dụng trong ví dụ sau.)

>>> import camelot
>>> tables = camelot.read_pdf('foo.pdf')
>>> tables

>>> tables.export('foo.csv', f='csv', compress=True) # json, excel, html
>>> tables[0]

>>> tables[0].parsing_report
{
    'accuracy': 99.02,
    'whitespace': 12.24,
    'order': 1,
    'page': 1
}
>>> tables[0].to_csv('foo.csv') # to_json, to_excel, to_html
>>> tables[0].df # get a pandas DataFrame!
Tên chu kỳKI (1 / km)Khoảng cách (mi)Phần trăm tiết kiệm nhiên liệu
Cải thiện tốc độ Accel giảm Loại bỏ các điểm dừng Giảm nhàn rỗi
2012_2 3,30 1,3 5,9% 9,5% 29,2% 17,4%
2145_1 0,68 11,2 2,4% 0,1% 9,5% 29,2%
17,4% 0,59 58,7 2145_1 2,4% 2145_1 2,4%
0,1% 0,17 57,8 2,7% 4234_1 29,2% 17,4%
2145_1 0,07 173,9 2,4% 0,1% 2,7% 4234_1

8,5%

1,3%

3,3%

  • 2032_2
  • 21,7%
  • 0,3%
  • 1,2%

4171_1

58,1%

1,6%

2,1%

0,5%

xem foo.csv thô do GitHub lưu trữ

Bạn cũng có thể kiểm tra giao diện dòng lệnh .

Tại sao sử dụng Camelot?

Camelot cho phép bạn kiểm soát hoàn toàn việc trích xuất bảng bằng cách cho phép bạn tinh chỉnh cài đặt của nó.

Các bảng xấu có thể bị loại bỏ dựa trên các chỉ số như độ chính xác và khoảng trắng mà không cần phải xem từng bảng theo cách thủ công.

Chúng tôi rõ ràng cần một công cụ trích xuất bảng PDF có thể điều chỉnh, vì vậy chúng tôi bắt đầu phát triển một công cụ này vào tháng 12 năm 2015. Chúng tôi bắt đầu với ý tưởng đưa công cụ này trở lại cộng đồng, nơi đã cho chúng tôi rất nhiều công cụ mã nguồn mở để làm việc.

Chúng tôi biết rằng Tabula phân loại các bảng PDF thành hai lớp. Nó có hai phương pháp để trích xuất các lớp khác nhau này: Lattice (để trích xuất các bảng với các đường được xác định rõ ràng giữa các ô) và Stream (để trích xuất các bảng có khoảng cách giữa các ô). Chúng tôi đặt tên cho các hương vị chiết xuất trên bảng của Camelot, Lattice và Stream, theo tên các phương pháp của Tabula.

Đối với Lattice, Tabula sử dụng Hough Transform , một kỹ thuật xử lý hình ảnh để phát hiện các đường. Vì chúng tôi muốn sử dụng Python, OpenCV là lựa chọn hiển nhiên để xử lý hình ảnh. Tuy nhiên, Biến đổi dòng Hough của OpenCV chỉ trả về các phương trình dòng. Sau khi khám phá nhiều hơn, chúng tôi giải quyết các biến đổi hình thái , đưa ra các phân đoạn đường thẳng chính xác. Từ đây, đại diện cho bảng bị mắc kẹt bên trong một tệp PDF rất đơn giản.

Để biết thêm thông tin về cách Mạng và Luồng hoạt động trong Camelot, hãy xem phần “Cách hoạt động” của tài liệu.

Cách chúng tôi sử dụng Camelot

Chúng tôi đã thử nghiệm Camelot bằng cách sử dụng nó trong nhiều dự án khác nhau, cả để trích xuất bảng một lần và tự động.

Đầu năm nay, chúng tôi đã phát triển Giải pháp SDG của LHQ để giúp các tổ chức theo dõi và đo lường đóng góp của họ cho Chương trình nghị sự 2030 . Đối với Ấn Độ, chúng tôi đã xác định các nguồn dữ liệu mở (chủ yếu là các báo cáo PDF) cho mỗi 17 Mục tiêu Phát triển Bền vững. Ví dụ: một trong những nguồn của chúng tôi cho Mục tiêu 3 (“Sức khỏe Tốt và Phúc lợi cho Con người”) là báo cáo Khảo sát Sức khỏe Gia đình Quốc gia (NFHS) do IIPS phát hành . Để lấy dữ liệu từ các nguồn PDF này, chúng tôi đã tạo một giao diện web nội bộ được xây dựng trên Camelot, nơi các nhà phân tích dữ liệu của chúng tôi có thể tải lên các báo cáo PDF và trích xuất các bảng ở định dạng ưa thích của họ.

Lưu ý: Chúng tôi đã trở thành ứng viên lọt vào vòng chung kết của Giải thưởng Hành động SDG của LHQ vào tháng 2 năm 2018 .

Chúng tôi cũng thiết lập quy trình làm việc ETL sử dụng Apache Airflow để theo dõi các đợt bùng phát dịch bệnh ở Ấn Độ . Quy trình làm việc này sẽ quét trang web của Chương trình Giám sát Dịch bệnh Tích hợp (IDSP) để tìm dữ liệu dịch bệnh bùng phát ở dạng PDF hàng tuần và sau đó, nó trích xuất các bảng từ các tệp PDF bằng Camelot, gửi cảnh báo cho nhóm của chúng tôi và tải dữ liệu vào kho dữ liệu.

To Infinity and Beyond!

Camelot có một số hạn chế. (Chúng tôi đang phát triển các giải pháp!) Dưới đây là một số giải pháp:

  • Khi sử dụng Luồng, bảng không được phát hiện tự động. Luồng xử lý toàn bộ trang như một bảng duy nhất, điều này cho kết quả không tốt khi có nhiều bảng trên trang.
  • 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 các tài liệu được quét. (Như Tabula giải thích , “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ì tệp PDF của bạn là văn bản”.)

Bạn có thể kiểm tra kho lưu trữ GitHub để biết thêm thông tin.

Bạn cũng có thể giúp - mọi đóng góp đều có giá trị! Xem Hướng dẫn dành cho cộng tác viên để biết các hướng dẫn về đóng góp mã, tài liệu hoặc thử nghiệm, báo cáo sự cố và đề xuất các cải tiến. Bạn cũng có thể truy cập trình theo dõi vấn đề và tìm kiếm các vấn đề được gắn nhãn “muốn được trợ giúp” và “vấn đề đầu tiên tốt”.

Chúng tôi kêu gọi các tổ chức phát hành dữ liệu mở ở định dạng “thân thiện với dữ liệu” như CSV . Nhưng trong khi các bảng bị mắc kẹt bên trong các tệp PDF, thì có Camelot.

Được xuất bản lần đầu tại socialcops.com vào ngày 3 tháng 10 năm 2018.

2 hữu ích 0 bình luận 15k xem chia sẻ 0 bình luận 15k xem chia sẻ