Apri il menu principale

Le routine DjvuLibre permettono la gestione di ogni aspetto dei file djvu. Si tratta di una collezione di routine autonome l'una dall'altra, che vengono lanciate da comandi di sistema. Le routine quindi possono essere lanciate da una console di sistema, o da script che possono lanciare comandi di sistema.

In questa pagina, verranno illustrate alcune routine, con particolare riferimento a quelle che permettono di gestire lo strato testo dei file djvu e di estrarre dai file djvu informazioni necessarie a questo scopo (numero di pagine, grandezza in pixel delle immagini delle singole pagine).

Le routine sono disponibili per diversi sistemi operativi; questa pagina di documentazione prevede l'operatività in ambiente Windows. La sintassi di interrogazione delle routine non cambia, e la documentazione è comune; tuttavia, cambiano i dettagli dell'installazione e dell'effettivo lancio delle routine.

Chi è interessatoModifica

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

Cosa è necessario installare su WindowsModifica

Per utilizzare le routine è innanzitutto necessario installare sul proprio PC, o su una memoria esterna, il set completo di programmi che può essere scaricato qui: http://sourceforge.net/projects/djvu/files/DjVuLibre_Windows/

Le routine sono di tipo portable, quindi funzionano perfettamente anche se l'installazione è effettuata su disco esterno o su chiavetta USB. Negli esempi che seguono, per semplicità si immagina che sia la la console di sistema, che i file djvu su cui si opera rispettivamente agiscano e stiano nella stessa directory che contiene le routine djvulibre.

La documentazione è scaricata insieme agli altri file, ma può essere consultata anche qui: http://djvu.sourceforge.net/doc/index.html

Come aprire una console e come farla puntare sulla directory djvulibreModifica

Negli esempi che seguono, con [Enter] si rappresenta la pressione del testo Enter; con [Note:....] annotazioni che ovviamente NON vanno inserite nella riga di comando. Per chi è già esperto, si tratta di banalità; chi non ha pratica della "riga di comando" troverà comunque le cose difficili e oscure. A entrambi la richiesta di molta pazienza.

Per aprire una console: aprire Start (o Avvio) -> Esegui -> cmd [Enter]

Si apre una finestra con un prompt. E' necessario spostarsi nella directory contenente djvulibre.

Immaginiamo di aver installato le routine djvulibre in una chiavetta USB e che la directory abbia il seguente indirizzo:

E:\DjvuLibre

Immaginiamo che il prompt abbia questo aspetto:

C:\>

