Зависимость произношения от номера строки
Модератор: balabolka
- mathem
- Постоялец
Зависимость произношения от номера строки
Здравствуйте! Помогите, пожалуйста, разобраться. Вот, когда я задаю произношение слова "строке" по фонемам как "s t rr a k s1 e" все работает тогда и только тогда, когда это задание стоит в файле sample.bxd в строке с номером больше 93. Как только это условие нарушается. возникает ошибка "Ошибка синтезирования речи: Параметр задан неверно". Можно ли это как-то устранить? Дело в том, что это не единственное слово, вызывающее подобную ошибку.
- balabolka
- V.I.P.
Зависимость произношения от номера строки
mathem
Правила из словаря применяются последовательно, одно за другим. И каждое правило меняет текст. Проверьте остальные правила в списке, как они срабатывают. С помощью пункта главного меню "Показать измененный текст" проверьте то место, в котором при чтении происходит ошибка.
По моему опыту, SAPI 5 возвращает сообщение об ошибке "Параметр задан неверно", если фонемы в теге PRON были заданы для одного голоса, а в программе их читает другой голос (например, голос для другого языка). Но могут быть иные ситуации, когда появляется это сообщение об ошибке.
Правила из словаря применяются последовательно, одно за другим. И каждое правило меняет текст. Проверьте остальные правила в списке, как они срабатывают. С помощью пункта главного меню "Показать измененный текст" проверьте то место, в котором при чтении происходит ошибка.
По моему опыту, SAPI 5 возвращает сообщение об ошибке "Параметр задан неверно", если фонемы в теге PRON были заданы для одного голоса, а в программе их читает другой голос (например, голос для другого языка). Но могут быть иные ситуации, когда появляется это сообщение об ошибке.
- mathem
- Постоялец
Зависимость произношения от номера строки
Слушайте, а ведь правда! Я это время копался. В результате теперь у меня тоже самое, только крутится это все 89. Как только это нарушается, там, где указали вы, становится вот так:
Код: Выделить всё
<pron sym="s тэ rr a k s1 e"/>
- balabolka
- V.I.P.
Зависимость произношения от номера строки
mathem
Спасибо, теперь понятно. Одно из правил заменяет латинскую букву на русскую, голос не может распознать такую "фонему" и возвращает ошибку "Параметр задан неверно" (параметром для атрибута XML-тега здесь является фонема).
Надо искать правила, похожие на эти (латинские буквы в левой части, русские буквы в правой):
Спасибо, теперь понятно. Одно из правил заменяет латинскую букву на русскую, голос не может распознать такую "фонему" и возвращает ошибку "Параметр задан неверно" (параметром для атрибута XML-тега здесь является фонема).
Надо искать правила, похожие на эти (латинские буквы в левой части, русские буквы в правой):
Код: Выделить всё
t=тэ
a=а
e=е
- Lecron
- Специалист
Зависимость произношения от номера строки
Предложение: прекращать обработку после первого совпадения. Так работают многие алгоритмы — разбор route в веб-API, настройки nginx.
Не дело применять исправление к уже исправленному. Вероятность ошибки будет ниже, а управление заменой предсказуемее. Возможно будет польза для регэкспов и шаблонов. Плюс даст небольшое ускорение. Навскидку около 5%.
Если же вдруг понадобится некая общая замена, выносить в отдельный словарь и управлять последовательностью их применения. Я так лат H заменял на рус Н для старых фидошных текстов.
- balabolka
- V.I.P.
Зависимость произношения от номера строки
Lecron
Нет, менять способ применения правил к тексту не стану. Это слишком серьезное изменение в программе: оно затронет много словарей, составленных пользователями.
Как я понимаю, сейчас многие словари как раз и рассчитаны на то, что к одному и тому же тексту будут последовательно применены разные правила из списка.
Например, вот реальный пример использования словаря. Исходный текст:
Одно правило заменит двойной пробел на одинарный:
Следующее правило уберет сокращение:
Последнее правило приведет словосочетание к окончательному виду:
Каждый раз изменения вносятся в один и тот же текст; так и было задумано составителем списка правил. (Разумеется, здесь очень важен порядок применения правил.)
Есть один нюанс. "Балаболка" применяет к тексту правило только один раз. Другие программы могут применять правило по несколько раз, снова и снова, каждый раз меняя текст, - до тех пор, пока правило выполняет хотя бы одну замену в тексте. Сложно сказать, какой способ эффективнее. (Я выбрал тот способ, который потребует меньше времени на выполнение.)
Нет, менять способ применения правил к тексту не стану. Это слишком серьезное изменение в программе: оно затронет много словарей, составленных пользователями.
Прекращать обработку чего именно - буквы, слова, словосочетания, предложения, всего текста? Совпадение чего с чем - с буквой, словом, словосочетанием и т.д.?
Как я понимаю, сейчас многие словари как раз и рассчитаны на то, что к одному и тому же тексту будут последовательно применены разные правила из списка.
Например, вот реальный пример использования словаря. Исходный текст:
Код: Выделить всё
ул. 8 марта
Код: Выделить всё
ул. 8 марта
Код: Выделить всё
улица 8 марта
Код: Выделить всё
улица Восьмого марта
Есть один нюанс. "Балаболка" применяет к тексту правило только один раз. Другие программы могут применять правило по несколько раз, снова и снова, каждый раз меняя текст, - до тех пор, пока правило выполняет хотя бы одну замену в тексте. Сложно сказать, какой способ эффективнее. (Я выбрал тот способ, который потребует меньше времени на выполнение.)
- mathem
- Постоялец
Зависимость произношения от номера строки
Так это эти же замены будут применяться вообще ко всем латинским буквам? Мне такого не надо: в других местах нужно будет, чтобы определенные команды произносились по буквам.
- Lecron
- Специалист
Зависимость произношения от номера строки
Не знаю вашего алгоритма. Думаю вы меня поняли. Фиговое предложение, значит фиговое. Бывает. Обратная совместимость тяжелая ноша. Простите что отвлек.
Кстати, возвращаясь к недавней теме: при поиске новых имен, скрывать подходящие под шаблонные правила. Скриптом вытащил список слов, имеющих различное ударение, при совпадении первых 5 символов в левой части правил. Ужаснулся. 146 правил указывали на разночтение а-ля
Код: Выделить всё
Макферсона=Ма`кферсона
Макферсонов=Макфе`рсонов.
Код: Выделить всё
Константиновны=Константи`новны
Константинос=Константи`нос
Константинопольского=Константино`польского
И так, и эдак ошибка ударения. Что-то в этом мире спроектировано неверно.
Сокращение и пробелы, это независимые операции. Тоже похожее есть. Вынесено в отдельный словарь prepare.