Apri il menu principale

Lo strato testo dei file djvuModifica

Ogni pagina di un file djvu dotato di strato testo contiene:

  1. la struttura geometrica delle parti del testo, sotto forma di gerarchia di box annidati (page, column, region, para[graph], line, word e char[acter])); di ogni box sono disponibili le coordinate in pixel, con origine nell'angolo in basso a sinistra della pagina;
  2. all'interno del box di maggiore dettaglio, contiene il corrispondente testo in utf-8 (con una convenzione: i caratteri quote (") sono escaped).

Tutti i dettagli dello strato testo di un file djvu (e non solo) possono essere ottenuti con le routine DjvuLibre, sia utilizzandole in modo diretto (da riga di comando), che interrogandole via script (python, o qualsiasi programma che possa richiamare comandi di sistema). Nella pagina Progetto:Trascrizioni/Routine DjvuLibre saranno annotate alcune "ricette" per estrarre i dati dai file djvu mediante le routine DjvuLibre. Nota: gli stessi dati sono ottenibili con DjvuToy, ed eventuali altre "interfacce utente di tipo GUI", ma non è possibile (suppongo) ottenerli mediante uno script, il che è una limitazione molto grave.

Chi è interessatoModifica

Mettete qui sotto il vostro nick, tanto per sapere chi segue questa pagina:

Un esempioModifica

A sinistra un esempio semplificato di struttura pagina (in rosso le column e le region sovrapposte; in verde i paragrafi; in nero, quando il software si deciderà a visualizzare la nuova versione del file con fondo bianco, si vedranno le linee di testo; non sono rappresentati i livelli word e character); il tutto compreso da un box arancio, il livello-base page. Lo schema è quello di una pagina della Bibbia su cui alcuni ardimentosi stanno lavorando: intestazione, testo in due colonne, titoli nuovi libri centrati con interruzione delle colonne, area note in basso.

Di ciascun box, nel djvu sono disponibili sia il contenuto (gerarchia di box di livello inferiore e alla fine il testo) che le coordinate dei box.

Nei primi tentativi per estrarre selettivamente dalle pagine il testo di un box specifico, ha avuto successo, nel progetto Bibbia, l'estrazione del "box inferiore a colonna larga", contenente le annotazioni.

Dati ottenibili dall'analisi del tipo, posizione, grandezza dei boxModifica

  1. suddivisione del testo in paragrafi;
  2. presenza di colonne di testo;
  3. posizione relativa dei box (centratura, margine sin);
  4. testo "giustificato" (linee di lunghezza uguale, fino a fine paragrafo) o "allineato a sinistra" (linee di differente lunghezza);
  5. font, ottenibile come "densità di testo nel box" (ovviamente pochi caratteri di un font grande riempiono un box relativamente grande; in generale il font è ricavabile dal rapporto numero di caratteri/area del box)
  6. testo in prosa (giustificato)
  7. testo in versi (allineato a sinistra, spesso con margine sin)
  8. elementi dell'intestazione e posizione del numero di pagina
  9. eventuale piè di pagina
  10. tabelle (NON implementate da djvu, ma comunque costituite da "box di piccole dimensioni allineati sia verticalmente che orizzontalmente")

Esempio di codiceModifica

Da pag. 99 delle Rime di Chiabrera su IA, vol. I, un esempio di codice pagina con i livelli fino a line (inizio pagina):

(page 247 652 2303 4454 
  (column 539 4425 568 4454 
    (region 539 4425 568 4454 
      (para 539 4425 568 4454 (line 539 4425 568 4454 "/ ")) ) ) 
  (column 349 3659 2284 4264 
    (region 349 3659 2284 4264 
      (para 1101 4161 2284 4264 
        (line 1101 4161 2284 4264 "PAKTB I. 45 ") ) 
      (para 355 4076 1368 4170 
        (line 355 4076 1368 4170 "Ben tuoi desiri ascolto , ") ) 
      (para 351 3961 2181 4068 
        (line 351 3961 2181 4068 
          "Per modo tal « eh* io temprerò mìo lame » " ) ) 
      (para 349 3866 1908 3966 
        (line 349 3866 1908 3966 
          "Sicché dolci per lei fiano i miei raì. " ) ) 
      (para 353 3768 1264 3866 
        (line 353 3768 1264 3866 "Così diss' egU ; e sai ^ ") ) 
      (para 355 3659 1978 3766 
        (line 355 3659 1978 3766 
          "Che degli Dei mentir non è costume. " ) ) ) ) 

Analisi dello strato testo: il punto al 22.11.11Modifica

Ad oggi, è stata avviata l'elaborazione dei file .dsed prodotti da djvused.exe, opzione "output-all". Lo script python in lavoro (djvu.py) crea un oggetto DjvuDsed, che viene inizializzato con il nome di un file djvu.

Nel corso dell'inizializzazione:

  1. viene estratto e caricato il testo .dsed relativo all'intero file djvu;
  2. viene estratto e caricato anche il file di informazioni prodotto da djvudump.exe;
  3. il file .dsed viene suddiviso in una lista di pagine, e ogni pagina viene ulteriormente sottoposta a parsing:
    1. il codice relativo alle annotazioni viene separato dal codice relativo allo strato testo vero e proprio;
    2. lo strato testo viene convertito in uno "schema" (dati sulla gerarchia delle parti del testo e coordinate di ciascuna parte) e in una "lista di testi" (lista degli elementi testuali presenti nello strato di maggior dettaglio).
    3. La connessione fra schema e lista degli elementi testuali viene garantita dalla presenza di "segnaposto", nel file schema, ognino dei quali è collegato a uno specifico elemento della lista dei testi.

E' in corso l'aggiunta di metodi all'oggetto DjvuDsed; il problema in corso (risolubile con i dati da dumpdjvu) è l'allineamento delle pagine presenti nel file .dsed, e identificate dal nome pagina, con il numero di pagina nel file djvu.

Analisi dello strato testo: il punto al 24.11.11Modifica

Tenuto conto del fatto che sia MODI (l'OCR di Microsoft Office) che FineReader 11 creano uno strato testo con dettaglio a livello di linea di testo, e non a livello di singola parola, all'oggetto DjvuDsed è stato aggiunto un metodo che normalizza lo strato testo a livello di linea di testo.

E' stato anche aggiunto all'oggetto DjvuDsed un metodo che estrae la lista di linee di testo di una pagina qualsiasi, ognuna con le sue coordinate x1,y1,x2,y2 sull'immagine. Questo consentirà di determinare varie caratteristiche della linea, in relazione alle linee adiacenti.