Đánh dấu các từ tìm kiếm PDF, tại sao khung hình chữ nhật in nghiêng văn bản không chính xác?

Phông chữ in nghiêng không nhất thiết làm cho diện tích của Quad được tìm kiếm nhỏ hơn hình chữ nhật kèm theo. Khi bạn cần giữ lại thông tin hướng bốn góc, hãy sử dụng trực tiếp kết quả của quads=True để thêm phần đánh dấu; không sử dụng bất kỳ ngưỡng chênh lệch diện tích nào để xác định xem việc đánh dấu có chính xác hay không.

Khi hộp đánh dấu tìm kiếm cho văn bản in nghiêng bị lệch, thường không phải do phông chữ có vấn đề mà do đối tượng hình học dùng để đánh dấu bị chọn sai. Bài viết này dành cho các nhà phát triển sử dụng PyMuPDF để xử lý định vị văn bản PDF. Nó giải thích tại sao không thể sử dụng hình chữ nhật kèm theo (Rect) để xác định xem việc đánh dấu văn bản in nghiêng hoặc xoay có chính xác hay không và cách xử lý nó trong các tình huống khác nhau.

Sau khi đọc bài viết này, bạn có thể quyết định nên sử dụng Quad hay Rect cho kết quả tìm kiếm, biết cách xử lý không có lần truy cập, hàng chéo, nhiều lần truy cập và cắt xén CropBox khi tìm kiếm cũng như hiểu những vấn đề nào nằm ngoài phạm vi định vị hình học.

Toàn bộ văn bản được thể hiện bằng các mẫu tổng hợp và mã đã vượt qua kiểm tra mẫu trong một môi trường biệt lập, nhưng điều này không thể hiện sự đảm bảo về tất cả các tệp thực hoặc hiệu ứng sản phẩm. Trước khi xử lý các tài liệu quan trọng, vui lòng giữ lại bản gốc và sau đó xem xét theo ranh giới và các mục chấp nhận bên dưới.

Để đánh dấu tìm kiếm văn bản in nghiêng, chọn Quad hoặc Rect? Một câu kết luận

Phông chữ in nghiêng không nhất thiết làm cho vùng Quad mà tìm kiếm thu được nhỏ hơn hình chữ nhật kèm theo. Khi cần giữ lại thông tin hướng bốn góc, hãy trực tiếp sử dụng kết quả của quads=True để thêm điểm nhấn. Không sử dụng bất kỳ ngưỡng chênh lệch diện tích nào để xác định xem việc đánh dấu có chính xác hay không.

hoàn cảnh của bạnCác phương pháp được đề xuấtlý do
Văn bản in nghiêng hoặc xoay, cần giữ nguyên hướng bốn gócSử dụng trực tiếp kết quả của quads=True để thêm điểm nổi bậtQuad giữ lại thông tin định hướng bốn góc
Tôi muốn sử dụng ngưỡng chênh lệch diện tích để xác định xem phần đánh dấu có chính xác hay không.đừng làm điều nàyPhông chữ in nghiêng không nhất thiết làm cho diện tích Quad nhỏ hơn và phán đoán ngưỡng không đáng tin cậy.
Các cụm từ tìm kiếm trải dài trên các dòng và công cụ không nhận ra chúng là cùng một đơn vị từ vựng.Giữ lại tất cả các mảnh Quad được trả về và vẽ các điểm nổi bật riêng lẻViệc buộc phải sáp nhập vào Rect sẽ làm mất đi ngữ nghĩa của khoảng trắng ở giữa.
Trang này có cropBoxXác minh rằng nội dung vẫn nằm trong vùng có thể xem được sau khi khôi phục CropBoxCác tọa độ được search_for trả về dựa trên không gian trang gốc chưa được xoay và không thể giả sử get_text bỏ qua vùng bị cắt theo mặc định
Nhiều lượt truy cậpGiữ số trang theo từng mục và xử lý từng mục mộtChỉ xử lý cái đầu tiên sẽ bỏ sót các vị trí còn lại

Tại sao chữ in nghiêng lại hiển thị không chính xác?

Nhiều người sẽ mặc định cho rằng hình chữ nhật kèm theo các ký tự in nghiêng lớn hơn nhiều so với Quad nên việc sử dụng Rect để highlight sẽ gây ra tình trạng"lệch khung hình". Trên thực tế, phông chữ in nghiêng không nhất thiết làm cho diện tích của Quad được tìm kiếm nhỏ hơn hình chữ nhật kèm theo, do đó, việc sử dụng chênh lệch diện tích để đánh giá xem phần đánh dấu có chính xác hay không là không đáng tin cậy.

