Progetto:Trascrizioni/Internet Archive

Struttura degli item (libri)

modifica

L’elemento fondamentale degli item di Internet Archive è l’identificatore dell’opera da cui si accede sia alla pagina principale dell'opera, che ai metadati, e da qui a tutti i file correlati all'opera. Negli esempi verrà utilizzato l'identificatore IA di File:Lezioni di analisi matematica.pdf, che è lezionidianalisi00fubirich

  • Link alla pagina di descrizione dell'item: http://archive.org/details/lezionidianalisi00fubirich
  • Template (it.wikisource, Commons) per ottenere il link alla pagina di descrizione: {{IA|lezionidianalisi00fubirich}}
  • Link all'output JSON di tutti i metadati dell'item: http://archive.org/metadata/lezionidianalisi00fubirich
  • Chiamata AJAX cross-site per scaricare i metadati in una variabile locale:
risultato="" $.ajax({ url: 'https://archive.org/metadata/lezionidianalisi00fubirich', dataType: 'jsonp' }).done(function (data) {risultato=data;} );

Dati sui metadati :-)

modifica
  • elenco delle keys dei metadati:
    • created
    • d1
    • d2
    • dir
    • files : elenco dei files scaricabili
    • files_count
    • item_size
    • metadata: elenco dei metadati dell'opera, contiene un oggetto result con i seguenti campi (molti opzionali perchè definiti da chi carica l'opera):
      • identifier
      • uploader
      • addeddate
      • title
      • creator
      • subject
      • date
      • publisher
      • language
      • copyright-evidence-operator
      • possible-copyright-status
      • copyright-region
      • copyright-evidence
      • copyright-evidence-date
      • call_number
      • sponsor
      • contributor
      • scanningcenter
      • mediatype
      • operator
      • scanner
      • scandate
      • imagecount
      • filesxml
      • publicdate
      • curation
      • sponsordate
      • ppi
      • identifier-access
      • identifier-ark
      • foldoutcount
      • scanfactors
      • collection
      • repub_state
      • copyright-comment
      • isbn
      • volume
      • description
      • licenseurl
      • lcamid
      • rcamid
      • camera
    • server
    • uniq
    • updated
    • workable_servers
Esempio di ricerca del metadato "creator" del libro esempio

Metadato files

modifica

Il metadato files contiene la lista completa dei files che rappresentano l'item; la stessa lista viene raggiunta dal link HTTPS nel menu sinistro della pagina principale, da cui i singoli files possono essere scaricati. Alcuni di questi files sono particolarmente interessanti; uno, il più usato da noi, è il file djvu.

A parte alcuni files xml minori, in cui sono contenuti dati di processo, la maggior parte dei files costituiscono il prodotto del processo di derivazione dei files originali caricati su IA; inoltre, uno dei files è quello originario caricato dall'utente (in genere, un file pdf o un file zip contenente la serie numerata delle immagini delle pagine). Il processo di derivazione, che avviene in più tappe, comprende:

  1. la trasformazione dei file originali (tipo pdf) in una serie di immagini delle singole pagine, attualmente in formato jp2, a suo tempo in tiff;
  2. l'elaborazione delle immagini con FineReader 9 engine;
  3. l'output dell'OCR come file _abbyy.xml;
  4. da questo, la costruzione del file djvu con strato OCR (quello che scarichiamo e carichiamo su Commons) e dei file pdf con strato testo accessibile.

Il file _abbyy.xml è una miniera di dati; il contenuto delle pagine è suddiviso in aree di vari tipi, tutte mappate (immagini, tabelle, testo...) e il testo è dettagliato a livello di carattere; carattere per carattere vengono registrate numerose proprietà, oltre alle sue coordinate nella pagina, fra cui un paio relative al grado di certezza del riconoscimento. Il file _abbyy.xml è enorme (ogni carattere del testo occupa centinaia di bytes) ma il suo parsing è fattibile, meglio se con programmi più semplici di un formale parser xml, che richiede parecchia memoria e parecchia velocità di calcolo.

Lo strato testo del file djvu è strettamente correlato ai dati contenuti nel file _abbyy.xml, e rappresenta una sua versione estremamente semplificata (si ferma al dettaglio "word" e registra solo le coordinate della parola, scartando tutti i dati qualitativi e di formattazione).

Nell'item esempio, il file _abbyy.xml è quello con indice [4] nella lista, ed è rappresentato da questo oggetto:

