Зависимость произношения от номера строки

Программа "Балаболка" предназначена для воспроизведения звуков человеческого голоса с использованием любого речевого синтезатора, установленного на компьютере.

Модератор: balabolka

Ответить
Аватара пользователя
mathem
Постоялец

Зависимость произношения от номера строки

#1

Сообщение mathem »

Здравствуйте! Помогите, пожалуйста, разобраться. Вот, когда я задаю произношение слова "строке" по фонемам как "s t rr a k s1 e" все работает тогда и только тогда, когда это задание стоит в файле sample.bxd в строке с номером больше 93. Как только это условие нарушается. возникает ошибка "Ошибка синтезирования речи: Параметр задан неверно". Можно ли это как-то устранить? Дело в том, что это не единственное слово, вызывающее подобную ошибку.

Аватара пользователя
balabolka
V.I.P.

Зависимость произношения от номера строки

#2

Сообщение balabolka »

mathem
Правила из словаря применяются последовательно, одно за другим. И каждое правило меняет текст. Проверьте остальные правила в списке, как они срабатывают. С помощью пункта главного меню "Показать измененный текст" проверьте то место, в котором при чтении происходит ошибка.

По моему опыту, SAPI 5 возвращает сообщение об ошибке "Параметр задан неверно", если фонемы в теге PRON были заданы для одного голоса, а в программе их читает другой голос (например, голос для другого языка). Но могут быть иные ситуации, когда появляется это сообщение об ошибке.

Аватара пользователя
mathem
Постоялец

Зависимость произношения от номера строки

#3

Сообщение mathem »

balabolka писал(а):
16 июн 2020 22:14
С помощью пункта главного меню "Показать измененный текст" проверьте то место, в котором при чтении происходит ошибка.
Слушайте, а ведь правда! Я это время копался. В результате теперь у меня тоже самое, только крутится это все 89. Как только это нарушается, там, где указали вы, становится вот так:

Код: Выделить всё

<pron sym="s тэ rr a k s1 e"/>
Очевидно, причина в этом: появляется кириллица.

Аватара пользователя
balabolka
V.I.P.

Зависимость произношения от номера строки

#4

Сообщение balabolka »

mathem
Спасибо, теперь понятно. Одно из правил заменяет латинскую букву на русскую, голос не может распознать такую "фонему" и возвращает ошибку "Параметр задан неверно" (параметром для атрибута XML-тега здесь является фонема).

Надо искать правила, похожие на эти (латинские буквы в левой части, русские буквы в правой):

Код: Выделить всё

t=тэ
a=а
e=е

Аватара пользователя
Lecron
Специалист

Зависимость произношения от номера строки

#5

Сообщение Lecron »

balabolka писал(а):
17 июн 2020 11:22
Одно из правил заменяет латинскую букву на русскую
Предложение: прекращать обработку после первого совпадения. Так работают многие алгоритмы — разбор route в веб-API, настройки nginx.
Не дело применять исправление к уже исправленному. Вероятность ошибки будет ниже, а управление заменой предсказуемее. Возможно будет польза для регэкспов и шаблонов. Плюс даст небольшое ускорение. Навскидку около 5%.
Если же вдруг понадобится некая общая замена, выносить в отдельный словарь и управлять последовательностью их применения. Я так лат H заменял на рус Н для старых фидошных текстов.

Аватара пользователя
balabolka
V.I.P.

Зависимость произношения от номера строки

#6

Сообщение balabolka »

Lecron
Нет, менять способ применения правил к тексту не стану. Это слишком серьезное изменение в программе: оно затронет много словарей, составленных пользователями.
Lecron писал(а):
17 июн 2020 15:10
Предложение: прекращать обработку после первого совпадения.
Прекращать обработку чего именно - буквы, слова, словосочетания, предложения, всего текста? Совпадение чего с чем - с буквой, словом, словосочетанием и т.д.?

Как я понимаю, сейчас многие словари как раз и рассчитаны на то, что к одному и тому же тексту будут последовательно применены разные правила из списка.
Например, вот реальный пример использования словаря. Исходный текст:

Код: Выделить всё

ул.  8 марта
Одно правило заменит двойной пробел на одинарный:

Код: Выделить всё

ул. 8 марта
Следующее правило уберет сокращение:

Код: Выделить всё

улица 8 марта
Последнее правило приведет словосочетание к окончательному виду:

Код: Выделить всё

улица Восьмого марта
Каждый раз изменения вносятся в один и тот же текст; так и было задумано составителем списка правил. (Разумеется, здесь очень важен порядок применения правил.)
Есть один нюанс. "Балаболка" применяет к тексту правило только один раз. Другие программы могут применять правило по несколько раз, снова и снова, каждый раз меняя текст, - до тех пор, пока правило выполняет хотя бы одну замену в тексте. Сложно сказать, какой способ эффективнее. (Я выбрал тот способ, который потребует меньше времени на выполнение.)

Аватара пользователя
mathem
Постоялец

Зависимость произношения от номера строки

#7

Сообщение mathem »

balabolka писал(а):
17 июн 2020 11:22
Надо искать правила, похожие на эти (латинские буквы в левой части, русские буквы в правой):
КОД: ВЫДЕЛИТЬ ВСЁ

t=тэ
a=а
e=е
Так это эти же замены будут применяться вообще ко всем латинским буквам? Мне такого не надо: в других местах нужно будет, чтобы определенные команды произносились по буквам.

Аватара пользователя
Lecron
Специалист

Зависимость произношения от номера строки

#8

Сообщение Lecron »

balabolka писал(а):
17 июн 2020 16:20
Прекращать обработку чего именно - буквы, слова, словосочетания, предложения, всего текста? Совпадение чего с чем - с буквой, словом, словосочетанием и т.д.?
Не знаю вашего алгоритма. Думаю вы меня поняли. Фиговое предложение, значит фиговое. Бывает. Обратная совместимость тяжелая ноша. Простите что отвлек.

Кстати, возвращаясь к недавней теме: при поиске новых имен, скрывать подходящие под шаблонные правила. Скриптом вытащил список слов, имеющих различное ударение, при совпадении первых 5 символов в левой части правил. Ужаснулся. 146 правил указывали на разночтение а-ля

Код: Выделить всё

Макферсона=Ма`кферсона
Макферсонов=Макфе`рсонов.
которых вроде бы можно избежать, при первом вхождении задав шаблонное правило. Однако несмотря на ужас, вынужден с вами согласиться. Также нашлись похожие на

Код: Выделить всё

Константиновны=Константи`новны
Константинос=Константи`нос
Константинопольского=Константино`польского
которые однозначно были бы ошибочно объединены под Константи`н*.
И так, и эдак ошибка ударения. Что-то в этом мире спроектировано неверно.
balabolka писал(а):
17 июн 2020 16:20
Например, вот реальный пример использования словаря.
Сокращение и пробелы, это независимые операции. Тоже похожее есть. Вынесено в отдельный словарь prepare.

Ответить

Вернуться в «Балаболка»