7. Bảng phân công nhiệm vụ và đóng góp cho đề tài
1.3.3.1. Chuyển đổi định dạng file pdf sang định dạng file “sạch”
Đầu tiên, chúng ta đi tìm hiểu cấu trúc của một định dạng file pdf để tiến hành chuyển đổi định dạng file này sang một định dạng file “sạch” để tiến hành tạo chỉ mục cho việc tìm kiếm.
Portable Document Format (PDF) là một định dạng tập tin được tạo ra cho việc trao đổi tài liệu. Mỗi tập tin PDF gói gọn một mô tả đầy đủ của một tài liệu 2D bố trí cố định bao gồm văn bản, phông chữ và hình ảnh.
Cấu trúc của một file pdf có dạng như sau:
Cấu trúc của một tài liệu PDF cũng chính là hệ thống cây phân cấp của các đối tượng, nó được đánh dấu bằng các thẻ, và mỗi thẻ được thể hiện một thuộc tính, chức năng khác nhau.
Thông thường có 8 loại đối tượng được sử dụng trong một tài liệu PDF, đó là: Booleans, numbers, name, strings, arrays, dictionaries, streams và null.
* Đối với String: Trong một tài liệu PDF, một chuỗi bao gồm một loạt các byte 8-bit được bao quanh bởi dấu ngoặc đơn. Một chuỗi có thể được chia thành nhiều dòng bằng cách sử dụng dấu gạch chéo ngược (\) ở cuối dòng. Các dấu gạch chéo ngược chính nó không được coi là một phần của chuỗi.
Sinh viên thực hiện: Trịnh Xuân Lợi Trang 33
Ví dụ: ( This is a string. )
( This is a longer \ string. )
Bất kỳ giá trị 8-bit có thể được đại diện hoặc tương đương bát phân của nó (trong các hình thức \ ddd, ddd là số bát phân), hoặc bằng tương đương với hai chữ số hex của nó, bao quanh bởi các dấu ngoặc góc. Sau đó tôi sẽ tìm kiếm các dữ liệu văn bản trong chuỗi.
* Đối với Array: Array là một chuỗi các đối tượng PDF, đi kèm trong dấu ngoặc vuông.
Ví dụ: [(Hello,)10(Zend Fremawork!)]
* Đối với Dictionaries: Dictionaries là một cặp key/value, được sử dụng để chỉ định một số thuộc tính của một đối tượng, nó thường đi kèm theo cặp dấu ngoặc góc bên trái (<<) ở đầu và dấu ngoặc góc bên phải (>>) ở cuối.
Ví dụ: << /Length 4 0 R /Filter /FlateDecode >>
* Đối với Streams: Streams là một chuỗi 8-bit, nằm giữa từ khóa stream và endstream, đặt biệt nó sẽ được đặt trong ngoặc với từ khóa obj và endobj. Tất cả các nội dung đều được nằm trong các streams.
Trước từ khóa stream phải là một thuộc tính Dictionaries, cung cấp thông tin về chiều dài của stream (/ Length key) hoặc các thông tin khác.
Ví dụ: Một dòng văn bản nhỏ có thể được hình thành như sau:
2 0 obj << / Length 39 >> stream BT / F1 12 Tf 72 712 Td (This is a text.) Tj ET endstream endobj
Sinh viên thực hiện: Trịnh Xuân Lợi Trang 34
Trong ví dụ này, các văn bản được đưa ra như là một chuỗi tiếp theo là màn hình hiển thị văn bản điều hành Tj.
Vậy làm thế nào để có thể có được một tài liệu “sạch”?
Như ta đã thấy cấu trúc của file pdf, tất cả các thông tin về một nội dung đều được bố trí trong các streams. Và các nội dung trong các streams được bao bọc trong các khóa BT (Begin of text) và khóa ET (End of text). Một file pdf sẽ hiển thị ra nội dung của một văn bản nếu có khóa Tj (Hiển thị văn bản) hoặc TJ (Hiển thi văn bản có xem xét các vị trí đánh dấu).
Và công việc của chúng ta là đi phân tích cú pháp và đi sâu vào kiến trúc của streams để chiết xuất thông tin nội dung, trong đó chúng ta sẽ loại bỏ tất cả các thẻ, các hình ảnh, các yếu tố minh họa khác, chỉ lọc lấy ra một văn bản thuần nhất.
Từ những kiến thúc tìm hiểu được về định dạng file pdf, tôi đã cố gắng phát triển một function có chức năng chuyển đổi một file pdf sang định dạng file text nhằm tạo cơ sở cho việc lập chỉ mục tìm kiếm thông tin cho tài liệu.