Взрывая аббревиатуры, чтобы убедиться, что синтезатор читает их правильно?
-
04-10-2019 - |
Вопрос
Если я кормию речевой синтезатор (фестиваль в этом случае, но это относится к всем) следующий бит текста:
«На Чемпионате USPGA в США журналист BBC пошел Миа». Он читает «На Чемпионате USPGA в США, репортер BBC пошел Миа».
Другими словами, я думаю, что потому, что это кластер согласных, он читает «BBC» правильно, но делает «слова» из других.
Самое простая вещь, я полагаю, будет проходить через скрипт PHP, который искал 2 или более заглавных букв, и просто «взрывается» слово в пробелы, как USPG A.
Я понимаю, что это заставило бы странность с такими вещами, как «Я сказал ему, что не делать этого», но в новостях, которые имеют тенденцию происходить меньше.
Вот вещь; Я могу «взорвать» слово в порядке, проблема в том, что я один из тех людей, которые, несмотря на несколько месяцев попытки, просто не могут занять голову вокруг определенных аспектов Regex. В этом случае он ищет: две или более буквы рядом друг с другом в столицах.
Причина, по которой я дал все преждевременно, в том случае, если есть лучший способ сделать это, я не нашел или через - возможно, БД аббревиатуры к словам или что-то.
Решение
Использование регулярного выражения DELAN с 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 пошел Миа
На Чемпионате USPGA в США репортер BBC пошел Миа
Другие советы
Узор для соответствия аббревиатурам:
/\b([A-Z]{2,})\b/
Это соответствует любому «слову» с двумя или более капиталами.
Вы можете значительно упростить свой код, используя Поиск Утверждение
$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])
говорит: «Каждый капитал, сопровождаемый капиталом»
"[A-Z][A-Z]"
будет соответствовать любому экземпляру двух заглавных букв рядом друг с другом.