Evidenzia le parole di ricerca PDF, perché il rettangolo incornicia il testo in corsivo in modo errato?
I caratteri corsivi non rendono necessariamente l'area del Quad cercato più piccola del rettangolo che lo racchiude. Quando è necessario conservare le informazioni sulla direzione dei quattro angoli, utilizzare direttamente il risultato di quads=True per aggiungere l'evidenziazione; non utilizzare alcuna soglia di differenza di area per determinare se l'evidenziazione è corretta.
Quando la casella di evidenziazione della ricerca per il testo in corsivo è inclinata, spesso non è perché c'è un problema con il carattere stesso, ma perché l'oggetto geometrico utilizzato per l'evidenziazione è selezionato in modo errato. Questo articolo è destinato agli sviluppatori che utilizzano PyMuPDF per elaborare il posizionamento del testo PDF. Spiega perché il rettangolo di chiusura (Rect) non può essere utilizzato per determinare se l'evidenziazione del testo in corsivo o ruotato è corretta e come gestirla in diverse situazioni.
Dopo aver letto questo articolo, puoi decidere se utilizzare Quad o Rect per i risultati della ricerca, sapere come gestire nessun risultato, righe incrociate, risultati multipli e ritaglio CropBox durante la ricerca e capire quali problemi esulano dall'ambito del posizionamento geometrico.
Il testo completo viene dimostrato con campioni sintetici e il codice ha superato i controlli campione in un ambiente isolato, ma ciò non rappresenta una garanzia di tutti i file reali o degli effetti del prodotto. Prima di elaborare documenti importanti, conservare gli originali e quindi esaminarli in base ai limiti e agli elementi di accettazione riportati di seguito.
Per evidenziare il testo in corsivo nella ricerca, scegli Quad o Rect? Conclusione di una frase
Il carattere corsivo non rende necessariamente l'area Quad ottenuta dalla ricerca più piccola del rettangolo che la racchiude. Quando è necessario conservare le informazioni sulla direzione dei quattro angoli, utilizzare direttamente i risultati di quads=True per aggiungere evidenziazioni. Non utilizzare alcuna soglia di differenza di area per determinare se l'evidenziazione è corretta.
| la tua situazione | Pratiche consigliate | motivo |
|---|---|---|
| Testo in corsivo o ruotato, l'orientamento dei quattro angoli deve essere preservato | Utilizza direttamente i risultati di quads=True per aggiungere evidenziazioni | Quad conserva le informazioni sull'orientamento dei quattro angoli |
| Voglio utilizzare la soglia della differenza di area per determinare se l'evidenziazione è corretta. | non farlo | Il carattere corsivo non riduce necessariamente l'area Quad e il giudizio sulla soglia non è affidabile. |
| I termini di ricerca si estendono su più righe e il motore non li riconosce come la stessa unità di vocabolario. | Conserva tutti i frammenti Quad restituiti e disegna le evidenziazioni individualmente | L'unione forzata in un Rect perderà la semantica dello spazio bianco al centro. |
| La pagina ha il ritaglio CropBox | Verifica che il contenuto sia ancora all'interno dell'area visualizzabile dopo aver ripristinato CropBox | Le coordinate restituite da search_for si basano sullo spazio della pagina originale non ruotata e non si può presumere che get_text ignori l'area ritagliata per impostazione predefinita |
| Colpi multipli | Mantieni i numeri di pagina elemento per elemento ed elaborali uno per uno | Solo elaborando il primo mancheranno le posizioni rimanenti |
Perché il testo in corsivo viene visualizzato in modo errato?
Molte persone presumono per impostazione predefinita che il rettangolo che racchiude i caratteri corsivi sia molto più grande del Quad, quindi usare Rect per evidenziare causerà la "deviazione del frame". Infatti, il carattere corsivo non rende necessariamente l'area del Quad cercato più piccola del rettangolo che lo racchiude, quindi non è affidabile utilizzare la differenza di area per giudicare se l'evidenziazione è corretta.
Ciò che è veramente necessario è preservare le informazioni sull'orientamento dei quattro angoli. Quad sembra registrare queste informazioni e utilizzarlo per aggiungere direttamente le evidenziazioni è più affidabile rispetto all'utilizzo di un rettangolo che lo racchiude per indovinare la forma.
Esempio di composizione autonoma
Consulta l'elenco di importazione per esempi di dipendenze. Il codice crea l'input in memoria e non richiede l'esecuzione di file esterni. Le registrazioni delle operazioni vengono fornite separatamente e non rappresentano una garanzia che tutti i documenti siano autentici.
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
Corretta elaborazione dell'output e dell'input del confine
L'esempio sintetico sopra genera un PDF in memoria che viene utilizzato per verificare il comportamento del Quad. Di seguito sono riportati diversi input di confine comuni.
1. Le parole di ricerca si estendono su più righe
Se il termine di ricerca si estende su nuove righe e il motore non lo riconosce come la stessa unità di vocabolario, search_for potrebbe restituire un elenco vuoto o corrispondere solo a frammenti parziali.
- Non unire forzatamente più Quad non adiacenti in un Rect, altrimenti la semantica dello spazio bianco al centro andrà persa.
- Conserva tutti i frammenti Quad restituiti e disegna le evidenziazioni separatamente.
2. Il termine di ricerca contiene caratteri speciali regolari
Se un termine di ricerca contiene caratteri speciali regolari senza escape, i risultati potrebbero non essere quelli previsti. La stringa di input deve essere elaborata in modo sicuro prima della chiamata.
3. Ritaglio CropBox
Se la pagina ha il ritaglio CropBox, le coordinate restituite da search_for sono ancora basate sullo spazio della pagina originale non ruotata. Dopo aver ripristinato CropBox, è necessario verificare che il contenuto sia ancora all'interno dell'area visibile. Non si può presumere che get_text ignori l'area di ritaglio per impostazione predefinita.
Criteri di accettazione e limiti della revisione manuale
Questa soluzione risolve solo il problema del posizionamento geometrico. Le seguenti situazioni non richiedono la scelta tra Quad e Rect:
- Il livello di testo del PDF stesso è danneggiato;
- Incorporamento anomalo dei caratteri;
- Ci sono livelli nascosti.
In questi casi, i risultati di search_for potrebbero non essere affatto credibili e dovrebbero essere sottoposti a revisione manuale o ri-OCR. Il codice di esempio verifica solo le proprietà geometriche e l'effetto end-to-end deve ancora essere valutato in base a tipi di documenti specifici.
Decisioni specifiche sulla gestione delle eccezioni
| osservare | cosa fare | non dovrebbe essere dedotto |
|---|---|---|
| Non cercare risultati | Controlla il livello di testo e le parole chiave | Non creare evidenziazioni vuote |
| Ruota il testo | Mantieni gli angoli Quad | Indovinare la precisione senza differenza di area |
| Colpi multipli | Mantieni i numeri di pagina articolo per articolo | Non occuparti solo del primo |
📊 Confronto fondamentale
| oggetto | Informazioni che possono essere conservate | Scenari applicabili | Cose da notare |
|---|---|---|---|
| Quad | Quattro angoli | Il corsivo, il testo ruotato, richiedono un'evidenziazione precisa | Utilizza direttamente i risultati di quads=True |
| Rett (rettangolo circoscritto) | portata esterna | Selezione semplice della cornice per il testo orizzontale | Il testo in corsivo o ruotato potrebbe essere fuori riquadro e non è idoneo a giudicare la correttezza. |
| Rett. Unito | portata complessiva | Non consigliato per ricerche su più linee | La semantica dello spazio bianco al centro andrà persa |
🎯Quale metodo è adatto a te?
se tu……
- Le direzioni dei quattro angoli del testo devono essere preservate: utilizza direttamente i risultati di
quads=Trueper aggiungere evidenziazioni. - Se desideri utilizzare la soglia della differenza di area per determinare se l'evidenziazione è corretta: non farlo. Il carattere corsivo non riduce necessariamente l'area Quad.
- Termine di ricerca incontrato linee incrociate: conserva tutti i frammenti Quad, disegna le evidenziazioni separatamente, non unirle in un Rect.
- Gestione delle pagine con ritaglio CropBox: dopo aver ripristinato CropBox, verifica che il contenuto sia ancora all'interno dell'area visualizzabile.
Utilizza questa lista di controllo per la traduzione dei documenti
Innanzitutto controlla l'ordine delle pagine, la posizione della fonte e l'integrità del testo, quindi invia lo stesso campione desensibilizzato al processo di traduzione. Dopo la traduzione, devi ancora verificare se titolo, testo e illustrazioni corrispondono correttamente. Non puoi semplicemente verificare se il testo è fluido.
OmniDoc (portale del prodotto) fornisce un portale di traduzione di documenti multiformato e il sito Web ufficiale introduce funzioni OCR, glossario e confronto bilingue. Per i team che desiderano lavorare direttamente dai file, questo è un percorso che vale la pena valutare con campioni reali. Utilizza file non sensibilizzati che sei autorizzato a caricare e utilizza gli elementi di controllo in questo articolo per esaminare i risultati. Non si afferma qui che OmniDoc utilizzi le librerie open source o gli algoritmi interni menzionati in questo articolo e gli esempi non sostituiscono i test sulle prestazioni del prodotto.
Riferimenti
❓ Domande frequenti (FAQ)
1. Il testo in corsivo rimpicciolirà definitivamente l'area Quad?
incerto. Il carattere corsivo non rende necessariamente l'area del Quad cercato più piccola del rettangolo che lo racchiude, quindi non è possibile fare affidamento sulla differenza di area per determinare se l'evidenziazione è corretta.
2. Quando devono essere conservate le informazioni sugli angoli del Quad?
Quando è necessario conservare le informazioni sulla direzione dei quattro angoli, è necessario utilizzare direttamente i risultati di quads=True per aggiungere evidenziazioni.
3. Il termine di ricerca attraversa le righe e non viene trovato alcun risultato. Cosa dovrei fare?
Non creare evidenziazioni vuote, controlla prima il livello di testo e le parole chiave. Se vengono restituiti solo alcuni frammenti, tutti i frammenti Quad restituiti dovrebbero essere conservati e le evidenziazioni disegnate separatamente, anziché essere forzate in un singolo Rect.
4. A cosa dovresti prestare attenzione quando ritagli la pagina con CropBox?
Le coordinate restituite da search_for sono ancora basate sullo spazio della pagina originale non ruotata. Dopo aver ripristinato CropBox, è necessario verificare che il contenuto sia ancora all'interno dell'area visibile. Non si può presumere che get_text ignori l'area di ritaglio per impostazione predefinita.
📝 Riepilogo
L'evidenziazione del testo in corsivo e ruotato dovrebbe essere basata su Quad e i numeri di pagina e le informazioni sui quattro angoli dovrebbero essere conservati elemento per elemento. Problemi come danni al livello del testo e incorporamento anomalo di caratteri richiedono ancora una revisione manuale o una nuova OCR.


