Pregunta

Si alimento un sintetizador de voz (festival, en este caso, pero se aplica a todos) el siguiente fragmento de texto:

"En el campeonato USPGA en los EE.UU., el reportero de la BBC fue MIA". se lee "En el campeonato USPGA en los EE.UU., el reportero de la BBC fue mia".

En otras palabras, supongo que debido a que se trata de un grupo de consonantes, se lee "BBC" correctamente, pero hace "palabras" de los demás.

Lo más sencillo que hacer, supongo, sería la de ejecutar a través de un php guión que parecía para 2 o más letras mayúsculas, y simplemente "explota", la palabra en los espacios, como U S P G A.

Me di cuenta de que sería causaría extrañeza con cosas como "Le dije N O T para hacer eso", pero en los informes de noticias que tiende a suceder menos.

Aquí está la cosa; Puedo "explotar" una palabra bien, el problema es que yo soy una de esas personas que, a pesar de meses de intentar, simplemente no puede obtener su cabeza redonda ciertos aspectos de Regex. En este caso, se está buscando: dos o más letras al lado del otro en las capitales

.

La razón que dio todo el preámbulo anterior es en el caso de que haya una mejor manera de hacer esto no hubiera encontrado o por medio de -. Tal vez una base de datos de siglas a palabras o algo

¿Fue útil?

Solución

El uso de expresiones regulares de Delan con preg_replace_callback () hace que sea muy fácil de poner un solo espacio entre todas las letras de las siglas identificados

$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

En el campeonato USPGA en los EE.UU., el reportero de la BBC fue MIA

En el campeonato U S P G A en el U S, el reportero B B C fue M I A

Otros consejos

Un modelo para que coincida con las siglas:

/\b([A-Z]{2,})\b/

Esto coincide con cualquier 'palabra' con dos o más capitales.

Se puede simplificar en gran medida su código mediante el uso de un de búsqueda hacia delante afirmación

$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 "todas las capitales seguido de una letra mayúscula"

"[A-Z][A-Z]" coincidirá con cualquier instancia de dos letras mayúsculas al lado del otro.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top