4: Objectcrc32: "279397bb" format: "Abbyy GZ" md5: "1e31c3dad99c69fa0121c8b74201ed2e" mtime: "1217279665" name: "lezionidianalisi00fubirich_abbyy.gz" original: "lezionidianalisi00fubirich_jp2.zip" sha1: "00db1794444b11c99b4239849e9d0e2117ebd854" size: "14026236" source: "derivative"

dal che, superato il primo momento di panico, appuriamo che è un xml zippato di oltre 14 mByte, che è un file derivato, e che è stato ottenuto dall'elaborazione di un zip di immagini jp2 passato a Abbyy GZ che ne ha eseguito l'OCR.

internetarchive

modifica

Libreria python per interagire con Internet Archive; richiede la registrazione sul sito; agli utenti registrati viene fornita una coppia access key/secret key per il login dall’applicazione.

Download

modifica

L'installazione è facilitata dalla precedente installazione di easy_install e pip (che poi rendono semplice e automatica anche l’installazione di altri pacchetti pypi)

Interfaccia con le API di Internet Archive, permette creare un "oggetto item" (analogo all’oggetto Page di pywikibot) i cui metodi permettono di leggere e scrivere ogni dettaglio dell’item stesso come se gli edit fossero fatti dall’utente registrato.

L’oggetto-item viene inizializzato in base all’ID dell’item (lo stesso che viene inserito, ad esempio, nel template {{IA}} di commons e di wikisource).

Particolarmente interessante il modulo internetarchive, per gli usi via script; esiste anche uno script ia per l’uso da console.

Dovrebbe essere possibile caricare contemporaneamente pywikibot e internetarchive, avendo così a dosposizione un bot che può agire contemporaneamente nei due ambienti.

Screenshot

modifica
 

E’ possibile. In questo screenshot è stato lanciato python in cui sono attivi sia il modulo pywikipedia, che il modulo internetarchive. L’oggetto "immagine" è un oggetto Page di pywikibot, l’oggetto "item" è un oggetto Item di internetarchive. I dati dei due oggetti possono essere letti con procedimenti analoghi e nel momento dello screenshot convivono nello stesso ambiente; i dati dell’uno possono essere usati per editare i dati dell’altro.

Rappresentazione xml dello strato testo

modifica

Ogni item IA è associato a vari file che possono essere scaricati manualmente o via modulo python internetarchive. Fra questi file, due sono dedicati alla rappresentazione xml dell'output del programma OCR ABBYY:

  1. il file ***_djvu.xml, che rappresenta la struttura dello strato testo del file djvu, in un formato relativamente semplice;
  2. il file ***_abbyy.gz, compressione gzip di un file ***_abbyy.xml, che rappresenta la struttura testo con ogni dettaglio ottenuto dal software OCR, carattere per carattere.

In entrambi i casi, il testo è rappresentato come una struttura di box annidati, di cui sono fornite le coordinate e il contenuto testuale, con importanti differenze:

  1. in ***_djvu.xml, il dettaglio si ferma a livello di parola; i livelli sono page, column, region, paragraph, line e word; non esistono altri dati che le coordinate e il contenuto testuale; l'origine delle coordinate è l'angolo top, left;
  2. in ***_abbyy.xml, il dettaglio procede fino a livello di carattere, e per ogni livello (carattere compreso) sono disponibili informazioni aggiuntive sulla formattazione riconoscibile e sulla certezza nell'interpretazione; l'origine delle coordinate è l'angolo top, left. Vedi xml schema qui: https://abbyy.technology/en:features:ocr:xml


Entrambi i file possono essere letti e interpretati da parser html/xhtml/xml. Nel caso del modulo python BeautifulSoup la traformazione del file testo xml in oggetto beautifulsoup prevede, per un ipotetico file x.xml:

from bs4 import BeautifulSoup
import lxml
soup=BeautifulSoup("x.xml", "xml")

e l'oggetto soup può essere navigato e manipolato in modo vagamente analogo a quello che si può fare con jQuery.

Note su ***_abbyy.xml

modifica

Il testo è racchiuso in una struttura ad albero di questo tipo, sottostante a un livello page:

block -> "rettangolo" corrispondente a una div a posizionamento assoluto nella pagina
text -> contenitore del testo
par -> paragrafo; fra gli attributi il posizionamento left, justify, right rispetto al block ed inoltre la spaziatura verticale (lineSpacing);
line ->linea; gli attributi sono le coordinate del rettangolo che la contiene;
formatting -> attributi di formattazione della linea di testo (lingua, font-size, font-family, bolt, italic....);
charParams -> numerosi attributi fra cui le coordinate e molti altri di formattazione e di certezza del riconoscimento relativi al singolo carattere

