Aiuto:Match and Fix

Da Wikisource.

Questa pagina illustra alcune caratteristiche di un nuovo tool python, Match and Fix, ispirato a Match and Split con utilizzo di alcune parti del programma, ma totalmente diverso nei risultati. Il programma, attivo e utilizzato sperimentalmente, è in via di sviluppo; è ancora passibile di sostanziali integrazioni.

Il problema[modifica]

Match and Split è uno strumento eccellente nei casi in cui sia disponibile il testo della stessa edizione di cui è disponibile la versione djvu con OCR, ma presenta seri problemi quando il testo disponibile NON deriva dalla stessa edizione. In questo caso, possono variare sostanzialmente intere sezioni del testo; il corredo di annotazioni; la punteggiatura; l'uso delle maiuscole; l'uso delle abbreviazioni ed altri dettagli.

Le piccole differenze (soprattutto punteggiatura e maiuscole) sono molto faticose da correggere perchè non vengono colte facilmente dall'occhio del lettore. Per questi motivi en.source scoraggia decisamente l'uso di M & S nei casi di testi provenienti da differenti edizioni.

Cosa fa Match and Fix[modifica]

Il comando base del programma è: maf(djvu,ini=1,fin=1000,txt=None,load=False,doMatch=False)

  • djvu: indirizzo completo di un file djvu scaricato nel proprio pc. Obbligatorio.
  • ini: numero pagina iniziale da estrarre dal file djvu (default:1)
  • fin: numero di pagina finale da estrarre dal file djvu (default:1000)
  • txt: indirizzo completo di un testo di riferimento per la correzione dell'OCR estratto dal djvu, parola per parola. Default None (nessun file di riferimento)
  • load: True o False, determina se si debba eseguire il caricamento via bot delle pagine corrette in nsPagina (riservato a chi dispone di un bot python abilitato). Defauklt False (non esegue il caricamento)
  • doMatch: True o False, esegue o non esegue la procedura di correzione dell'OCR sulla vase di un testo di riferimento. Default False (non esegue la correzione).

Sono previste tre combinazioni di load e doMatch che determinano azioni diverse.

  • load=False, doMatch=False: il programma estrae il testo OCR dal file djvu (intervallo pagine da ini a fin), aggiunge i codici Split e lo salva nel file testoSplit.txt
  • load=False, doMatch=True: il programma estrae il testo OCR dal file djvu (intervallo pagine da ini a fin), lo corregge sulla base del testo di riferimento, aggiunge i codici Split e lo salva nel file testoSplit.txt
  • load=True, doMatch=True: il programma estrae il testo OCR dal file djvu (intervallo pagine da ini a fin), lo corregge sulla base del testo di riferimento, e carica immediatamente il testo corretto delle pagine in nsPagina (richiede che l'utente disponga di un account bot attivo). Aggiunge comunque i codici Split e salva il testo nel file testoSplit.txt

Possibili strategie di utilizzo[modifica]

  1. estrazione dell'OCR di un file djvu e sua correzione manuale offline prima del caricamento in nsPagina
  2. estrazione dell'OCR di un file djvu, sua correzione mediante confronto parola con parola con un testo di riferimento, eventualmente seguita da correzione manuale, e suo caricamento in nsPagina
  3. estrazione dell'OCR di un file djvu, sua correzione mediante confronto parola con parola con un testo di riferimento, e immediato caricamento dell'OCR corretto in nsPagina via bot (riservato agli utenti che dispongono di un bot python)

Come si esegue il caricamento in nsPagina[modifica]

Il file output testoSplit.txt ha questa struttura:

==[[Pagina:Tiraboschi - Storia della letteratura italiana, Tomo I, Classici italiani, 1822, I.djvu/20]]==
VI G. TIR.I BOSCHI XIX
in poco , nulla omrnise ili quanto fa d uopo
di inveii ¡gare nella compilazione di simili istorie ; rigettando tutto ciò che non fosse appoggiato a monumenti sicuri, od almeno sostenuto
da buone ragioni. Adoperandosi così a vantaggio de’ Modenesi, il Tiraboschi non altrimenti si conduceva che se trattato si fosse di
se stesso e della sua patria. Ed avrebbe pur
desiderato di fare il volere di quelli, che lo
pregavano di scrivere particolarmente la storia
de’ Vescovi di Modena .... 
==[[Pagina:Tiraboschi - Storia della letteratura italiana, Tomo I, Classici italiani, 1822, I.djvu/21]]==
xx riTA
conseguito, anche allorché nel 177?) intraprese ]
in Modena la pubblicazione del Giornale dei
Letterati, continuato poi, coll' opera di molti \
collaboratori , fino all’ anno 1790, in 43 vo-1
lumi. Esponeva il Tiraboschi il suo parere \
sulle opere che venivano in luce, senza timore ,,,,

