Взрывающиеся аббревиатуры, чтобы синтезатор правильно их читал? - PullRequest
0 голосов
/ 19 сентября 2010

Если я передаю синтезатору речи (в данном случае фестиваль, но это относится ко всем) следующий бит текста:

«На чемпионате USPGA в США репортер Би-би-си отправился в МВД». это читает «На чемпионате uspga в США репортер BBC стал миа».

Другими словами, я предполагаю, что, поскольку это группа согласных, он правильно читает «BBC», но выделяет «слова» из других.

Самое простое, что я думаю сделать, это запустить его через php скрипт, который искал 2 или более заглавных букв, и просто «взрывает» слово в пространствах, как U S P G A.

Я понимаю, что это могло бы вызвать странности с такими вещами, как "Я сказал ему НЕТ, чтобы сделать это ", но в новостях это случается реже.

Вот эта вещь; Я могу «взорвать» слово ОК, проблема в том, что я один из тех людей, которые, несмотря на месяцы попыток, просто не могут разобраться с некоторыми аспектами REGEX. В этом случае он ищет: две или более буквы рядом друг с другом в заглавных буквах.

Причина, по которой я дал вышеупомянутую преамбулу, заключается в том, что есть лучший способ сделать это, которого я не нашел или с помощью которого - возможно, дБ акронимов к словам или чему-то еще.

Ответы [ 4 ]

5 голосов
/ 19 сентября 2010

Шаблон, соответствующий аббревиатурам:

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

Соответствует любому «слову» с двумя или более прописными буквами.

4 голосов
/ 19 сентября 2010

Вы можете значительно упростить свой код, используя прогнозное утверждение

$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]) говорит: "за каждой столицей следует заглавная буква"

2 голосов
/ 19 сентября 2010

Использование регулярного выражения Делана с preg_replace_callback () позволяет очень легко поместить один пробел между всеми буквами идентифицированных сокращений

$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;

давая

На чемпионате USPGA в США, репортер BBC отправился в МВД

На чемпионате U S P G A в U S, репортер B B C пошел M I A

0 голосов
/ 19 сентября 2010

"[A-Z][A-Z]" будет соответствовать любому экземпляру двух заглавных букв рядом друг с другом.

...