Exploding acronimi per garantire una loro legge correttamente sintetizzatore?
-
04-10-2019 - |
Domanda
Se nutro un sintetizzatore vocale (festival, in questo caso, ma si applica a tutti) la seguente parte di testo:
"al Campionato USPGA negli Stati Uniti, il giornalista della BBC è andato MIA". si legge "Al campionato USPGA negli Stati Uniti, il giornalista della BBC è andato mia".
In altre parole, credo che perché è un gruppo di consonanti, si legge "BBC" correttamente, ma rende "parole" fuori gli altri.
La cosa più semplice da fare, suppongo, sarebbe quella di eseguire attraverso un php sceneggiatura che ha esaminato per 2 o più lettere maiuscole, e semplicemente "esplode" la parola in spazi, come U S P G A.
mi rendo conto che sarebbe causerebbe stranezza con cose come "gli ho detto N O T per farlo", ma nei rapporti di notizie che tende ad accadere in meno.
Ecco la cosa; Posso "esplodere" una parola OK, il problema è che io sono una di quelle persone che, nonostante mesi di tentativi, non ne ha mai la testa rotonda alcuni aspetti della REGEX. In questo caso, è alla ricerca di: due o più lettere una accanto all'altra in maiuscolo
.La ragione per cui ho dato tutto il pre-ambio sopra è nel caso in cui ci sia un modo migliore di fare questo non avevo trovato o tramite di -. Forse un db di acronimi a parole o qualcosa
Soluzione
uso delle espressioni regolari di Delan con preg_replace_callback () rende molto facile mettere un singolo spazio tra tutte le lettere degli acronimi individuati
$input = "At the USPGA championship in the US, the BBC reporter went MIA";
function cb_separateCapitals($matches) {
return implode(' ',str_split($matches[0]));
}
echo $input,'<br />';
$output = preg_replace_callback('/\b([A-Z]{2,})\b/','cb_separateCapitals',$input);
echo $output;
dando
Al campionato USPGA negli Stati Uniti, il giornalista della BBC è andato MIA
Al campionato U S P G A nel U S, il giornalista B B C andato M I A
Altri suggerimenti
Un modello da abbinare acronimi:
/\b([A-Z]{2,})\b/
che corrisponde a qualsiasi 'parola' con due o più capitali.
È possibile semplificare notevolmente il codice utilizzando un lookahead
$input = "At the USPGA championship in the US, the BBC reporter went MIA";
echo preg_replace('~[A-Z](?=[A-Z])~', '$0 ', $input);
[A-Z](?=[A-Z])
dice "ogni capitale seguita da un capitale"
"[A-Z][A-Z]"
corrisponderà a qualsiasi istanza di due lettere maiuscole uno accanto all'altro.