Sorot kata pencarian PDF, mengapa persegi panjang salah membingkai teks miring?
Font miring tidak serta merta membuat luas Quad yang dicari lebih kecil dari persegi panjang yang melingkupinya. Saat Anda perlu menyimpan informasi arah empat sudut, langsung gunakan hasil quads=True untuk menambahkan penyorotan; jangan gunakan ambang perbedaan area apa pun untuk menentukan apakah penyorotannya benar.
Ketika kotak sorotan pencarian untuk teks miring miring, sering kali hal ini bukan karena ada masalah dengan font itu sendiri, namun karena objek geometris yang digunakan untuk menyorot salah dipilih. Artikel ini ditujukan bagi pengembang yang menggunakan PyMuPDF untuk memproses pemosisian teks PDF. Ini menjelaskan mengapa persegi panjang terlampir (Rect) tidak dapat digunakan untuk menentukan apakah penyorotan teks miring atau diputar sudah benar, dan bagaimana menanganinya dalam situasi yang berbeda.
Setelah membaca artikel ini, Anda dapat memutuskan apakah akan menggunakan Quad atau Rect untuk hasil pencarian, mengetahui cara menangani tidak ada klik, baris silang, banyak klik, dan pemotongan CropBox saat mencari, dan memahami masalah mana yang berada di luar cakupan penentuan posisi geometris.
Teks lengkap didemonstrasikan dengan sampel sintetis, dan kode melewati pemeriksaan sampel di lingkungan yang terisolasi, namun ini tidak mewakili jaminan semua file nyata atau efek produk. Sebelum memproses dokumen penting, harap simpan dokumen aslinya lalu pelajari sesuai dengan batasan dan item penerimaan di bawah ini.
Untuk pencarian highlight teks miring, pilih Quad atau Rect? Kesimpulan satu kalimat
Font miring tidak serta merta membuat area Quad yang diperoleh pencarian lebih kecil dari persegi panjang di sekelilingnya. Bila perlu menyimpan informasi arah empat sudut, langsung gunakan hasil quads=True untuk menambahkan sorotan. Jangan gunakan ambang perbedaan area apa pun untuk menentukan apakah penyorotannya benar.
| situasi Anda | Praktik yang direkomendasikan | alasan |
|---|---|---|
| Teks miring atau diputar, orientasi empat sudut perlu dipertahankan | Langsung gunakan hasil quads=True untuk menambahkan highlight | Quad menyimpan informasi orientasi empat sudut |
| Saya ingin menggunakan ambang perbedaan area untuk menentukan apakah penyorotannya benar. | jangan lakukan ini | Font miring tidak serta merta membuat area Quad menjadi lebih kecil, dan penilaian ambang batas tidak dapat diandalkan. |
| Istilah pencarian tersebar melintasi baris dan mesin tidak mengenalinya sebagai unit kosakata yang sama. | Simpan semua fragmen Quad yang dikembalikan dan gambar sorotan satu per satu | Penggabungan paksa ke dalam Rect akan menghilangkan semantik ruang putih di tengahnya. |
| Halaman tersebut memiliki cropBox crop | Verifikasikan bahwa konten masih berada dalam area yang dapat dilihat setelah memulihkan CropBox | Koordinat yang dikembalikan oleh search_for didasarkan pada ruang halaman asli yang tidak dirotasi dan tidak dapat diasumsikan get_text mengabaikan area yang dipotong secara default |
| Beberapa pukulan | Simpan nomor halaman item demi item dan proses satu per satu | Hanya memproses yang pertama yang akan kehilangan posisi yang tersisa |
Mengapa teks miring muncul secara tidak benar?
Banyak orang akan berasumsi secara default bahwa persegi panjang yang diapit karakter miring jauh lebih besar daripada Quad, jadi menggunakan Rect untuk menyorot akan menyebabkan "deviasi bingkai". Faktanya, font miring tidak serta merta membuat area Quad yang dicari lebih kecil dari persegi panjang yang dilingkupinya, sehingga tidak dapat diandalkan untuk menggunakan perbedaan area untuk menilai apakah penyorotannya benar.
Yang benar-benar diperlukan adalah menjaga informasi orientasi keempat penjuru. Quad kebetulan mencatat informasi ini, dan menggunakannya untuk menambahkan sorotan secara langsung lebih dapat diandalkan daripada menggunakan persegi panjang untuk menebak bentuknya.
Contoh komposisi mandiri
Lihat daftar impor untuk contoh dependensi. Kode ini membangun masukan dalam memori dan tidak memerlukan file eksternal untuk dijalankan. Catatan pengoperasian disediakan secara terpisah dan tidak mewakili jaminan bahwa semua dokumen adalah asli.
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
Pemrosesan keluaran dan masukan batas yang benar
Contoh sintetik di atas menghasilkan PDF dalam memori yang digunakan untuk memverifikasi perilaku Quad. Di bawah ini adalah beberapa masukan batas yang umum.
1. Pencarian kata tersebar melintasi baris
Jika istilah pencarian mencakup baris baru dan mesin tidak mengenalinya sebagai unit kosakata yang sama, search_for dapat mengembalikan daftar kosong atau hanya cocok dengan sebagian fragmen.
- Jangan secara paksa menggabungkan beberapa Quad yang tidak berdekatan menjadi satu Rect, jika tidak, semantik spasi di tengah akan hilang.
- Simpan semua fragmen Quad yang dikembalikan dan gambar sorotan secara terpisah.
2. Istilah pencarian berisi karakter khusus biasa
Jika istilah penelusuran berisi karakter khusus biasa tanpa menghilangkan karakter tersebut, hasilnya mungkin tidak seperti yang diharapkan. String masukan harus diproses dengan aman sebelum menelepon.
3. Pemangkasan CropBox
Jika halaman tersebut dipotong CropBox, koordinat yang dikembalikan oleh search_for masih didasarkan pada ruang halaman asli yang tidak dirotasi. Setelah memulihkan CropBox, Anda perlu memverifikasi bahwa konten masih berada dalam area yang terlihat. Anda tidak dapat berasumsi bahwa get_text mengabaikan area pemotongan secara default.
Kriteria penerimaan dan batasan tinjauan manual
Solusi ini hanya menyelesaikan masalah penentuan posisi geometri. Situasi berikut ini bukan soal memilih antara Quad dan Rect:
- Lapisan teks PDF itu sendiri rusak;
- Penyematan font tidak normal;
- Ada lapisan tersembunyi.
Dalam kasus ini, hasil search_for mungkin tidak dapat dipercaya sama sekali dan harus diserahkan ke tinjauan manual atau OCR ulang. Kode contoh hanya memverifikasi properti geometris, dan efek menyeluruh masih perlu dievaluasi berdasarkan jenis dokumen tertentu.
Keputusan penanganan pengecualian khusus
| mengamati | apa yang harus dilakukan | tidak boleh disimpulkan |
|---|---|---|
| Pencarian tidak ada hasil | Periksa lapisan teks dan kata kunci | Jangan membuat sorotan kosong |
| Putar teks | Pertahankan sudut Quad | Menebak akurasi tanpa perbedaan luas |
| Beberapa pukulan | Simpan nomor halaman item demi item | Jangan hanya berurusan dengan yang pertama |
📊 Perbandingan inti
| obyek | Informasi yang dapat disimpan | Skenario yang berlaku | Hal-hal yang perlu diperhatikan |
|---|---|---|---|
| Quad | Empat sudut | Miring, teks yang diputar, memerlukan penyorotan yang tepat | Gunakan langsung hasil quads=True |
| Persegi panjang (melingkari persegi panjang) | jangkauan eksternal | Pemilihan bingkai sederhana untuk teks horizontal | Teks yang dicetak miring atau diputar mungkin keluar dari bingkai dan tidak sesuai untuk menilai kebenarannya. |
| Gabungan Rek | Ruang lingkup keseluruhan | Tidak disarankan untuk pencarian lintas garis | Semantik spasi di tengah akan hilang |
🎯 Metode mana yang cocok untuk Anda?
jika kamu……
- Arah empat sudut teks perlu dipertahankan: langsung gunakan hasil
quads=Trueuntuk menambahkan sorotan. - Jika Anda ingin menggunakan ambang perbedaan area untuk menentukan apakah penyorotannya benar: Jangan lakukan ini. Font miring tidak serta merta membuat area Quad menjadi lebih kecil.
- Istilah pencarian yang ditemui garis bersilangan: Simpan semua fragmen Quad, gambar highlight secara terpisah, jangan digabung menjadi satu Rect.
- Menangani halaman dengan pemotongan CropBox: Setelah memulihkan CropBox, verifikasi bahwa konten masih dalam area yang dapat dilihat.
Gunakan daftar periksa ini untuk terjemahan dokumen
Pertama-tama periksa urutan halaman, lokasi sumber, dan integritas teks, lalu kirimkan sampel yang tidak peka ke proses penerjemahan. Setelah diterjemahkan, Anda masih perlu memeriksa apakah judul, teks, dan ilustrasi sudah sesuai. Anda tidak bisa hanya memeriksa apakah teksnya halus.
OmniDoc (portal produk) menyediakan portal terjemahan dokumen multi-format, dan situs resminya memperkenalkan fungsi OCR, glosarium, dan perbandingan bilingual. Untuk tim yang ingin bekerja langsung dari file, ini adalah jalur yang layak dievaluasi dengan sampel kehidupan nyata. Harap gunakan file yang tidak peka dan Anda mempunyai izin untuk mengunggahnya, dan gunakan item centang dalam artikel ini untuk meninjau hasilnya. Tidak ada klaim di sini bahwa OmniDoc menggunakan perpustakaan sumber terbuka atau algoritma internal yang disebutkan dalam artikel ini, dan contoh-contoh tersebut bukan pengganti pengujian kinerja produk.
Referensi
❓ Pertanyaan yang Sering Diajukan (FAQ)
1. Apakah teks yang dicetak miring akan membuat area Quad menjadi lebih kecil?
tidak pasti. Font miring tidak serta merta membuat luas Quad yang dicari lebih kecil dari persegi panjang di sekelilingnya, jadi Anda tidak dapat mengandalkan perbedaan luas untuk menentukan apakah penyorotannya benar.
2. Kapan informasi Quad corner sebaiknya disimpan?
Bila Anda perlu menyimpan informasi arah empat sudut, Anda harus langsung menggunakan hasil quads=True untuk menambahkan sorotan.
3. Istilah pencarian melewati batas dan tidak ada hasil yang ditemukan. Apa yang harus saya lakukan?
Jangan membuat highlight kosong, periksa dulu layer teks dan kata kuncinya. Jika hanya beberapa fragmen yang dikembalikan, semua fragmen Quad yang dikembalikan harus dipertahankan dan sorotan digambar secara terpisah, daripada dipaksa menjadi satu Rect.
4. Apa yang harus Anda perhatikan saat memotong halaman dengan CropBox?
Koordinat yang dikembalikan oleh search_for masih didasarkan pada ruang halaman asli yang belum dirotasi. Setelah memulihkan CropBox, Anda perlu memverifikasi bahwa konten masih berada dalam area yang terlihat. Anda tidak dapat berasumsi bahwa get_text mengabaikan area pemotongan secara default.
📝 Ringkasan
Penyorotan teks miring dan diputar harus didasarkan pada Quad, dan nomor halaman serta informasi empat sudut harus dipertahankan item demi item. Masalah seperti kerusakan pada lapisan teks dan penyematan font yang tidak normal masih memerlukan tinjauan manual atau OCR ulang.


