Utente:Alex brollo/Correttore ortografico DIY

Da Wikisource.
Jump to navigation Jump to search

Cosa significa "correttore ortografico"?

Procediamo lemme lemme ;-)

  1. elenco di lemmi giusti ->array
  2. dizionario di lemmi errati, ciascuno associato al lemma giusto ->array associativo
  3. interfaccia utente
  4. interfaccia amministratore

L'interfaccia utente deve consentire contemporaneamente, nel corso della correzione di uno specifico testo:

  1. l'aggiornamento dell'array
  2. l'aggiornamento dell'array associativo
  3. la verifica automatica del testo corrente sulla base dell'array e la sua correzione sulla base dell'array associativo.
Primo test
lavori su testo cinquecentesco: Indice:Ordini di cavalcare (1571).djvu
  1. ottenere i file text dell'ocr pagina per pagina
  2. utilizzare Notepad++ o editor txt analoghi eseguendo delle modifiche di file di massa sulle parole da correggere ricorrenti (cauallo->cavallo; forfe->forse)
  3. i primi test indicano che la tecnica consente migliaia di modifiche estremamente rapide.
Secondo test
  1. costruzione di un catalogo dei lemmi (trasformazione testo con parser() e costruzione di un dizionario con il conteggio dei singoli lemmi)
  2. modifica, con tecnica Primo test o alternative (correzione diretta dei file via python, altrettanto rapida), dei lemmi da correggere di maggiore numerosità
Parentesi - revisione di parser()
# python
# parser accetta una stringa lunga a piacere e un set di caratteri che non fanno parte di lemmi.
# restituisce il testo trasformato in una lista ordinata di sequenze lemma-non lemma: lg, e un dizionario dei lemmi (key=lemma)
# appaiati al loro numero di ripetizioni: ld.
# Nel caso di elaborazione di testo OCR è opportuno ridurre al minimo i caratteri (segni di interpunzione, spazi, 
# acapo, tabulazione) perchè è molto probabile che l'errore di interpretazione riguardi caratteri come [{(& .... ecc.
# lg ha la proprietà di permettere di ricostruire esattamente il testo di partenza con una sola istruzione: 
# testo="".join(lg)

def parser(stringa,caratteri=u",;.:-_ ()[]{}\'\"!?/§*+-\n\t0123456789<>=|&"):
    c=False
    lg=[]
    ld={}
    l=''
    for i in stringa:
        if (i in caratteri)==c:
            l+=i
        else:
            c=not c
            lg.append(l)
            if c :
                if not l in ld:
                    ld[l]=1
                else:
                    ld[l]+=1
            l=i
    lg.append(l)
    
    if not l=="" and (not l[0] in caratteri):
        if not l in ld:
            ld[l]=1
        else:
            ld[l]+=1    
    return lg,ld
prova di parser()
>>> parser("uno; due, tre, (quattro), uno, tre")
(['uno', '; ', 'due', ', ', 'tre', ', (', 'quattro', '), ', 'uno', ', ', 'tre'], {'quattro': 1, 'tre': 2, 'due': 1, 'uno': 2})