Occorre dare due comandi (inserire solo il testo che segue il prompt, e premere Enter:

C:\>E: [Enter]
E:\> cd DjvuLibre [Enter]
E:\DjvuLibre>

A questo punto provare se tutto funziona, ad esempio dando un comando djvulibre che restituisce un testo di aiuto:

E:\DjvuLibre>djvutxt [Enter]

Se compare un breve testo che contiene istruzioni sull'uso della routine, siamo a posto. Per chi non è esperto in questi testi di aiuto: in genere aiutano assai poco.... :-)

Come visualizzare o salvare i messaggi di autoModifica

Premesso che i messaggi di aiuto del sistema sono assai criptici ed estremamente laconici, per visualizzarli a schermo chiamare il nome della routine tal quale, senza parametri:

E:\DjvuLibre>djvutxt [Enter]

Per salvare il messaggio su un file testo es. chiamato doc.txt, occorre un comando un po' più complicato, che significa "ridirigi l'output su doc.txt, anche se si tratta di un messaggio di errore"

E:\DjvuLibre>djvutxt > doc.txt 2>&1[Enter]

In genere, tutti i comando restituiscono un messaggio di errore se la sintassi è scorretta o i file che vengono nominati non sono raggiungibili; restituiscono invece a schermo il testo di risposta, ma è opportuno "ridirigere l'output" su un file testo, per poterlo utilizzare con calma.

Negli esempi che seguono, l'output verrà ridiretto sempre sul file test.txt concludendo il comando con un "> test.txt". Per visualizzare l'output basta aprire il file test.txt con un qualsiasi text editor.

I test verranno fatti utilizzando File:Abramo_Lincoln.djvu, che è opportuno scaricare nella stessa directory djvulibre da cui si lavora, rinominandolo in lincoln.djvu per praticità.

DjViewModifica

La routine DjView è più che un visualizzatore di file djvu; oltre alle immagini delle pagine, consente, in ogni pagina, di esplorare i vari "strati" di cui la pagina è costituita (compreso l'eventuale "hidden text", il testo - e consente anche di visualizzare le altre informazioni (metadati generali, metadati di ogni pagina, annotazioni, dimensioni delle imagini delle singole pagine, ecc.).

Permette inoltre la conversione dei file da "bundled" (monoblocco) a "indirect" (a pagine singole, gestite da un file principale), per tutto il file o per gruppi selezionati di pagine; permette inoltre l'esportazione delle immagini in differenti formati.

DjvudumpModifica

La ruotine stampa un set completo di informazioni sulla struttura del file djvu, pagina per pagina.

djvudump lincoln.djvu >test.txt

Il comando genera un testo piuttosto lungo, di cui si rappresentano qui solo i dati iniziali (testata e dati delle prime due pagine):

  FORM:DJVM [1707414] 
    DIRM [725]        Document directory (bundled, 82 files 82 pages)
    FORM:DJVU [99509] {abramolinco3118agre_0001.djvu} [P1]
      INFO [10]         DjVu 1954x3315, v25, 500 dpi, gamma=2.2
      CIDa [36] 
      Sjbz [64843]      JB2 bilevel data
      FG44 [5189]       IW4 data #1, 100 slices, v1.2 (color), 163x277
      BG44 [3355]       IW4 data #1, 74 slices, v1.2 (color), 652x1105
      BG44 [5507]       IW4 data #2, 10 slices
      BG44 [1947]       IW4 data #3, 4 slices
      BG44 [18549]      IW4 data #4, 9 slices
    FORM:DJVU [2235] {abramolinco3118agre_0002.djvu} [P2]
      INFO [10]         DjVu 1747x2620, v25, 500 dpi, gamma=2.2
      CIDa [36] 
      Sjbz [226]        JB2 bilevel data
      FG44 [178]        IW4 data #1, 100 slices, v1.2 (color), 146x219
      BG44 [739]        IW4 data #1, 74 slices, v1.2 (color), 583x874
      BG44 [245]        IW4 data #2, 10 slices
      BG44 [31]         IW4 data #3, 4 slices
      BG44 [637]        IW4 data #4, 9 slices
      TXTz [53]         Hidden text (text, etc.)

Le cose che interessano per un'eventuale elaborazione automatica del layer testo sono:

  1. il numero di pagine;
  2. la presenza o assenza di un "hidden text" (in pagina 1 non c'è; in pagina 2 c'è).

Siccome il testo è formattato con regolarità, è possibile estrarre, con python o un altro programma, ogni informazione, scorrendolo riga per riga e cercando i dati come si sa fare (una regex o una ricerca di sottostringa).

DjvutxtModifica

Qui le cose si fanno interessanti, perchè il programma estrae lo strato testo di una pagina o del set completo di tutte le pagine.

Il comando deve avere la struttura:

djvutxt [options] <djvufile> [<outputfile>]

Le opzioni più interessanti sono:

  • -page=[pagine]: pagina da estrarre (o intervallo di pagine), espresso come numero di pagina (es. per visualizzare la pagina 2 scrivere -page=2)
  • -detail=[dettaglio]: dettaglio della struttura testo da visualizzare. I valori ammessi sono page, column, region, para, line, word, char. Per capire l'output del comando, è necessario immaginare il testo della pagina come una serie di box rettangolari annidati l'uno dentro l'altro, ognuno con le proprie coordinate: queste matrioske rappresentano i rettamngoli che contengono il testo nell'immagine di dimensioni page (le stesse che sono viualizzate da djvudump). Nei file djvu di Internet Archive, si può chiedere dettagli fino a word (le singole parole all'interno delle linee, con lo spazio usato come separatore). In pratica, il file contiene tutti i dati che sono rappresentati dall'immagine della pagina, impostando View->Display-Hidden text, ossia le coordinate dei rettangolini che contengono le singole parole, e il testo delle parole contenute; ma contiene anche i dati delle strutture gerarchicamente superiori, linee, paragrafi, regioni, colonne. Impostando -detail si stabilisce a che livello fermarsi nella rappresentazione, e si ottiene per ogni livello finale le coordinate del rettangolo che contiene il testo ed il testo.

Ma le cose richiedono un esempio pratico, e molti test da parte di chi sta leggendo.

Cerchiamo di ottenere il testo contenuto nella pagina 10 di lincoln.djvu con dettaglio line:

 djvutxt -page=10 -detail=line lincoln.djvu >test.txt

Si ottiene, all'interno del file test.txt:

(page 180 209 1599 1797 
  (column 180 1514 1599 1797 
    (region 180 1514 1599 1797 
      (para 180 1649 1599 1797 
        (line 556 1749 1218 1797 "Proprietà Letteraria. ") 
        (line 180 1649 1599 1708 
          "/ diritti di traduzione sono riservati per tatti i paesi. " ) ) 
      (para 358 1514 1426 1618 
        (line 358 1572 1426 1618 
          "Nella filigrana di ogni foglio deve esser visibile " ) 
        (line 670 1514 1119 1558 "l'impresa editoriale. ") ) ) ) 
  (column 617 209 1167 232 
    (region 617 209 1167 232 
      (para 617 209 1167 232 
        (line 617 209 1167 232 "TIP. BLONDI » PARMEGGIAIMI - MODENA ") ) ) ) )

Con lo stesso comando, impostando -detail=para, si ottiene:

(page 180 209 1599 1797 
  (column 180 1514 1599 1797 
    (region 180 1514 1599 1797 
      (para 180 1649 1599 1797 
        "Proprietà Letteraria. \n/ diritti di traduzione sono riservati per tatti i paesi. \n" ) 
      (para 358 1514 1426 1618 
        "Nella filigrana di ogni foglio deve esser visibile \nl'impresa editoriale. \n" ) ) ) 
  (column 617 209 1167 232 
    (region 617 209 1167 232 
      (para 617 209 1167 232 "TIP. BLONDI » PARMEGGIAIMI - MODENA \n") ) ) )

e impostando -detail=page:

(page 180 209 1599 1797 
  "Proprietà Letteraria. \n/ diritti di traduzione sono riservati per tatti i paesi. \n\037Nella filigrana di ogni foglio deve
esser visibile \nl'impresa editoriale. \n\037\035\013TIP. BLONDI » PARMEGGIAIMI - MODENA \n\037\035\013" )

A chi legge, il compito di osservare con cura le differenze fra i tre output, trovando le parti costanti e le parti variabili. Da notare che man mano che si chiedono output di maggiore livello, compaiono, nel testo, alcuni caratteri speciali come \n, \037, \035 che rappresentano le fine linea e la fine di altre regioni; solo il fine linea è obbligatorio.

DjvusedModifica

La routine consente di operare in profondità sullo strato testo. La sigla potrebbe essere l'acronimo di DjvuShowEdit, infatti con djvused è possibile sia estrarre, che modificare o creare lo strato testo dei file djvu. La sintassi è particolarmente complessa, anche perchè il file accetta input di vario genere:

  1. interattivo;
  2. da riga di comando;
  3. da file txt;
  4. da file dsed, che integrano comandi e contenuti.

Operare con djvused comporta, in pratica, l'apprendimento di un minuscolo linguaggio di programmazione; le azioni del programma, quasi sempre, comportano che venga data una precisa sequenza di istruzioni diverse.

La struttura dei file .dsedModifica

I file dsed sono file di testo, ascii o UTF-8. Alternano al loro interno istruzioni e dati; i dati hanno la stessa struttura di quella ottenuta con djvutxt, al maggior dettaglio disponibile (non esiste un parametro -detail per visualizzare solo uno dei livelli "superiori"; i file IA sono pubblicati con detail word, i file provenienti da MODI hanno detail line, i file djvu della biblioteca virtuale ALMA di Bologna addirittura detail char. Le dimensioni del file .dsed crescono molto rapidamente con l'aumento del dettaglio.

Usando il file test.djvu in dropbox/grab, il comando per produrre il file test.dsed è:

djvused test.djvu -e "select; output-all" >test.djvu

La cosa interessante è che un semplice comando djvused permette di utilizzare il file dsed (tal quale o dopo eventuali modifiche) per ricostruire integralmente l'intero strato testo del file djvu.

Qui sotto il risultato dell'estrazione (parte iniziale del file).

select; remove-ant; remove-txt
# ------------------------- 
select "p0001.djvu"
set-ant
(metadata (title "What Can a Single Neuron Compute?")
(author "Blaise Ag{\"u}era y Arcas, Adrienne L. Fairhall, William Bialek")
(booktitle "Advances in Neural Information Processing Systems, 2000 (NIPS'2000)")
(editor "Todd Leen, Tom Dietterich, Volker Tresp")
(publisher "MIT Press")
(year "2001")
(volume "13"))

.
set-txt
(page 0 0 3400 4400
 (line 852 4027 2546 4116
  (word 852 4027 1110 4116 "What")
  (word 1154 4027 1310 4116 "can")
  (word 1349 4027 1400 4116 "a")
  (word 1438 4027 1697 4116 "single")
  (word 1738 4027 2062 4116 "neuron")
  (word 2100 4027 2546 4116 "compute?"))

DjvutoxmlModifica

La routine estrae lo strato testo di un djvu in formato xml. Su IA, l'estrazione xml dello strato testo dei file djvu fa parte dei file standard che possono essere scaricati.

Il file è piuttosto pesante e complesso; per manipolarlo con python, viene suggerito di utilizzare il modulo ElementTree XML, che fa parte della libreria python standard e si importa (volendo attribuire un alias xml alla routine caricata) con:

import xml.etree.ElementTree as xml

Questo un tutorial semplicissimo: http://www.bigfatalien.com/?p=223