Oltre al block tipo text esiste, per i testi, un block tipo table.

Esempio di estrazione testo da file abbyy.xml

modifica

Una funzione di estrazione testo con BeautifulSoup lanciata sulla pagina 3 di Indice:Cenni storico-bibliografici della R. Biblioteca nazionale di Firenze.djvu (dal file IA cennistoricobibl00pass_abbyy.gz in https://archive.org/download/cennistoricobibl00pass) produce il seguente output:

{{Centrato|CENNI ST0RMIBL10CRAFIC1}}

{{Centrato|DELLA}}

R. BIBLIOTECA NAZIONALE

{{Centrato|DI FIRENZE}}

{{Centrato|IN FIRENZE}}

{{Centrato|COI TIPI DI M. CBLLINI E C.
alla Galileiana}}

{{Centrato|1872}}

il che è un "vagito" (giusto un "it can be done", fra l'altro probabilmente errato, vedi sesta riga) di quello che si può fare interpretando la formattazione contenuta nel file xml e trasformandola al volo in codice wiki.

Questo è un elenco incompleto dei dati di formattazione testo contenuto in ***_abbyy.xml:

  • struttura del testo in blocchi e posizionamento dei blocchi
  • struttura in paragrafi, posizionamento (giustificato, centrato, a destra), indentatura;
  • struttura in linee, font-size, font-family, lingua, corsivo, grassetto e altro;
  • struttura in singoli caratteri, ciascuno con vari dati dati di formattazione specifica (eventualmente diversa da quella del livello linea) e di sicurezza del riconoscimento


Test in corso

modifica

Sono in corso lavori per i primi script python di analisi di file _abbyy.gz; dopo alcuni test su un libro "leggero" i test proseguono sul file https://archive.org/download/bub_gb_lvzoCyRdzsoC/bub_gb_lvzoCyRdzsoC_abbyy.gz , relativo a Indice:D'Ayala - Dizionario militare francese italiano.djvu; decompresso è un file di circa 300Mby. Le enormi dimensioni richiedono particolari accorgimenti per la sua gestione.


Novità Internet Archive 2017

modifica

Interruzione della derivazione dei djvu

modifica

IA non produce più i file djvu, perchè formato progressivamente meno utilizzato e perchè nella loro generazione avvenivano errori.

Vi sono diverse strategie per produrli comunque; vi sono motivi per mantenere comunque il caricamento preliminare dei file sorgente su IA, dopodichè il djvu può essere prodotto dai file di IA oppure direttamente dai file sorgente con varie strategie (una delle migliori è l'uso di ABBYY FineReader con output djvu).

Per produrre i file djvu direttamente dai file IA occorre:

  • scaricare da IA il file pdf e il file _djvu.xml;
  • ricavare dal pdf un djvu mediante pdf2djvu (applicazione libera disponibile per Windows e per Linux, putroppo non per Mac);
  • montare lo strato testo nel file djvu lo strato testo estratto da _djvu.xml mediante l'applicazione python

xml2dsed.py|xml2dsed.py (in corso di sviluppo).

Disponendo del modulo python internetarchive.py i tre passaggi possono essere integralmente automatizzati (sviluppo in corso).

Trattamento di scansioni problematiche prima del caricamento su IA

modifica

Sono in corso test sul caricamento su IA di scansioni non ideali ("rumore" di fondo, scansioni a due facciate, pagine inclinate).

I passaggi che si stanno sperimentando sono:

  • trattamento delle immagini con ScanTailor, si ottiene una serie di tiff BN o colori/scala di grigi. ScanTaylor permette tutti gli aggiustamenti e inoltre permette di scegliere le due modalità BN o colori/scala di grigi pagina per pagina.
  • eliminazione della eventuale prima pagina "verso"
  • impaccamento delle immagini tiff risultanti in un pdf; è bene che il pdf abbia lo stesso nome dell'identificatore IA dell'item (verificare che l'identificatore sia "libero" prima di caricare il pdf).

Dopo caricamento su IA e conclusione della derivazione, può essere ottenuto un djvu con strato testo come descritto nella sezione precedente e il djvu può essere caricato come file aggiuntivo all'item IA, dandogli lo stesso nome del pdf e cancellando la derivazione automatica che parte automaticamento dopo caricato un file aggiuntivo. Se la manovra riesce IA Upload trova il djvu e propone il suo caricamento diretto su Commons (procedura che impiega pochi secondi/pochissimi minuti per essere completata).