# Name: module1
# Purpose:
#
# Author: alessandro.brollo
#
# Created: 14/10/2011
# Copyright: (c) alessandro.brollo 2011
# Licence: <your licence>
#-------------------------------------------------------------------------------
#!/usr/bin/env python
from scripts import *
import os
import re
# legge il numero di pagine di un file djvu
def npag(fdjvu):
comando="djvused #filedjvu -e n > temp.txt"
os.system(comando.replace("#filedjvu",fdjvu))
npag=open("temp.txt").readline()
return eval(npag.strip())
# legge il layer testo di una pagina di un file djvu via djvutxt.exe e la restituisce tal quale
# il testo è memorizzato nel file temp.txt
# può essere selezionato un "livello di dettaglio" della struttura del file: page, column, region, para, line (default line)
def leggiPag(pagina,fdjvu="rct.djvu", detail="line"):
'''
Legge una pagina di un file djvu con djvutxt'''
comando=("djvutxt -detail=#detail -page=#pag "+fdjvu+" temp.txt")\
.replace("#pag",str(pagina))\
.replace("#detail",detail)
os.system(comando)
testo=open("temp.txt").read()
return testo
# esegue la "trasformazione testo->schema+lista" (estrae tutti i testi dallo schema del file sostituendoli con riferimenti;
# i testi sono raccolti come elementi di una lista con modifiche a caratteri critici
def t2sl(testo):
'''
Trasforma testo in schema + lista'''
schema=testo
schema=schema.replace('\\"',""")
lista=produci_lista(schema,'"','"',1)
for i in range(len(lista)):
schema=schema.replace(lista[i],"["+str(i)+"]")
for i in range(len(lista)):
lista[i]=lista[i].replace(""",'\"')[1:-1]
return (schema,lista)
## Funzione inversa alla precedente; da schema e lista ricostruisce testo
def sl2t(schema, lista):
testo=""
for i in range(len(lista)):
el='"'+lista[i].replace('"','\\"')+'"'
schema=schema.replace("["+str(i)+"]",el)
testo=schema
return testo
## funzione inversa a leggiPag: inserisce un testo in una pagina di un file djvu. Il testo deve avere la struttura
## appropriata (ad es. deve essere prodotto con la routine sl2t() )
def scriviPag(pagina,testo,fdjvu="rct.djvu"):
'''
scrive testo in pagina del file fdjvu'''
open("temp.txt","w").write(testo)
comando='djvused #filedjvu -e "select #pag; set-txt temp.txt; save"'\
.replace("#filedjvu",fdjvu)\
.replace("#pag",str(pagina))
os.system(comando)
return "Fatto"
def main():
return
# sostituzione di caratteri critici
def txtCode(testo):
testo=testo.replace("\n","\\n").replace('"','\\"')
return testo
# routine di prova.
# Avendo un file djvu con layer testo da IA (RCT1936.djvu) e una sua copia (rct.djvu), e avendo la collezione
# file da ocr FineReader in una cartella rct_OCR, a pagina singola, denominati Rct1936 - 0001.txt, Rct1936 - 0002.txt...
# lo script legge il layer test pagina per pagina del primo file djvu, ottiene schema + lista e sostituisce l'elemento lista
# con il file da OCR finereader; carica quindi la pagina sul secondo file djvu.
def test(ini,fin):
for p in range(ini,fin):
testo=leggiPag(p,detail="page",fdjvu="RCT1936.djvu")
s,l=t2sl(testo)
tNew=open("rct_OCR/Rct1936 - #np.txt".replace("#np",str(p).zfill(4))).read()
tNew=[txtCode(tNew)]
testo=sl2t(s,tNew)
print "salvo testo in pag.",p
scriviPag(p,testo) # scrive di default il layer testo su rct.djvu
return
if __name__ == '__main__':
main()