User:Alex brollo/BAT man/memoRegex

From Wikisource
Jump to navigation Jump to search

Coraggio![edit]

Come dice il nome, il tool memoRegex può memorizzare espressioni regolari (le temute regex). Ci ho messo molti anni per superare il disorientamento di cui si è inevitabilmente vittime non appena si apre una pagina di aiuto sull'argomento (a meno che non si sia programmatori professionisti....); adesso non ne saprei più fare a meno, anche se sono certo che le uso in maniera primordiale.

Le regex servono per ricercare, e modificare, frammenti di testo (stringhe) all'interno di testi di lunghezza indeterminata. Sono una estensione del comune "cerca e sostituisci" che tutti utilizziamo; l'estensione consiste nel fatto che ricerca e sostituzione non si basano sulla corrispondenza esatta del testo da cercare-sostituire rispetto a una stringa data; è possibile fornire uno schema più o meno generico della stringa da ricercare, e per costruire questo schema occorre:

  1. imparare un vero e proprio linguaggio di programmazione (con diversi dialetti!);
  2. verificare SEMPRE il risultato.

Un esempio dai testi teatrali[edit]

Guardiamo questo pezzetto di Page:Le Statue movibili.djvu/14 così come lo presenta l'OCR:

Fel. < J isY... e perciò vi mandai a chiedere 100 lire.

Cor. Che io faggio portato Ma primm;i fumine vede li stallie.

Fel. Si.... Kccole... Vedete zi zi questa rappresenta la Htatua Hi

Pul. Mainozip.

Car. (So UiUMOZio io t)

Cor. OouiuFè ditto Mamozio ? Veramente me, pare, nu mamozio.

Vediamo che i personaggi sono rappresentati con brevi stringhe ripetitive, Cor. Pul. .... e che dobbiamo aggiungere a ciascuna di queste stringhe un template {{Sc}}. Niente impedisce di farlo a mano.... ma meglio sarebbe istruire il browser a farlo da solo, seguendo questa regola:

in tutti i casi in cui una riga di testo inizia con Cor.+spazio, inserisci Cor. in un template Sc con uno spazio subito dopo.

In linguaggio regex, dialetto javascript:

espressione di ricerca:/^(Cor\.) /gm
espressione di sostituzione: {{Sc|$1}}

Il tool memoRegex consente di salvare questa istruzione in modo permanente, e questa, e tutte le altre istruzioni, saranno applicate una dopo l'altra in ciascuna pagina con il semplice click sul bottone BAT r!!; il che non è poco. Libera l'utente da tutte le formattazioni ripetitive, permettendogli di concentrarsi sulla cosa veramente importante: la correzione degli errori di OCR (alcuni dei quali sono ripetitivi anche loro, e possono essere corretti automaticamente con altre regex).


Ovviamente questo è solo un esempio per dare l'idea di cosa si può fare; non un'istruzione per scrivere regex, perchè per scriverle occorre padroneggiare non solo ogni singolo carattere delle due espressioni, ma anche elaborare una strategia per ottenere il risultato con il minor sforzo possibile (tenendo conto delle proprie capacità: quello che per un programmatore professionista sarebbe un piccolo sforzo, potrebbe essere inumano per un utente meno esperto).

Il trucco per imparare[edit]

Per imparare l'abc delle regex, un poco tocca studiare; ci sono molti tutorial, qui sotto vi incoraggio a mettere i link di quelli che conoscete e ritenete più facili e lisci. Attenzione: verificate - soprattutto all'inizio - di scegliere un dialetto e uno solo (vi suggerisco di iniziare con le regex per javascript) altrimenti la confusione sarà terribile.

Ma subito dopo imparati i minimi rudimenti, anzi: fin dall'inizio, bisogna provare. Ecco il sito fatto apposta per provare (ricordatevi di selezionare, a sinistra, il "flavour" javascript): https://regex101.com/#javascript. E' un sito meraviglioso; potete scrivere una espressione di ricerca, infilare un testo qualsiasi, e verranno evidenziate, in modalità stupid proof, tutte le corrispondenze (match) . In basso, opzionale, ciò che serve per provare le espressioni di sostituzione. Quindi: prendere un pezzo qualsiasi del testo di una pagina, incollatela, e poi sbizzarritevi a provare, provare e provare. A destra, una marea di informazioni su ogni particolare di quello che state facendo.

Eccon uno screenshot dello stesso testo esempio riportato sopra con la formula indicata e il risultato evidenziato: