- presentazione del sito
- Registrazione
- Eventi, mostre, convegni ed iniziative segnalate dalle aziende
- Recensioni ed articoli
- Le Mailing Lists
- La rivista Pc Ciechi
- Wiki
- Chi siamo
- Donazioni
- Un progetto degno di nota: Wintalbra
- Come navigare in questo sito
- rss
- Bancomat Accessibili sul territorio nazionale
- Contattaci
- I sostenitori di SpazioAusili
informazioni di base per la compilazione delle regexs di nvda.
fonte originale:
adriano barbieri su nvda, 16\08\2008, h. 12.30.
d.
sto cercando di migliorare la dizione di ESpeak anche se in alcune regExs
non riesco a capire dove sbaglio.
Per esempio, vorrei far in modo che ESpeak, tutte le volte che incontri una
parola con la stringa "logica" comprese le sue varianti (logiche, logici,
logico), accentui la prima vocale di questa stringa (la o, per capirci).
Ecco qui sotto la ricorrenza che consiglio da testare prima con il
dizionario temporaneo.
(|w)logic(a)\(he) \1 logic \2 \3 1 1
Ed ora, un po' di pubblicità
:Ho sbagliato qualcosa?
E poi vi chiedo un'altra cosa, già che ci sono: quando nel campo in cui
scrivere il termine o la stringa sostitutiva, c'è differenza dal scrivere i
numeri preceduti dalla controbarra distanziandoli con uno spazio, ad es.: \1
\2, e scrivere la stessa stringa senza spazi? NVDA interpreta diversamente
queste due tipi di correzioni della ricorrenza?
r.
Problema:
Creare una Regex che:
1. Processi la parola "logica" ealcune sue varianti: /he/i/o.
2. Escludaaltre parole che potrebbero contenerla al loro interno, come
ad esempio: "illogica", logicamente, analogicamente, eccetera eccetera,
quindi limitata ai due margini della parola stessa e le sue varianti.
"\" = operatore logico "or" (alternativa or, vuol dire oppure).
"\" = barra diagonale inversa: (carattere "escape", permette di cambiare il
significato di un carattere permettendo di trattarlo, a seconda del caso
come semplice carattere nel suo puro significato letterale, o viceversa,i
caratteri speciali "\b" e "\W" vanno bene per delimitare una stringa; "\b" è
equivalente a:
"(\W|^)", cioè qualsiasi cosa che non sia un carattere o un numero ma che
inizi dal primo carattere a sinistra dellariga odella parola.
"\W" (W maiuscola)indica un qualsiasi carattere non alfabetico, (numeri e
vocali accentate, nonché la punteggiatura e gli spazi saranno accettati),
quindi generalmente è usato per delimitare l'inizio o la finedi una
stringa.
"()" gruppo di parentesi tonde (aperta e chiusa), i gruppi possono contenere
qualcosa, quindi anche più di una, si possono inserire alternative
separandole con l'operatore "|" (barra verticale 'or'), il qualcosa, oltre a
parole complete può essere anche una o più serie di classi, nel secondo caso
quindi, sempre separate dal simbolo "|" (barra verticale).
I gruppi possono essere affiancati tra loro la loro caratteristica è di
poter "memorizzare" il qualcosa al suo interno, che all'occorrenza sarà poi
possibile richiamare e far vocalizzare tramite il numero logico assegnato al
gruppo, il numero deve essere "escaped", cioè preceduto dal carattere
speciale "\" (barra diagonale rovesciata), altrimenti verrà vocalizzato il
numero e non il contenuto memorizzato nel gruppo.
"[]" (Classi, sono delimitate da due parentesi quadre, (aperta e chiusa),
che conterranno una serie di caratteri alfanumerici, (caratteri e numeri,
nonché punteggiatura e/o caratteri speciali 'escaped'., i range in una
classe si specificano tramite l'inserimento del carattere speciale "-"
(trattino), ad esempio: "[a-d]" sono consentiti solo i caratteri da "a" a
"d" in minuscolo, e nessun'altro.
Ti ricordo, e vale per tutti, che ho scritto tre articoli sull'argomento,
per chi volesse accingersi a crearsi un proprio dizionario, le indicazioni
contenute negli articoli sono valide per qualsiasi sintesi vocale, non solo
per "Silvia" in particolare.
Adesso haiun po' di informazioni di base, prova a risolvere il tuo problema,
dammi la tua soluzione poi vedremo di approfondire,ricorda che devi cercare
di ragionare con la logica della macchina e non da essere umano...
***
d.
dopo aver apportato le correzioni alla parola modifica, noto
che ESpeak, quando incontra parole come "modificare" e altre derivazioni
della stringa "modificar", ovviamente si rifà alla mia correzione di
"modifica", per cui ho scritto un'altra regex che questa che ti scrivo qui
asotto:
Invece del tasto tabulazione, qui ti lascio degli spazi vuoti, perché ti sto
scrivendo dalla webmail di yahoo.
(MODIFICAR|[mM]odificar(\w) modificàr\1 1 1
Però la regex sembra non produrmi il risultato sperato, infatti sento i
suoni discendenti per indicarmi un errore di esecuzione, così esco e ritorno
in NVDA, visto che sto modificandoi il dizionario temporaneo.
Cosa mi consiglieresti a questo punto?
r.
Bene!
Ora hai messo le barre al posto giusto.
Non ti è ancora ben chiaro l'uso dei caratteri speciali"\w" o "\W", questi
sono alcuni:
(a, b, d, r, s, t, w).
Tutti devono essere sempre preceduti dalla barra diagonale rovesciata "\", e
prendono anche il nome di caratteri "escaped", questi caratteri speciali
hanno una duplice funzione, a seconda se sono usati in maiuscolo o in
minuscolo, nel primo caso, cioè in maiuscolo hanno significato di
"negazione", (tutto ciò che non è accettato dal medesimo carattere escaped
in minuscolo).
Quindi si possono usare come una sorta di filtri che consentano di far
passare o meno determinati tipi di caratteri, e numeri, eccetera eccetera.
Oraanalizziamo la tua Regex:
(MODIFICAR|[mM]odificar(\w) modificàr\1 1 1
1. L'e rrore è stato generato dalla mancata "chiusura" di una parentesi, dei
2 gruppi solo uno è corretto.
2. L'avere usato il carattere speciale "\w" (doppia vu minuscola) è come
dire: qualsiasi carattere è consentito, equivale quasi a [a-zA-Z].
Per delimitare la fine della parola occorreva usare almeno la "\W" (doppia
vu maiuscola escaped).
In taluni casi è neccessario anche delimitare l'inizio della parola
con"(\W|^)", o più comodamente con "\b", ma te l'ho già spiegato.