Progetto:Trascrizioni/Precarica dell'OCR

Da Wikisource.

Più si automatizza la correzione dell'OCR, più si risparmia tempo di edit. Il semplice caricamento dell'OCR sulle pagine vuote è poco sensato, occorre che il risultato sia almeno decente (un testo leggibile e di formattazione gradevole) e che tutta la formattazione che è indovinabile,anche con fatica, da una procedura automatica sia applicata.

Per ottenere questo risultato occorre:

  1. un'attenta selezione delle opere;
  2. un processo almeno in parte guidato dall'utente nelle sue fasi critiche.

Strategia 1: uploader.py[modifica]

software
python, djvuLibre, pywikipedia
opere adatte
romanzi, novelle, altri testi in prosa con formato semplice in formato djvu con OCR
operazioni preliminari
creazione di una buona pagina Indice
download in locale del file djvu correlato alla pagina Indice
creazione manuale di almeno due pagine consecutive contenenti {{RigaIntestazione}}
salvataggio di un oggetto memoRegex nella pagina Discussioni indice
riga di comando per il lancio di uploader.py
python uploader.py file.djvu paginaIniziale [paginaFinale]
esempio: python uploader.py "Sino_al_confine.djvu" 13 è stato usato per caricare l'OCR di tutte le pagine di Indice:Sino al confine.djvu a partire dalla pagina 13.
operazioni pagina per pagina dello script
estrazione dell'OCR, lettura dell'ultima e della penultima pagina
ripulitura degli scannos più frequenti
sostituzioni memoRegex
costruzione di un RigaIntestazione (in base alla RIgaIntestazione della penultima pagina); identificazione per similitudine della riga OCR che contiene l'intestazione; eliminazione in caso di somiglianza decente
conversione apostrofi
aggiusta paragrafi (in base alla punteggiatura di fine riga) e unisci linee
identificazione di eventuale parola spezzata a fine pagina (trattino finale) e appicazione del {{pt}} con la sintassi di fine pagina
applicazione di un pt con la sintassi di inizio pagina se l'ultima pagina contiene un pt di fine pagina
applicazione di un {{nop}} in testa alla pagina se l'ultima pagine termina con un fine paragrafo.

Le opere "trattate" in questo modo sono raccolte in Categoria:Pagine indice precaricate, la prima è Indice:Deledda - Cenere, Milano, 1929.djvu, l'ultima Indice:Sino al confine.djvu

Strategia 2: uploader2.py[modifica]

software
come strategia 1
opere adatte
idem
operazioni preliminari
idem
riga di comando per il lancio di uploader2.py
python uploader2.py file.djvu
azione
l'intero OCR del testo, con le pagine marcate, viene caricato su una pagina wikisource; si procede via javascript con le operazioni pagina per pagina

Strategia 3: OCR[modifica]

software
nessuno tranne il tool OCR.js di Phe su ToolLabs
opere adatte
con djvu a dettaglio word, interpretabili da MediaWiki:OCR.js1
operazioni preliminari
idem, ma senza scaricamento del file djvu in locale
azione
alla creazione di una pagina che sia preceduta da almeno due pagine formattate scattano le operazioni elencate in pagina per pagina

Strategia 4: uploader*.py + OCR[modifica]

logica
dopo effettuato il caricamento con uploader*.py, lanciare OCR.js pagina per pagina in edit, e, se ha successo, si ottengono dati per ricavare elementi di formattazione non desumibili dal puro testo ma desumibili dalle coordinate delle parole e delle righe
primo passo
le funzioni di caricamento di OCR sono state modificate; adesso il testo viene caricato nella pagina solo se la pagina è "nuova" (wgArticleId==0), in caso contrario l'output viene solo memorizzato in localStorage. Così, lanciando OCR in una pagina che già contiene testo, il testo precedente viene conservato e i più sono disponibili tutti i dati sulle coordinate delle parole e delle righe: chi vuole può esplorare l'oggetto mw.pagina dopo aver cliccato il pulsante OCR.

Uso dei dati da hOCR[modifica]

Il tasto OCR lancia le routine di MediaWiki:OCR.js, modifica degli script di Phe su fr.source. Con precedenti lavori, l'output del tool OCR viene completamente utilizzato, in parte per estrarre il testo, in parte per memorizzare in mw.pagina la maggior parte dei dati disponibili (che variano a seconda che il tool restituisca il contenuto dello strato testo mappato del file djvu, oppure l'hOCR di Tesseract, se la procedura di default fallisce).

L'oggetto mw.pagina contiene, oltre a dati generali sulla pagina, l'elenco delle parole con relativa mappatura in mw.pagina e con nostra elaborazione i dati mappati delle varie linee in mw.pagina.linee. L'oggetto mw.pagina è conservato anche in localStorage.ws_hOCR_page per essere utilizzato da qualsiasi pagina aperta successivamente al caricamento.

In Utente:Alex_brollo/hOCRview.js le routine mw.ocr_show() e mw.ocr_showAllLines() (che si appoggia a mw.ocr_showLine()) modificano la struttura del box immagine della pagina e poi sovrappongono all'immagine il profilo degli elementi linea. A destra il risultato. Di ogni linea, corrispondente a ciascun oggetto mw.pagina.linee, sono disponibili vari attributi ricavati dalle coordinate della linea (width, height, lgap, rgap), il testo contenuto inserito nell'attributo title, e dalle relazioni con le linee contigue (between).

Ad esempio, la seconda linea è rappresentata dal seguente oggetto:

{between: 8,
height: 22,
id: 2,
lgap: 314,
rgap: 11,
text: "celando la sua rabbia impoten¬",
width: 346,
x1: 510,
x2: 856,
y1: 266,
y2: 288}

Visualizzazione dell'analisi statistica dei parametri delle linee[modifica]

A destra, il primo risultato di un'analisi dei parametri degli oggetti mw.pagina.linee. Il programma di visualizzazione dei profili delle linee è stato modificato in modo da utilizzare diversi colori, uno per ciascuna delle linee omologhe rispetto ad una certa caratteristica. Si può quindi controllare visivamente la qualità dell'algoritmo di classificazione.

In questo caso, la classificazione è stata basata sull'attributo lgap, che rappresenta lo scostamento da sinistra della linea. Le linee in grigio sono quelle che non hanno significativa indentatura. Segue il gruppo delle linee di inizio paragrafo, segue infine il gruppo dell'unica riga con indentatura rilevante (la riga intestazione).


  1. la versione it.source di OCR.js è modificata, in quanto memorizza in localStorage l'intero output dello script, comprese le coordinate delle singole parole, e sue elaborazioni