Điều thực sự cần thiết là bảo toàn thông tin định hướng của bốn góc. Quad tình cờ ghi lại thông tin này và sử dụng nó để thêm điểm nổi bật trực tiếp sẽ đáng tin cậy hơn so với việc sử dụng một hình chữ nhật kèm theo để đoán hình dạng.

Ví dụ về bố cục khép kín

Xem danh sách nhập để biết các phụ thuộc ví dụ. Mã xây dựng đầu vào trong bộ nhớ và không yêu cầu chạy các tệp bên ngoài. Hồ sơ hoạt động được cung cấp riêng và không thể hiện sự đảm bảo rằng tất cả các tài liệu đều xác thực.

import pymupdf
with pymupdf.open() as source:
    page = source.new_page(width=300, height=300)
    page.insert_text((100, 250), "Searchable", fontsize=14, rotate=90)
    hits = page.search_for("Searchable", quads=True)
    assert len(hits) == 1
    assert isinstance(hits[0], pymupdf.Quad)
    page.add_highlight_annot(hits)
    assert page.search_for("Missing", quads=True) == []
    raw = source.tobytes()
with pymupdf.open(stream=raw, filetype="pdf") as doc:
    page = doc[0]  # Keep the owning page alive while using annotations.
    annotations = list(page.annots())
    assert len(annotations) == 1
    assert len(annotations[0].vertices) == 4

Xử lý đầu ra và ranh giới đầu vào đúng

Ví dụ tổng hợp ở trên tạo một tệp PDF trong bộ nhớ được sử dụng để xác minh hành vi của Quad. Dưới đây là một số đầu vào ranh giới phổ biến.

1. Từ tìm kiếm trải dài trên các dòng

Nếu cụm từ tìm kiếm trải rộng trên các dòng mới và công cụ không nhận ra nó là cùng một đơn vị từ vựng, search_for có thể trả về một danh sách trống hoặc chỉ khớp một phần.

  • Không ép buộc ghép nhiều Quad không liền kề thành một Rect, nếu không sẽ mất ngữ nghĩa của khoảng trắng ở giữa.
  • Giữ tất cả các mảnh Quad được trả về và vẽ các điểm nổi bật riêng biệt.

2. Từ tìm kiếm có chứa các ký tự đặc biệt thông thường

Nếu cụm từ tìm kiếm của bạn chứa các ký tự đặc biệt thông thường mà không thoát chúng thì kết quả có thể không như mong đợi. Chuỗi đầu vào phải được xử lý an toàn trước khi gọi.

3. Cắt xén CropBox

Nếu trang bị cắt xén CropBox thì tọa độ được search_for trả về vẫn dựa trên không gian trang gốc chưa được xoay. Sau khi khôi phục CropBox, bạn cần xác minh rằng nội dung vẫn nằm trong vùng hiển thị. Bạn không thể cho rằng get_text bỏ qua vùng cắt theo mặc định.

Tiêu chí chấp nhận và ranh giới đánh giá thủ công

Giải pháp này chỉ giải quyết bài toán định vị hình học. Các tình huống sau đây không thuộc phạm vi vấn đề lựa chọn Quad so với Rect:

  • Hư hại lớp văn bản của chính PDF;
  • Lỗi nhúng phông chữ;
  • Sự hiện diện của các lớp ẩn.

Trong những trường hợp như vậy, kết quả của search_for có thể không đáng tin cậy và nên được xem xét thủ công hoặc kiểm tra lại. Mã mẫu chỉ xác minh các thuộc tính hình học; các hiệu ứng đầu cuối vẫn cần được đánh giá dựa trên các loại tài liệu cụ thể.

Quyết định xử lý ngoại lệ cụ thể

Quan sátNên làm gìvà không nên bị phán xét
Cuộc tìm kiếm không cho kết quảKiểm tra lớp văn bản và từ khóaKhông tạo vùng nổi bật trống nào
Xoay văn bảnGiữ nguyên bốn góc của QuadĐoán độ chính xác bằng cách không sử dụng sự khác biệt diện tích
và đạt được nhiều điểmMỗi mục nên được giữ lại với số trangĐừng chỉ xử lý người đầu tiên

