Un PDF non contiene righe di testo. Contiene glifi alle coordinate e le linee che puoi vedere sono una cosa che il tuo occhio assembla. Qualsiasi estrattore deve assemblarli anche loro, da tre numeri per corsa e un paio di soglie, e quasi ogni stranezza nel testo estratto risale a una di quelle soglie che effettuano una chiamata ragionevole che è capitata a sbagliare. Quello che ho fissato mentre scrivevo questo trasformava un cognome spezzato attraverso una riga, "osei-" poi "mensah, in "osei-mensah": il trattino conservato, come previsto, con uno spazio che non vi apparteneva mai.
tl; dr: L'estrazione è rimontaggio della linea e le impostazioni che contano sono invisibili. L'uno di mezzo di un'altezza del carattere è una riga; uno spazio verticale più di 1,45 volte il divario abituale della pagina inizia un paragrafo; uno spazio orizzontale sotto un quarto dell'altezza del carattere non è uno spazio di parole. scegliere rifluire incollare in un editore e preservare per tabelle e codice. Un PDF con una media inferiore a 12 caratteri una pagina è una scansione e ha invece bisogno di OCR, che lo strumento dice invece di consegnarti un file vuoto. PDF in testo viene eseguito nel browser.
Perché un PDF ha bisogno di "estraersi"?
Perché il testo in esso è stato scritto come istruzioni di disegno, e rileggerli non è il contrario di scriverli.
Un flusso di contenuto dice "imposta questo font a questa dimensione, sposta qui, mostra questi glifi". la specifica Descrive un modello di pittura e gli operatori di testo siedono accanto a quelli per disegnare linee e riempire le forme. Non esiste un oggetto che significa riga, paragrafo o colonna. che cosa pdf.js Hands Back è un elenco piatto di corse posizionate, ciascuna con una stringa, una X, una Y, una larghezza e un'altezza del carattere, nell'ordine in cui è stata dipinta la pagina. Su una pagina di prova quell'ordine non sta leggendo l'ordine e una singola esecuzione può essere un carattere.
Tutto il resto è ricostruzione. Tre soglie fanno quasi tutto e vale la pena conoscerle perché spiegano i fallimenti.
| Soglia | valore | Cosa decide |
|---|---|---|
| tolleranza alla linea | Altezza del carattere 0,5 x | se due esecuzioni si trovano sulla stessa linea |
| rapporto di paragrafo | 1.45 x il divario mediano della pagina | se un divario verticale inizia un nuovo paragrafo |
| rapporto tra gli spazi | Altezza del carattere 0,25 x | Se un gap orizzontale è uno spazio di parole |
Ognuno è una frazione della dimensione del testo piuttosto che un numero fisso di punti, quindi una nota a piè di pagina e un'intestazione sulla stessa pagina ottengono tolleranze diverse e un documento impostato in 9 punti si comporta come un set in 14.
Perché è necessaria la soglia dello spazio delle parole?
Perché senza di essa ogni parola si sfalda.
Un parser PDF divide spesso una singola parola su più esecuzioni senza spazio tra di loro, per il kerning o per una modifica del carattere a metà parola. L'unione corre su uno spazio si gira incondizionatamente filename dentro f i l e n a m e. Unirsi con niente esegue insieme parole separate.
Quindi la regola è un gap più ampio di un quarto dell'altezza del carattere conta come uno spazio, che è all'incirca la larghezza di uno spazio di parole reale nella maggior parte dei caratteri tipografici. Sotto di essa, le esecuzioni sono parti di una parola.
Questa è la soglia che non noterai mai di funzionare e noterai immediatamente il fallimento, di solito su un'intestazione impostata con ampia spaziatura tra lettere, dove ogni lettera è abbastanza distante da sembrare una parola.
Qual è la differenza tra riflusso e preservare?
Reflow ti dà prosa. Conserva ti dà la pagina.
Ecco un paragrafo disposto su tre righe, seguito da un altro, eseguito attraverso entrambe le modalità:
--- preserve ---
The committee reviewed the figures and agreed that the
revised protocol should be circulated before the end of
the month.
A second paragraph begins here after a larger gap.
--- reflow ---
The committee reviewed the figures and agreed that the revised protocol should be circulated before the end of the month.
A second paragraph begins here after a larger gap.
Reflow ha unito le tre righe in una frase e inserisci una riga vuota tra i paragrafi. Preserve ha mantenuto ogni interruzione di riga con cui è stata tracciata la pagina, inclusa quella nel mezzo di una frase.
| Usa riflusso | Usa Conserva |
|---|---|
| Incollare in un documento o in un editore | una tabella, dove le colonne sono il contenuto |
| Citando un passaggio | un elenco di codici, dove le interruzioni di riga sono sintassi |
| Inviare testo a uno script o un modello | un blocco di indirizzi o un modulo |
| qualsiasi cosa tu riformi comunque | qualsiasi cosa in cui il layout abbia un significato |
Reflow è l'impostazione predefinita e quella giusta per la maggior parte del tempo. L'errore che le persone fanno è usarlo su un tavolo, dove unire le righe in prosa distrugge l'unica struttura che il tavolo aveva.
Come fa a decidere dove finisce un paragrafo?
confrontando ogni gap verticale con il divario tipico della pagina.
Ogni spazio tra le linee consecutive viene misurato, viene presa la mediana e qualsiasi spazio di distanza superiore a 1,45 volte quella mediana inizia un nuovo paragrafo. Quindi una pagina a spaziatura singola non torna indietro come un paragrafo per riga e una a doppia spaziatura non torna come un blocco singolo.
L'utilizzo della mediana anziché di un numero fisso è ciò che fa funzionare attraverso documenti con diverse leading. È anche dove fallisce: una pagina con pochissime linee non ha una mediana affidabile. Un frontespizio, una breve nota o una copertina spesso tornano come un paragrafo run-on, che è la stessa debolezza La parola conversione ha, per lo stesso motivo.
La correzione è manuale e veloce. Le interruzioni di paragrafo sono ovvie per un lettore in un modo in cui non sono a una soglia.
Che fine ha fatto le parole spezzate attraverso le linee?
Sono riuniti e la regola per la quale i trattini abbandonati è un'ipotesi giusta il più delle volte.
Quando una riga termina con un trattino, la domanda è se il tipografo lo metti lì per rompere una parola o se appartenga alla parola. La regola qui utilizzata è caso: se la riga successiva inizia minuscolo, il trattino era il tipo e va; se inizia con un maiuscolo o una cifra, il trattino fa parte del testo e rimane.
| trasversalmente | Risultato | vero? |
|---|---|---|
self- + contained |
selfcontained |
certo |
re- + encode |
reencode |
certo |
client- + Side |
client-Side |
certo |
Osei- + Mensah |
Osei-Mensah |
certo |
COVID- + 19 |
COVID-19 |
certo |
2026- + 03 |
2026-03 |
certo |
well- + known |
wellknown |
no |
L'ultima riga non è risolvibile da nessuna regola. "noto" rotto al proprio trattino e "noto" rotto dalla giustificazione producono la stessa coppia di linee e distinguerli ha bisogno di un dizionario piuttosto che di una soglia. Lo stesso vale per "re-" e "codifica" sopra, che sembra essere giusto solo perché "reencode" non è una parola che nessuno scrive.
Le righe al centro sono quelle che sono cambiate durante la scrittura di questa guida. il caso non di rottura utilizzato per aggiungere uno spazio insieme al trattino mantenuto, producendo Osei- Mensah e 2026- 03. Il trattino appartiene alla parola in entrambi i casi, quindi uno spazio dopo di essa non è mai corretto e il test che ha affermato il vecchio output è stato corretto insieme al comportamento.
Come fa a sapere che un PDF è una scansione?
Contando i caratteri per pagina, con una soglia sufficientemente bassa da far scattare solo una scansione originale.
Un documento scansionato è un PDF pieno di immagini. Non esiste un livello di testo, quindi l'estrazione non restituisce nulla e la risposta utile è dirlo piuttosto che consegnare un file vuoto.
0 chars over 3 pages treated as a scan
30 chars over 3 pages treated as a scan
36 chars over 3 pages has a text layer
11 chars over 1 page treated as a scan
12 chars over 1 page has a text layer
La riga è di dodici caratteri per pagina. Questo non è zero a proposito: una pagina scansionata spesso trasporta un piccolo testo accidentale dallo scanner, un numero di pagina stampato dal software o una filigrana. Una soglia a zero chiamerebbe quei documenti estraibili e restituirebbe tre numeri di pagina.
Se il tuo PDF è una scansione, il passaggio successivo è OCR e il resoconto misurato di ciò che rompe l'OCR Ha la versione misurata di quello: inclinare oltre i tre gradi ti costa molto più della bassa risoluzione.
E le colonne?
Si intercalano e questo è il limite che vale la pena conoscere prima di fidarti di qualsiasi estrazione.
Le linee sono raggruppate per prima per linea di base, quindi due colonne di testo che si trovano nelle stesse posizioni verticali vengono lette attraverso anziché in basso. In un test di una pagina di rapporto a due colonne il risultato era ogni riga della colonna di sinistra seguita immediatamente dalla riga accanto ad essa:
Revenue rose in the third Headcount grew by four, quarter on the back of
two all in support. The hiring large renewals signed in plan for the fourth
Ogni parola è presente. L'ordine è inutile e l'output viene letto come una sciocchezza fluente piuttosto che come un errore.
I giornali e i giornali accademici spesso sopravvivono a questo, perché la grondaia tra le colonne è abbastanza ampia e regolare da trovare un passaggio di segmentazione di una pagina. Un rapporto con una barra laterale, una citazione di tiro o una tabella a due colonne spesso non lo fa.
L'approccio affidabile su un documento a colonne consiste nel controllare il primo paragrafo di ogni pagina. Se le frasi sono giunte, estrai una colonna alla volta ritagliando o accetta di ottenere una borsa di parole anziché in prosa.
Puoi ottenere un tavolo da un PDF?
I valori, sì. La tabella, no, e il motivo è che il PDF quasi certamente non contiene nemmeno una tabella.
Una tabella in un PDF viene solitamente disegnata su coordinate con alcune linee disegnate attorno ad esso. Le linee sono operazioni grafiche senza nulla nel file che le collegano al testo che racchiudono e le celle non sono celle, ma sono esecuzioni che si allineano. Quindi un estrattore vede righe di testo e le legge attraverso:
Region Q2 Q3 EMEA 412 455 AMER 388 401 APAC 120 166
Ogni figura è sopravvissuta. Non si può dire da quella linea a quale quarto 412 appartiene senza contare le posizioni e conoscere la forma dell'originale.
La modalità di conservazione aiuta un po', perché mantiene la struttura della riga come interruzioni di riga, che almeno ti dice dove è terminata ogni riga. Non ti dà ancora limiti di colonna.
Due cose funzionano. un' Contrassegnato pdf, esportato con cura da Word o InDesign con struttura di accessibilità, porta il markup della tabella reale e si converte correttamente; queste sono una minoranza e di solito si può dire perché il documento è stato realizzato da qualcuno che si è preoccupato. E per una tabella senza tag che conta, copiarlo a mano in un foglio di calcolo è più veloce che combattere qualsiasi strumento, che è una risposta insoddisfacente che è sopravvissuta a ogni tentativo di migliorarlo.
Cosa fanno i marcatori di pagina?
Mantengono i numeri di pagina, che contano più di quanto sembri per qualsiasi cosa tu citi o a cui indirizzerai.
Con i marcatori accesi, ogni pagina viene etichettata e le pagine vuote vengono ancora conteggiate:
--- Page 1 ---
First page text.
--- Page 2 ---
--- Page 3 ---
Third page text.
La pagina 2 non aveva testo estraibile e appare ancora. Questo è deliberato: un foglio scansionato tra due pagine di testo scomparirebbe altrimenti e ogni numero di pagina successivo sarebbe sbagliato di uno.
Con i marcatori spenti, la pagina vuota non lascia traccia e le due pagine di testo vengono semplicemente unite. Questa è la scelta giusta quando incolli il testo da qualche parte e l'impaginazione è un artefatto del PDF piuttosto che parte del documento.
Il testo estratto è uguale all'originale?
i personaggi sono. Tutto il resto è sparito e vale la pena leggere l'elenco prima di fare affidamento sull'output.
Grassetto, corsivo, font, dimensioni, colore, tabelle come tabelle, immagini, intestazioni e piè di pagina distinte dal corpo del testo, le note a piè di pagina distinte dalla frase che annotano, i collegamenti come link e l'ordine di lettura di qualsiasi layout complesso. Quello che ottieni sono caratteri e interruzioni di paragrafo.
Per la maggior parte degli usi è esattamente giusto. Cercare, citare, contare, alimentare uno script, incollare in un editore: tutti vogliono le parole e nient'altro.
Where It Bites è un documento il cui significato vive in parte nella sua formattazione. Un contratto in cui un termine definito è in grassetto, una specifica in cui un campione di codice si distingue per il suo carattere, un rapporto in cui una nota a piè di pagina cambia ciò che una frase afferma. Il testo estratto appiattisce tutto e nulla nell'output lo dice.
Dovresti estrarre in testo o convertire in Word?
Testo Se una macchina lo legge, Word se una persona lo modificherà.
Entrambi eseguono lo stesso rimontaggio, quindi la qualità delle parole è identica. La differenza è solo ciò che viene scritto alla fine: a .txt file o gli stessi paragrafi all'interno di uno zip di XML.
| Vuoi | maneggiare |
|---|---|
| grep, cerca o alimenta uno script | PDF in testo |
| Conta le parole o analizza il contenuto | PDF in testo |
| Modifica la prosa e inviala | PDF a Word |
| Mantieni esattamente il layout | nessuno dei due; ottieni il file originale |
L'ultima riga è quella che le persone arrivano a desiderare e nessuna estrazione te lo dà. La parola guida alla conversione Esamina il perché in dettaglio, con una tabella che ritorna come una singola riga di valori.
Quanto può gestire un PDF?
grande e il limite è la scheda anziché il formato.
L'intero file viene letto nella memoria della pagina e analizzato lì, e il testo estratto viene mantenuto accanto ad esso. Poche centinaia di pagine di testo ordinario sono insignificanti; una scansione di mille pagine ad alta risoluzione è una proposta diversa perché le immagini arrivano per il viaggio anche se nessuna di esse fornisce testo.
Se un documento è abbastanza grande da preoccuparsi, il segnale è l'analisi piuttosto che l'estrazione. Estrarre il testo da una pagina già analizzata è economico; portare il file nel parser è ciò che richiede tempo e memoria.
Perché questo viene eseguito nel browser?
Perché un'analisi non ha bisogno di server e i PDF che le persone estrai sono raramente pubblici.
Il file viene letto dal tuo disco nella scheda, analizzato lì con pdf.js compilato per il web, riassemblato in testo e restituito. Nessuna richiesta porta il documento, non viene memorizzato nulla e non c'è copia da conservare in termini di termini che non hai letto.
I documenti in questione sono contratti, dichiarazioni, lettere mediche, atti giudiziari, documenti in embargo, relazioni interne. L'alternativa convenzionale carica l'intero file su un servizio in cambio di un'operazione che è un'analisi e una certa aritmetica sulle coordinate.
Il costo è la memoria della scheda su file molto grandi e nessun OCR per le scansioni. Entrambi sono visibili prima di iniziare piuttosto che scoperti in seguito.



