PDF có thể xem được nhưng không thể sao chép, nó có thể không phải là bản quét: trước tiên hãy kiểm tra lớp văn bản và ánh xạ ký tự
Nếu không có văn bản thì không thể đánh giá trực tiếp là "lớp văn bản bình thường", cũng không thể đánh giá trực tiếp là bản quét. Văn bản, ký tự thay thế và tham chiếu hình ảnh trang lần lượt được ghi lại bên dưới và trạng thái cần xem xét là đầu ra; tham chiếu hình ảnh không chứng minh rằng hình ảnh đã bao phủ toàn bộ trang hoặc văn bản có thể nhận dạng được.
Nếu bạn có thể nhìn thấy văn bản trong tệp PDF nhưng không thể sao chép thì đó có thể không phải là bản sao được quét hoặc có thể có vấn đề với ánh xạ ký tự. Bài viết này được viết cho các nhà phát triển và người xử lý tài liệu, những người cần trích xuất, dịch hoặc cấu trúc nội dung PDF. Sau khi đọc, bạn sẽ biết cách phân biệt các vấn đề ở cấp độ văn bản và nội dung hình ảnh trước tiên, đồng thời sử dụng các tín hiệu thống nhất để xác định việc cần làm tiếp theo.
Mã và các ví dụ ở đây sử dụng các mẫu tổng hợp đã vượt qua quá trình kiểm tra mẫu trong môi trường biệt lập và không thể hiện sự đảm bảo về tất cả các tệp thực hoặc hiệu suất sản phẩm. Trước khi xử lý các văn bản quan trọng, vui lòng giữ lại bản chính và xem xét theo ranh giới và các mục chấp nhận trong văn bản.
Bản PDF có thể xem được nhưng không thể sao chép. Đây có phải là bản scan không? Một câu kết luận
Không thể phán xét trực tiếp. Trước tiên hãy kiểm tra lớp văn bản và ánh xạ ký tự, sau đó xem hình ảnh trang và cuối cùng xác định xem đó là lỗi quét hay ánh xạ.
| hoàn cảnh của bạn | Các phương pháp được đề xuất | lý do |
|---|---|---|
| Có thể xem văn bản, sao chép các ký tự bị cắt xén hoặc khoảng trống | Kiểm tra ánh xạ ToUnicode và mã hóa phông chữ | Hình ảnh vẫn bình thường nhưng lớp văn bản bị hỏng, phần lớn là do ánh xạ bị thiếu hoặc sai. |
| Các ký tự được sao chép trông hợp lý nhưng có ngữ nghĩa không chính xác | Kiểm tra kết quả trích xuất dựa trên nội dung trực quan | Ánh xạ heuristic có thể xuất ra các ký tự sai và vượt qua kiểm tra không rỗng |
| Không có văn bản, nhưng có hình ảnh trên trang | Kiểm tra xem hình ảnh có chứa văn bản hay không và sau đó xác định xem có cần OCR không | Trích dẫn hình ảnh không có nghĩa là quét toàn trang và cũng không chứng minh được văn bản có thể đọc được |
| Cả văn bản và hình ảnh đều không được kiểm tra | Xem nội dung bản vẽ trang | Không có cách nào để kết luận rằng trang này trống |
Tại sao mã sao chép bị cắt xén?
Người dùng có thể xem văn bản bình thường trong trình duyệt hoặc trình đọc, nhưng văn bản được sao chép bị cắt xén, trống hoặc có các ký hiệu không liên quan. Đây thường không phải là tệp bị hỏng và cũng không nhất thiết phải là bản sao được quét. Nguyên nhân cốt lõi là do bảng ánh xạ glyph (Glyph) sang Unicode (ToUnicode CMap) bên trong tệp PDF bị thiếu hoặc sai.
Các công cụ kết xuất dựa vào chỉ mục glyph để vẽ nội dung trực quan, trong khi các công cụ trích xuất văn bản và clipboard dựa vào các bảng ánh xạ để khôi phục các ký tự ngữ nghĩa. Khi cả hai bị hỏng, một lớp văn bản xấu "bình thường, không thể đọc được bằng máy" sẽ xuất hiện.
Trước khi thực hiện dịch tài liệu hoặc trích xuất có cấu trúc, trước tiên bạn cần xác nhận xem sự cố nằm ở việc ánh xạ hay bản thân trang đó có phải là hình ảnh hay không. Nếu không, các quy trình OCR hoặc NLP tiếp theo sẽ dựa trên tiền đề sai.
Cơ chế phá vỡ giữa chỉ mục glyph và ánh xạ Unicode
Đặc tả PDF cho phép phông chữ chỉ nhúng thông tin về chiều rộng và đường viền glyph chứ không phải ánh xạ mã hóa ký tự. Các điều kiện sau đây có thể gây ra vỡ:
- Phần mềm tạo PDF không ghi bảng ToUnicode chính xác
- Mã hóa tùy chỉnh được sử dụng nhưng không có quy tắc giải mã nào được cung cấp
Tại thời điểm này, trình trích xuất chỉ có thể lấy ID glyph gốc (CID). Các ID này có ý nghĩa đối với trình kết xuất nhưng không có giá trị đối với việc xử lý văn bản.
Một số công cụ sử dụng phương pháp phỏng đoán để đoán ánh xạ và kết quả có thể là các ký tự có vẻ hợp lý nhưng thực tế lại sai, chẳng hạn như chuyển dấu câu tiếng Trung thành chữ cái Latinh hoặc thay thế số bằng ký tự điều khiển. Loại "văn bản giả" này tinh tế hơn khoảng trắng thuần túy vì nó có thể vượt qua kiểm tra khác null, nhưng nó sẽ gây ô nhiễm dữ liệu thầm lặng trong các liên kết xuôi dòng.
Chìa khóa để đánh giá những vấn đề như vậy không phải là xem liệu văn bản có thể được chọn hay không mà là xác minh xem chuỗi được trích xuất có phù hợp về mặt ngữ nghĩa với nội dung trực quan hay không.
Sử dụng PyMuPDF để chẩn đoán tổng hợp bộ nhớ
Đoạn mã sau xây dựng đầu vào trong bộ nhớ và xác minh logic chẩn đoán:
from io import BytesIO
from PIL import Image
import pymupdf
def inspect(page):
text = page.get_text().strip()
images = page.get_images()
if "\ufffd" in text:
state = "review_replacement_characters"
elif text:
state = "text_present_needs_semantic_review"
elif images:
state = "image_without_extracted_text"
else:
state = "empty_text_needs_review"
return {"state": state, "characters": len(text), "image_refs": len(images)}
with pymupdf.open() as doc:
doc.new_page().insert_text((50, 50), "Text sample")
doc.new_page()
picture = BytesIO()
Image.new("RGB", (16, 16), "red").save(picture, format="PNG")
doc.new_page().insert_image(pymupdf.Rect(10, 10, 100, 100), stream=picture.getvalue())
assert inspect(doc[0])["state"] == "text_present_needs_semantic_review"
assert inspect(doc[1])["state"] == "empty_text_needs_review"
assert inspect(doc[2])["state"] == "image_without_extracted_text"
assert inspect(doc[2])["characters"] == 0
Trong đoạn mã trên, hàm diagnose_text_layer lấy văn bản gốc thông qua get_text("text"), sử dụng unicodedata.category để lọc các ký tự điều khiển và ký tự khoảng trắng, đồng thời tính toán tỷ lệ nội dung hiệu quả. Đồng thời, nó phát hiện sự hiện diện của các khối hình ảnh thông qua get_text("blocks").
Hai xác nhận này xác minh hai trường hợp: một tài liệu bình thường có tỷ lệ in được cao hơn 0,9 và một tài liệu được quét có số ký tự bằng 0. Điều này bao gồm logic phân nhánh cốt lõi.
Điều quan trọng cần lưu ý là chẩn đoán này chỉ dựa trên các đặc điểm thống kê. Đối với phông chữ được mã hóa hoặc mã hóa đặc biệt, vẫn cần phải xem xét thủ công.
📊 So sánh cốt lõi
Bảng sau liệt kê các hướng kiểm tra tương ứng với các tín hiệu khác nhau và những kết luận không nên rút ra:
| Tín hiệu | Bước tiếp theo để kiểm tra | Những kết luận không nên rút ra |
|---|---|---|
| Có văn bản in được | Kiểm tra ngữ nghĩa, thứ tự và nguồn | Nếu bạn có thể trích xuất nó, nghĩa là nó đúng |
| Có những nhân vật thay thế | Xem lại mã hóa và ánh xạ phông chữ | Tất cả các nhân vật đều đã bị mất |
| Có hình ảnh nhưng không có chữ | Kiểm tra xem hình ảnh có chứa văn bản không | Phải là bản quét toàn trang |
| Không phát hiện được văn bản hay hình ảnh nào | Xem bản vẽ trang | Chắc chắn là một trang trắng |
🎯 Phương pháp nào phù hợp với bạn?
Nếu bạn có thể nhìn thấy văn bản nhưng không thể sao chép
Ưu tiên kiểm tra các ánh xạ ToUnicode và mã hóa phông chữ, thường do các đoạn mã bản đồ gây ra.
Nếu văn bản sao chép trông bình thường nhưng có lỗi,
Sử dụng nội dung hình ảnh để so sánh và trích xuất kết quả từng đoạn một; đừng chỉ xem liệu nó có phải là null hay không.
Nếu trang chỉ có hình ảnh mà không có văn bản
Kiểm tra xem hình ảnh có chứa văn bản không, sau đó quyết định xem có cần OCR hay không. Đừng cho rằng toàn bộ trang là một bản quét.
Nếu bạn đang chuẩn bị dịch tài liệu
Đầu tiên, hoàn thành kiểm tra tính toàn vẹn của văn bản, sau đó bàn giao mẫu đã được giảm nhạy cho quá trình dịch.
Sử dụng danh sách kiểm tra này để dịch tài liệu
Đầu tiên, kiểm tra kỹ thứ tự trang, vị trí nguồn và tính toàn vẹn văn bản, sau đó gửi mẫu giảm nhạy cảm đó cho quá trình dịch. Sau khi dịch, vẫn cần kiểm tra xem tiêu đề, văn bản chính và chú thích có khớp chính xác hay không; không chỉ đánh giá qua độ mượt mà của văn bản là đủ.
OmniDoc (Mục sản phẩm) cung cấp cổng dịch tài liệu đa định dạng, với trang web chính thức giới thiệu OCR, bảng thuật ngữ và các tính năng tham khảo song ngữ. Nếu bạn muốn bắt đầu trực tiếp từ tệp, bạn có thể đánh giá đường dẫn này bằng các mẫu thực tế.
Vui lòng sử dụng tệp lo lắng mà bạn có quyền tải lên và xác minh kết quả của danh sách kiểm tra trong bài viết này. Điều này không khẳng định rằng OmniDoc sử dụng các thư viện mã nguồn mở hoặc thuật toán nội bộ được đề cập trong bài viết này, cũng không thay thế kiểm thử hiệu suất sản phẩm bằng các ví dụ.
❓ Câu hỏi thường gặp (FAQ)
1. Nếu bạn có thể trích xuất văn bản, điều đó có nghĩa là lớp văn bản đó đúng không?
Không. Nội dung trích xuất cũng cần được kiểm tra về ngữ nghĩa, thứ tự và nguồn, và nếu ánh xạ không chính xác, nó có thể cho ra các ký tự có vẻ hợp lý.
2. Nếu có hình ảnh trên trang, liệu đó có nghĩa là đó là một bản quét không?
Không hẳn vậy. Tham chiếu hình ảnh không chứng minh hình ảnh bao phủ toàn bộ trang, cũng không chứng minh rằng văn bản có thể nhận diện được; bạn cần kiểm tra xem hình ảnh có chứa văn bản hay không.
3. Nếu không phát hiện được cả văn bản lẫn hình ảnh, liệu có nghĩa là trang đó đang trống không?
Không thể rút ra kết luận dựa trên điều này. Bạn nên kiểm tra cách hiển thị trang trước khi đưa ra đánh giá.
4. Script chẩn đoán này có thể dùng cho tất cả PDF không?
Không. Nó chỉ dựa trên các đặc điểm thống kê; phông chữ mã hóa hoặc mã hóa đặc biệt vẫn cần xác minh thủ công.
📝 Tóm tắt
PDF có thể đọc nhưng không được sao chép; trước tiên kiểm tra các lớp văn bản và ánh xạ ký tự, sau đó xem nội dung hình ảnh, và cuối cùng xác định xem đó có phải là bản quét hay không. Trước khi xử lý, hãy giữ lại các tài liệu gốc và xem xét từng mục với các mục kiểm tra.
Trải nghiệm ngay: Tải lên tài liệu của bạn để bắt đầu dịch, giữ nguyên định dạng gốc


