I Dizionari di NVDA.\2di Adriano Barbieri Seconda parte. ******** Nel precedente articolo dedicato all'argomento abbiamo visto come far matchare, cioè riconoscere, una determinata parola, "vocabolo", inserito in uno dei Abbiamo verificato tramite esempi pratici come far matchare un vocabolo interamente in maiuscolo, minuscolo, e a prescindere dall'avere l'iniziale maiuscola. Questo grazie all'uso delle Regular Expressions o comunemente chiamate Regex. Per ottenere questo risultato abbiamo utilizzato solamente due caratteri speciali: • "|", La barra verticale, operatore logico "or", che ci permette una alternativa ed è come dire letteralmente: "oppure". L'esempio dell'articolo precedente, tanto per rinfrescarci la memoria era un semplice nome di persona: "Sophia". La Regex usata era: "SOPHIA|[sS]ophia", attenzione che le virgolette servono solo a racchiudere gli esempi. Tradotta in parole è come aver detto al modulo dizionario: se SOPHIA è in maiuscolo oppure una iniziale che ho racchiuso fra parentesi quadre corrisponde La sintassi è valida nella maggior parte dei vocaboli in cui ci imbatteremo durante la lettura di qualsiasi testo e può essere applicata indipendentemente Nell'articolo precedente v'è anche stilata una lista dei caratteri speciali che possono essere applicati a seconda del risultato che si desidera raggiungere, Opportunamente combinati, questi caratteri speciali ci consentono di ottenere risultati di gran lunga superiori rispetto ai diversi sistemi comunemente Alcuni di questi, ci mettono a disposizione un carattere speciale "*", asterisco, che, se posto a destra di un vocabolo, permette di matcharlo anche se La domanda che sorge spontanea a questo punto è: "Con NVDA posso fare altrettanto?". La risposta è: "Anche di meglio!". Infatti, possiamo crearci il nostro "asterisco" personale; Grazie all'uso delle parentesi tonde, di un carattere speciale, e vedremo un altra utile funzione Abbiamo già appurato nell'articolo precedente, come quest'ultimo carattere messo a sinistra di un altro possa assegnare o togliere proprietà di carattere Ora vedremo un'altra peculiarità ad esso abbinata, e cioè quella di poter richiamare e conseguentemente far vocalizzare alla nostra sintesi una o più parti Ogni gruppo di queste espressioni ha un numero logico abbinato, il numero assegnato va' in ordine crescente. Ad esempio, "1", "2","3", eccetera, eccetera, Quando si desidera far vocalizzare il risultato memorizzato di una o più di queste espressioni, basterà usare il numero logico abbinato preceduto dalla: Prendiamo ad esempio la parola "papera". Sappiamo tutti che la parola "papera" può comprendere: "papere", "paperi", "papero", eccetera. Un'altro screen reader grazie al suo asterisco ci risolverebbe il problema così: "paper*" e la parola verrebbe correttamente matchata con ogni sua lettera Però, se la parola è "paperino", o "paperella", oppure "paperone", eccetera, eccetera,non si avranno i risultati desiderati, ma si avranno solo errori NVDA, invece, grazie a una sola Regex fa' questo e altro, in questo modo: "(PAPER|[pP]aper)([aAeEiIoO]\W)". Tradotto in parole povere, con questa espressione diciamo a NVDA: se trovi la parola "PAPER" in maiuscolo, o in alternativa la stessa parola, ma in minuscolo, Nel campo della voce in sostituzione basta fare così: "pàper\2", in pratica, si mette la parola corretta, in questo caso: "pàper" con la "a" accentata, Quello è il nostro asterisco personalizzato, al modulo avevamo detto di memorizzare qualcosa, no? Questo sistema si usa quando non si sa esattamente di La nostra vocale è stata memorizzata grazie all'uso delle parentesi tonde e, nel nostro caso, inserita nel secondo gruppo. Per mettere la giusta vocale La "\W" (barra rovesciata doppiavu maiuscola) serve a impedire che la parola: "paper" abbia appiccicato qualcos'altro oltre a ciò che abbiamo indicato Se ad esempio la parola fosse stata "paperoga", "paperinik", o qualsiasi altra simile, l'ultimo carattere speciale che abbiamo appena visto renderebbe L'esempio precedente potrebbe funzionare anche così: "(PAPER|[pP]aper)(.\W)". Stessa sintassi, ma al posto della classe fra parentesi quadre abbiamo messo un semplice punto fermo. Il punto fermo è un carattere speciale, equivalente all'asterisco usato ad esempio in Jaws. Esso infatti accetta un qualsiasi carattere, manon un numero. Ecco un esempio: "zodiaca". Anche questo vocabolo può variare cambiando la vocale finale "zodiaci", "zodiaco", ma può anche essere "zodiache". E qui c'è Ormai conoscete la sintassi per far matchare parole maiuscole e minuscole con anche l'iniziale. E' sempre quella! La cosa che invece voglio farvi notare Ormai credo sia chiaro che racchiudere qualcosa fra parentesi tonde, vuol dire al nostro modulo dizionario di memorizzare ilcontenuto per rendercelo disponibile Attenzione! Usare nel secondo parametro un valore inferiore al primo, non è ammesso. Se si omette il secondo parametro, lasciando la virgola, è come dire Se volete divertirvi un pochino, ecco un giochino che potete provare afare tramite il dizionario temporaneo di NVDA. Apritelo e aggiungete questa voce: "falso([aeiou]{2,4}\W)". Mettete nel campo voce in sostituzione la seguente stringa: "vero, \1". Come più volte detto, vi raccomando di non usare anche le virgolette! aprite il Blocco note e scrivete: "falso". Se avete fatto caso alla Regex appena immessa nel dizionario temporaneo, certamente avrete notato che cosa si deve aspettare da noi il modulo. Per far sì che la condizione diventi "vera" occorre che si immetta uno qualsiasi dei caratteri elencati fra le parentesi quadre, ok? Ma, un minimo di due, fino a un massimo di quattro, giusto? Quindi è vero se digito almeno due qualsiasi, dei caratteri consentiti nella classe. Ma è altresì vero se ne digito in totale quattro, basta che siano E' altresì vero se digito ogni singolo carattere da 2 a quattro volte, uno qualsiasi di quelli consentiti. Oppure almeno quattro dei caratteri consentiti, Ora, provate invece a inserire un carattere non compreso nella classe consentita e vedrete che la condizione non sarà più vera, ma falsa e la sintesi ve Provate anche a cambiare i valori dei parametri per vedere che succede, e vedrete che non è poi così difficile apprenderne il meccanismo. Le parentesi graffe si possono ottenere facilmente premendo la combinazione "alt sinistro+123" dal tastierino numerico per la parentesi graffa aperta e In pratica il carattere che precede la parentesi graffa aperta subirà l'effetto conteggiato nelle parentesi graffe, nel nostro caso, il carattere speciale Attenzione, i numeri non verranno accettati! Ma torniamo all'esempio "zodiac". Ecco cosa metteremo nel campo della voce in sostituzione: "zodìac\2". La parola "zodìac" con la "i" accentata, seguita dal richiamo del risultato memorizzato nel secondo gruppo di parentesi tonde. Anche qui il carattere speciale ci viene in aiuto limitando il matching solo a ciò che abbiamo impostato noi, cioè uno o 2 caratteri qualsiasi in più e Ricordate che il punto fermo in se indica "qualsiasi carattere", ma non un numero. Altrimenti, occorre usare una classe che indichi quali caratteri accettare, In questo caso abbiamo aggiunto: "HE|he", per dire che è consentita la parola: "zodiac" seguita da: "HE" in maiuscolo o "he" in minuscolo, in aggiunta Quindi, le parentesi tonde sono molto utili anche per raggruppare qualcosa come del testo, che verrà interpretato nell'ordine da noi digitato, a differenza La voce da mettere nel campo in sostituzione è sempre quella vista in precedenza, ossia: "zodìac\2". Il nostro asterisco virtuale lo si può usare anche a sinistra del vocabolo, cosa che, vi assicuro, Jaws non fa, a dimostrazione della potenzialità delle Vediamo un po', per esempio, alcune sintesi vocali non leggono bene un nome straniero tipo: "Ross", o "Gibb". Nella maggior parte dei casi viene letta sillabata "ro s s", o "gi b b". In lingua italiana, però, la parola: "Ros" può essere contenuta in: "Rosso", "Rossiccio", "Rossano", eccetera eccetera,e la parola: "Gibb" può essere contenuta Allora come facciamo a escludere dal matching quelle parole e specificare che la correzione deve essere fatta solo al nome: "Ross", o "Gibb"? Un modo è questo: "(\W|^)(ROSS|[rR]oss)(\W)". il primo gruppo di parentesi tonde, a sinistra del vero vocabolo da matchare serve ad indicare che a sinistra del vocabolo non vi sia nulla a parte spaziature, Quindi, quando si inserisce un nuovo vocabolo e sembra non avere effetto, occorre armarsi di un po' di pazienza e usando magari il "blocco note" cercare Se la andassimo a modificare aggiungendo l'espressioncina che avevo descritto, la riga diventerebbe così: "(\W|^)(ASOL|[aA]sol)(.\W) àsol\3". Torniamo a noi, come vedete la nostra "\W", (barra diagonale rovesciata doppiavu maiuscola) ci viene in aiuto anche se messa a sinistra. Subito dopo abbiamo posto un'alternativa tramite il consueto carattere speciale "|" (or), seguito dall'accento circonflesso, l'apice in questo caso indica Quindi, abbiamo già scartato che la parola si trovi inserita ad esempio in: "grosso", "infrarossi", "prossimo", eccetera eccetera. Alla destra del vocabolo invece ancora il nostro carattere magico "\W" (barra diagonale rovesciata doppiavu maiuscola) racchiuso fra parentesi tonde anch'esso. In totale abbiamo tre gruppi racchiusi fra parentesi tonde, ma a noi servono solo il primo ed il terzo. In essi, sono memorizzati i caratteri separatori Provate a verificare e vedrete che: "rosso", "grosso", infrarosso", eccetera non subiranno alterazioni. Ma non abbiamo ancora finito! Infatti, è anche possibile creare il nostro asterisco virtuale nel bel mezzo di un vocabolo; Poniamo il caso di voler matchare Se fra le due parole c'è uno spazio o un carattere di separazione come il trattino o il sottolineato, o addirittura niente, cioè le due parole sono attaccate, In parole povere, con il nostro asterisco personalizzato che abbiamo posto al centro delle due parole, abbiamo detto che è ammesso un solo carattere separatore Faccio notare che se però si volesse fare accettare più di un solo carattere separatore come nell'esempio citato è sempre possibile ricorrere al trucchetto Una assurdità insomma, ad ogni modo l'incantesimo avrebbe fine nonappena la seconda parola dovesse andare a capo in una nuova linea). Ah!Dimenticavo... Se invece la "w", è usata in minuscolo, il carattere speciale: "\w", (barra diagonale rovesciata doppia vu) ci permette ovviamente tutto l'opposto. Essa infatti permette di matchare del testo appiccicato o inserito in una riga di altro testo, ad esempio, volendo matchare il punto fermo presente fra Come voce in sostituzione mettere: "\1 punto \2". In parole povere abbiamo detto, se in una riga di testo, nel bel mezzo di questa, trovi il carattere "punto", (notate che il punto è preceduto dalla "\" Se si omettesse la seconda espressione verrebbero anche letti tutti i punti di a capo e di fine paragrafo. Come avete visto le combinazioni sono infinite e tutto dipende dalla nostra fantasia, e se si rispettano le sintassi si possono ottenere molti risultati Adriano Barbieri. |
CercaCommenti recenti
Argomenti del forum attiviMessaggi recenti del blog
Sei il visitatore n.
108147 dal 07 Gennaio 2008
Nuovi utenti
|
|