Il file, semplicemente copiaincollato in qualsiasi pagina wikisource (ns0, sandbox personale sottopagina della pagina utente, ecc), attiva, appena salvato, il tool Split. Un click sulla linguella Split lancia lo split "ufficiale".

In alternativa è in studio un gadget javascript che esegue lo split direttamente dalla pagina in cui è stato copiaincollato il file in modifica; questo significa che non serve nemmeno salvare la pagina.

Avvertenze per l'uso e dipendenze[modifica]

Obbligatori
python 2.7
routine djvulibre (viene utilizzato in particolare djvutxt.exe)
file djvu con strato OCR. Attenzione: il nome del file djvu scaricato dev'essere esattamente identico al nome del file su Commons e al nome dell'Indice (altrimenti i codici split devono essere corretti prima del caricamento). Alcuni caratteri speciali nel nome del file, come &, possono creare problemi (sarebbe meglio evitarli sempre nei nomi dei file!)
Opzionali
testo di riferimento (formato txt, codifica utf-8)
account bot attivo

Meccanismo della correzione per confronto con il testo di riferimento[modifica]

L'algoritmo di correzione, discretamente complesso, è basato sulla libreria python difflib e su alcune routine originali di Match and Split.

Immaginiamo che l'OCR contenga il testo: Adoperandosi cosi a vantaggio de’ Modencsi (vedi anche volume II, pag. 123), il Tiraboschi non altrimente si conduceva

e che il testo di riferimento contenga il testo: Adoperandosi così a vantaggio de' Modenesi, il Tiraboschi (vedi nota 5) non altrimenti si conduceva

L'algoritmo "vede" che le sequenze Adoperandosi, a vantaggio de, il Tiraboschi non, si conduceva coincidono; "vede" che invece non coincidono così, Modenesi, vedi anche volume II pag 123, vedi nota 5, altrimente. Ragionandoci decide che è giusto sostituire cosi con così, Modencsi con Modenesi, altrimente con altrimenti, mentre è giusto ignorare la diversità nell'apostrofo, il vedi nota 5 e vedi anche volume II pag 123.

Corregge quindi in: Adoperandosi così a vantaggio de’ Modenesi (vedi anche volume II, pag. 123), il Tiraboschi non altrimenti si conduceva

In pratica, la struttura e la punteggiatura dell'OCR vengono conservate, mentre vengono sostituite singole parole non corrispondenti dei due testi, purchè intervallate a sequenze corrispondenti. Eventuali testi del tutto diversi fra OCR e testo di riferimento mmvengono semplicemente ignorati. Questo significa che non è indispensabile che l'OCR e il testo di riferimento provengano dalla stessa edizione; possono, ad esempio, avere un corredo di note del tutto diverso e sostanziali differenze nella punteggiatura. In entrambi i casi farà fede l'OCR.

Sviluppi possibili[modifica]

  • pre-elaborazione dell'OCR prima del confronto. Niente impedisce di correggere immediatamente delle piccole sbavature dell'OCR prima ancoda di confrontarlo con il testo di riferimento (come fa il tool postOCR): verifica spaziatura attorno alla punteggiatura, piccoli errori OCR ricorrenti (classico il "clic" per "che"), ecc.
  • miglioramento dell'analisi delle discordanze. Attualmente lo script ragiona in termini di singole parole, non riconosce gli errori che sono determinati da erronea separazione di parole da parte di spazi o altri separatori. Non individua né corregge, ad esempio, "Tira boschi" nè "T!raboschi" invece di "Tiraboschi" (sia lo spazio che l'esclamativo sono "separatori") nè corregge "Infatti" invece di "In fatti".
  • esclusione di correzioni improprie. Lo script correggerebbe "conghietture" se trovasse "congetture" nel testo di riferimento, e vista la politica di itwikisource sarebbe quasi certamente un errore; analogo problema in tutti i casi di ortografia "modernizzata".
  • al momento il testo OCR è quello dell'OCR di un djvu, quindi è necessario disporre di un djvu; niente impedisce di estendere il confronto a pdf (con strato testo) vs. testo, testo vs. testo, e altre combinazioni come djvu vs. pdf.
  • memorizzazione di un file di log, in cui siano registrate, pagina per pagina, tutte le correzioni effettuate. Al momento le correzioni vengono visualizzate mentre il programma corre, ma non sono conservate.