📊 So sánh cốt lõi

Mục tiêuThông tin có thể được bảo tồnCác kịch bản áp dụngGhi chú
QuadBốn gócVăn bản nghiêng và xoay cần được tô sáng chính xácSử dụng trực tiếp kết quả của quads=True
Hình chữ nhật (hình chữ nhật ngoài)Phạm vi tiếp xúc ngoàiChọn văn bản ngang đơn giảnVăn bản nghiêng hoặc xoay, có thể nằm ngoài hộp và không phù hợp để kiểm tra độ chính xác
Hình chữ nhật hợp nhấtPhạm vi tổng thểKhông khuyến nghị cho tìm kiếm chéo dòngĐiều này sẽ làm mất đi ý nghĩa của các vùng trống ở giữa

🎯 Phương pháp nào phù hợp với bạn?

Nếu bạn ......

  • Góc văn bản cần được giữ nguyên: Sử dụng trực tiếp kết quả của quads=True để thêm các điểm nổi bật.
  • Muốn đánh giá xem việc tô sáng có đúng hay không dựa trên ngưỡng chênh lệch diện tích: Đừng làm vậy; phông chữ in nghiêng không nhất thiết làm khu vực quad nhỏ hơn.
  • Nếu bạn gặp từ khóa tìm kiếm vượt qua đường ranh giới: Giữ tất cả các đoạn Quad, tô sáng chúng riêng biệt và không gộp chúng thành một Rect duy nhất.
  • Xử lý các trang có cropBox cropping: Sau khi khôi phục CropBox, xác minh rằng nội dung vẫn nằm trong khu vực có thể xem.

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 của văn bản, sau đó bàn giao mẫu đã ẩn danh đó 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á dựa trên sự lưu loát của văn bản.

OmniDoc (Mục sản phẩm) cung cấp các cổng dịch tài liệu đa định dạng, và trang web chính thức của họ giới thiệu OCR, thuật ngữ và các tính năng tham khảo song ngữ. Đối với các nhóm muốn bắt đầu trực tiếp từ file, đây là con đường đáng để đánh giá bằng các mẫu thực tế. Vui lòng sử dụng tệp ẩn danh mà bạn đã cho phép tải lên và xác minh kết quả với 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 như các ví dụ không thay thế kiểm thử hiệu suất sản phẩm.

Tham khảo

❓ Câu hỏi thường gặp (FAQ)

1. Chữ nghiêng có nhất thiết làm khu vực quad nhỏ hơn không?

Không hẳn vậy. Ký tự nghiêng không nhất thiết tạo ra diện tích tứ giác nhỏ hơn hình chữ nhật bên ngoài, vì vậy bạn không thể dựa vào sự khác biệt diện tích để xác định việc tô sáng có đúng hay không.

2. Khi nào nên giữ lại thông tin bốn góc của Quad?

Nếu bạn cần giữ thông tin hướng cho bốn góc, bạn nên sử dụng trực tiếp kết quả của quads=True để thêm tô sáng.

3. Bạn nên làm gì nếu từ khóa tìm kiếm của bạn vượt quá giới hạn và không đạt được mục tiêu?

Không tạo vùng nổi bật trống; trước tiên kiểm tra lớp văn bản và từ khóa. Nếu chỉ một phần của đoạn được trả về, tất cả các đoạn Quad trả về nên được giữ lại và tô sáng riêng biệt, thay vì ép gộp thành một Rect duy nhất.

4. Trang này bao gồm CropBox. Bạn nên chú ý điều gì khi cắt?

Tọa độ trả về bởi search_for vẫn dựa trên không gian trang gốc chưa được xoay. Sau khi khôi phục CropBox, bạn cần xác minh xem nội dung có còn trong dòng xem hay không; bạn không thể giả định get_text là bỏ qua vùng cắt.

📝 Tóm tắt

Việc tô nghiêng và xoay chữ nên dựa trên Quad, và số trang cùng thông tin góc nên được giữ lại cho từng mục. Các vấn đề như lớp văn bản bị hỏng và nhúng phông chữ bất thường vẫn cần được xem xét thủ công hoặc làm lại OCR.

Tải miễn phí phiên bản OmniDoc trên máy tính: xử lý tài liệu, bảng, bài thuyết trình và PDF tất cả ở một nơi

Cập nhật lúc 2026-11-13