Балаболка TTS
Модератор: balabolka
- IgorItkin
- Интересующийся
Балаболка TTS
Hi, maybe this was already asked. I am using a voice from Cere Voice. There is long pause at the comma ",". Is there a way to shorten the pause without deleting the the comma in the dictionary? I mean, there should be a pause but it should be shorter. Is this possible?
Thank you!
Thank you!
- good_cat
- Администратор
Балаболка TTS
The language of communication on the forum is Russian. You can use Google Translate if needed.
Язык общения на форуме - русский. При необходимости вы можете использовать Google Translate.
Язык общения на форуме - русский. При необходимости вы можете использовать Google Translate.
- balabolka
- V.I.P.
Балаболка TTS
1. Файл настроек голоса CereVoice.
Если нужно изменить паузу после запятой именно для голосов от компании CereProc, то, насколько я помню, можно просто отредактировать файл настроек PBREAK.TXT внутри установленного голоса. (Раньше этого было достаточно; что касается последних версий их голосов - надо проверять.)
Файл PBREAK.TXT лежал здесь (для английских голосов):
c:\Program Files (x86)\CereProc\<voice_name>\veng_db\en\norm\
Внимание! Прежде чем редактировать файл, сохраните его копию во временной папке!
В файле PBREAK.TXT прописаны паузы после и до знаков препинания, в том числе и для запятой:
Код: Выделить всё
, 3 0.200 0 0.000
2. Окно настроек программы для чтения вслух.
Каких-либо специальных настроек для увеличения пауз после запятых в программе "Балаболка" нет (и я пока не собираюсь добавлять такую возможность). Рекомендую использовать программу "TextAloud": там есть такой раздел в окне настроек.
3. Правило для коррекции произношения.
В "Балаболке" можно использовать словарь для коррекции произношения, чтобы изменить паузу после запятой. Надо добавить правило, которое в тексте будет заменять символ "," на тег паузы:
Код: Выделить всё
<silence msec="100"/>
- IgorItkin
- Интересующийся
Балаболка TTS
Спасибо, 3. Шаг работает. Сожалению в первом шаги pbreak не существует. А можно паузу поставить только на определенный голос?
- balabolka
- V.I.P.
Балаболка TTS
Нет, такая возможность в "Балаболке" недоступна.
Увы, в текущей версии голосов CereProc отдельных файлов конфигурации больше нет. Раньше омографы, аббревиатуры, паузы, правила чтения дробей, римских чисел, дат и т.д. - всё это было доступно для редактирования, всё лежало в папке голоса в виде текстовых файлов или исходников на Python. Теперь есть лишь один огромный файл с расширением .VOICE. Это база данных собственного формата CereVoice.
Однако, изменить длительность паузы после запятой можно и сейчас. В конце этого огромного файла указаны смещения для наборов данных, и там есть значение смещения для раздела PBREAK.
Например: TPOBJ_PBREAK:DEFAULT = 1817451.
Если в двоичном редакторе перейти по этому смещению, можно найти всё те же знаки препинания, что были в старом файле PBREAK.TXT, а рядом с ними - порядковые номера ячеек, где хранятся значения пауз для каждого знака (в миллисекундах). Таблица значений идет следом за списком знаков препинания. Если знать, что знаки препинания идут в таком порядке:
Код: Выделить всё
.!?,-()[];:"
Код: Выделить всё
90 01 00 00 90 01 00 00 90 01 00 00 C8 00 00 00 C8 00 00 00
Внимание! Прежде чем редактировать файл .VOICE, сохраните его копию во временной папке.
- balabolka
- V.I.P.
Балаболка TTS
IgorItkin
For CereVoice the default length of pause at a comma is 200 milliseconds (hexadecimal value = C8). If you want to change this value, it is necessary to modify one byte in a voice file.
For CereVoice the default length of pause at a comma is 200 milliseconds (hexadecimal value = C8). If you want to change this value, it is necessary to modify one byte in a voice file.
- Copy the .VOICE file to a temporary folder (always make a backup before updating).
- Open the .VOICE file in the hex editor (for example, freeware hex editor XVI32).
- Find the hex string in the file:
90 01 00 00 90 01 00 00 90 01 00 00 C8 00 00 00 C8 00 00 00 - Modify the bold value to decrease a pause after commas (for example, "64" = 100 milliseconds).
- Save changes, exit the hex editor and restart Balabolka.
- IgorItkin
- Интересующийся
- IgorItkin
- Интересующийся
Балаболка TTS
Я пытался найти эту строчку с помощью XVI32, но он пишет hex string not found. Я нашёл PBREAK:DEFAULT=2074020. Что мне нужно сделать?
- balabolka
- V.I.P.
Балаболка TTS
IgorItkin
Какое имя файла, в котором Вы выполняете поиск? Может быть, что-то изменилось в 6-ой версии речевого движка.
Используйте пункт главного меню "Address|Goto", укажите десятичное (decimal) значение "2074020". Перейдите к разделу PBREAK.
Какое имя файла, в котором Вы выполняете поиск? Может быть, что-то изменилось в 6-ой версии речевого движка.
Используйте пункт главного меню "Address|Goto", укажите десятичное (decimal) значение "2074020". Перейдите к разделу PBREAK.
- IgorItkin
- Интересующийся
Балаболка TTS
я очень извиняюсь но как то до меня не доходит что мне надо теперь делать. У меня не какова опыта нету с hex Editor. Я сделал последний шаг с go to и нахожусь теперь здесь.
- Вложения
-
- what now.png (573.34 КБ) 6337 просмотров
- balabolka
- V.I.P.
Балаболка TTS
IgorItkin
Видимо, для английского и немецкого языков используются разные паузы после знаков препинания. Это хорошо, а то начало казаться, что разработчики тупо использовали одни и те же круглые числа для задания всех пауз для всех голосов.
Ожидание: разработчики для каждого голоса подбирают значения пауз с точностью до миллисекунды, консультируются с лингвистами, проводят прослушивания аудиозаписей с участием профессиональных дикторов.
Реальность: для английского языка пауза после точки 400 мс, для немецкого 600 мс. Почему? По кочану.
На скриншоте отметил те ячейки, в которых хранятся значения пауз для знаков препинания. Символы идут в таком порядке:
По четыре байта на каждый символ. Точка - 600 мс (58 02), затем значение для восклицательного знака, вопросительного знака, запятой (64). Ткните курсором мышки в ячейку со значением "64" и напечатайте свои два символа (например, "32"; это 50 мс). Всё, сохраните изменения и закройте редактор.
Видимо, для английского и немецкого языков используются разные паузы после знаков препинания. Это хорошо, а то начало казаться, что разработчики тупо использовали одни и те же круглые числа для задания всех пауз для всех голосов.
Ожидание: разработчики для каждого голоса подбирают значения пауз с точностью до миллисекунды, консультируются с лингвистами, проводят прослушивания аудиозаписей с участием профессиональных дикторов.
Реальность: для английского языка пауза после точки 400 мс, для немецкого 600 мс. Почему? По кочану.
На скриншоте отметил те ячейки, в которых хранятся значения пауз для знаков препинания. Символы идут в таком порядке:
Код: Выделить всё
.!?,-()[];:"
- IgorItkin
- Интересующийся
- balabolka
- V.I.P.
Балаболка TTS
Хм, странно. И что, вообще никаких изменений - если поменять значение в большую сторону, например? Вы убрали из словарей все правила, которые удаляют или заменяют запятую (или отключили словари в "Балаболке")?
Сколько вариантов голоса у Вас установлено? (Голоса CereVoice можно установить в 3 вариантах.) Какой именно файл указан в этом ключе системного реестра (параметр VoiceFile):
Код: Выделить всё
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Speech\Voices\Tokens\CereVoice Alex 6.0.0\Attributes
Какое значение Вы установили для паузы после запятой? Исходное значение 100 мс (64) - сама по себе маленькая величина. Надо использовать паузу 10 мс (0A) или меньше, тогда разница сразу будет заметна на слух.
- balabolka
- V.I.P.
Балаболка TTS
Проверил файл cerevoice_alex_6.0.0_48k_standard.voice: значение для паузы после запятой находится по адресу 2074463 (четыре байта, 64 00 00 00). Менял значения, сохранял файл - длина паузы каждый раз меняется.
- balabolka
- V.I.P.
Балаболка TTS
IgorItkin
Получил ответ от службы поддержки CereProc: для изменения настроек пауз после и до знаков препинания можно использовать файл user_pbreak.txt в той же папке, где находится файл .VOICE.
Вот пример файла с паузами для английского языка (это тот же файл, что был в старых версиях голосов; поменялось только имя). Если требуется изменить только длину паузы после запятой, удалите строки с другими символами и оставьте строку с запятой.
Получил ответ от службы поддержки CereProc: для изменения настроек пауз после и до знаков препинания можно использовать файл user_pbreak.txt в той же папке, где находится файл .VOICE.
Вот пример файла с паузами для английского языка (это тот же файл, что был в старых версиях голосов; поменялось только имя). Если требуется изменить только длину паузы после запятой, удалите строки с другими символами и оставьте строку с запятой.
- Вложения
-
- user_pbreak.zip
- (386 байт) 118 скачиваний
- wasyaka
- V.I.P.
Балаболка TTS
Всё хорошо - идём ко дну?balabolka писал(а): ↑12 авг 2018 15:21API-ключ для сервиса "Яндекс.Переводчик" был убран, так как 15 августа 2020 года "Яндекс" закрыл бесплатный доступ к этому сервису. Теперь сервис перевода входит в состав "Яндекс.Облака", и он платный (450 руб. за перевод мегабайта текста). Добавлять поддержку платного сервиса я пока не собираюсь
Yandex SpeechKit - приближается к этому?
(Ваше мнение)?
Пы СЫ
Яндекс Переводчик в Яндексе у меня денег не просит...
Это привязка к местности или...?
- Dimsok
- Постоялец
Балаболка TTS
При переводе текста в аудио не получается сделать это только с одной главой (хотя только напротив неё ставится галочка). Так и задумано?
Возможно ли добавления опции: в настройках аудио указать аудио файл, который звучал бы в приглушённом виде и зацикленном состоянии на фоне?
В старых версиях в пункте "сервис" имелась опция "повторить текст". Можно это вернуть? Возможно использовать словарь, но...
В настройке своих программ для импорта текста не работает переменная temp? С тессерактом без этого не выходит (файл текста по умолчанию txt), поэтому одним %Output% обойтись не получается, и приходится задавать команду:cmd /c ""C:\Program Files\DjVuLibre\ddjvu2.exe" -showpage -format=tif %Input% "c:\DOCUME~1\Dimsok\Local Settings\Temp\bal.tif" && "c:\Program Files\SubtitleEdit\Tesseract302\tesseract 3.05" --tessdata-dir "c:\Program Files\SubtitleEdit\Tesseract302\tessdata" "c:\DOCUME~1\Dimsok\Local Settings\Temp\bal.tif" -l eng+rus "c:\DOCUME~1\Dimsok\Local Settings\Temp\balabolka" %Output% && del "c:\DOCUME~1\Dimsok\Local Settings\Temp\bal.tif". Так что было бы неплохо, если бы была возможность задать временную папку более лаконично.
В той же настройке импорта хотелось бы иметь возможность задавать больше одного расширения для одной команды. И возможность быстро их отключать и включать (галочки?) для всех, а не только для тех расширений, которые Балаболка поддерживает по умолчанию.
При извлечении текста (тем же Тессерактом) и закрытии и открытии программы, снова приходится ждать, пока случится распознавание. С опцией сохранения извлечённого текста и его открытия при запуске было бы проще.
Возможно ли добавления опции: в настройках аудио указать аудио файл, который звучал бы в приглушённом виде и зацикленном состоянии на фоне?
В старых версиях в пункте "сервис" имелась опция "повторить текст". Можно это вернуть? Возможно использовать словарь, но...
В настройке своих программ для импорта текста не работает переменная temp? С тессерактом без этого не выходит (файл текста по умолчанию txt), поэтому одним %Output% обойтись не получается, и приходится задавать команду:cmd /c ""C:\Program Files\DjVuLibre\ddjvu2.exe" -showpage -format=tif %Input% "c:\DOCUME~1\Dimsok\Local Settings\Temp\bal.tif" && "c:\Program Files\SubtitleEdit\Tesseract302\tesseract 3.05" --tessdata-dir "c:\Program Files\SubtitleEdit\Tesseract302\tessdata" "c:\DOCUME~1\Dimsok\Local Settings\Temp\bal.tif" -l eng+rus "c:\DOCUME~1\Dimsok\Local Settings\Temp\balabolka" %Output% && del "c:\DOCUME~1\Dimsok\Local Settings\Temp\bal.tif". Так что было бы неплохо, если бы была возможность задать временную папку более лаконично.
В той же настройке импорта хотелось бы иметь возможность задавать больше одного расширения для одной команды. И возможность быстро их отключать и включать (галочки?) для всех, а не только для тех расширений, которые Балаболка поддерживает по умолчанию.
При извлечении текста (тем же Тессерактом) и закрытии и открытии программы, снова приходится ждать, пока случится распознавание. С опцией сохранения извлечённого текста и его открытия при запуске было бы проще.
- OlgaLoagSinclair
- Интересующийся
Балаболка TTS
День добрый. И я с просьбой о маленькой (надеюсь) доработке
В разделе "Преобразовать субтитры" на закладке "Настройки" есть галочка "Автоматически увеличивать скорость...". Так вот, можно ее снимать при выборе голоса, отличного от текущего? Или (если установлена) ставить значение максимальной скорости, равное текущему значению обычной скорости для этого голоса? Так было бы даже лучше.
В идеале, конечно, добавить настройку максимальной скорости в список сохраняемых настроек профиля голоса
А то настройка эта на второй закладке, не особо видна... вечно забываю ее настраивать.
В разделе "Преобразовать субтитры" на закладке "Настройки" есть галочка "Автоматически увеличивать скорость...". Так вот, можно ее снимать при выборе голоса, отличного от текущего? Или (если установлена) ставить значение максимальной скорости, равное текущему значению обычной скорости для этого голоса? Так было бы даже лучше.
В идеале, конечно, добавить настройку максимальной скорости в список сохраняемых настроек профиля голоса
А то настройка эта на второй закладке, не особо видна... вечно забываю ее настраивать.
- balabolka
- V.I.P.
Балаболка TTS
Хорошо, буду сохранять эту настройку для каждого голоса отдельно. Спасибо за идею (не знал, что есть такая проблема).OlgaLoagSinclair писал(а): ↑02 окт 2020 09:49В разделе "Преобразовать субтитры" на закладке "Настройки" есть галочка "Автоматически увеличивать скорость...".
Для голосов SAPI 4 настройка не используется.
- balabolka
- V.I.P.
Балаболка TTS
Да, весь текст целиком преобразуется в звуковые файлы. "Галочки" влияют лишь на способ разбиения текст на части.
Если нужно сохранить как звуковой файл только одну главу, могу посоветовать скопировать текст главы и вставить как новую вкладку в текстовом редакторе программы. Другого способа в "Балаболке" нет.
Нет, пока не планирую добавлять такую опцию. Используйте утилиты вроде FFmpeg или SoX для обработки звуковых файлов, созданных в "Балаболке".
Необходимо запустить утилиту FFmpeg, например, с такими параметрами в командной строке (пишу по памяти, поэтому перед использованием надо проверить в документации):
Код: Выделить всё
ffmpeg -i speech.mp3 -filter_complex "amovie=background.wav:loop=999,volume=0.1[s];[0][s]amix=duration=shortest" output.mp3
- balabolka
- V.I.P.
Балаболка TTS
В моей программе нет такой переменной. Не уверен, что есть необходимость добавлять ее поддержку: ничто не мешает пользователю создать папку для временных файлов с коротким путем.
Код: Выделить всё
e:\tmp
- balabolka
- V.I.P.
Балаболка TTS
Не знаю, спорное предложение. Есть много пользователей (в том числе слабовидящих), которым будет сложно разобраться с этими настройками. Обещаю подумать еще над Вашей идеей.
- balabolka
- V.I.P.
Балаболка TTS
Такова концепция моей программы. "Балаболка" каждый раз заново извлекает текст из файла.
Есть программы, которые извлекают текст из документа и сохраняют как новый текстовый файл рядом со старым файлом.
Есть программы, которые извлекают текст и записывают его в глобальное хранилище (вместе с дополнительной информацией - например, когда и из какого документа извлечен текст).
Моя программа ничего не сохраняет на диске: текст, извлеченный из документа, хранится в памяти компьютера и хранится лишь пока запущена программа. Если необходимо записать текст в файл, пользователь самостоятельно должен выполнить это действие.
У каждого подхода есть свои достоинства и недостатки. Спорить здесь бессмысленно; пользователь просто должен выбрать ту программу, которая его больше устраивает. (Возможно, когда-нибудь попробую предоставить выбор пользователям того способа, который им нужен; но пока этого нет в моих планах.)
- wasyaka
- V.I.P.
Балаболка TTS
► Показать
При вкл словаре hmg- заменяется омограф на выбраный двойной щелчок + ПКМ - удобно
при добавлении фразы в словарь (Ctrl+B )в словаре менять ударение приходится вручную,- не удобно
а зделать так- двойной щелчок + ПКМ???
- Dimsok
- Постоялец
Балаболка TTS
v2.15.0.754. При преобразовании в аудио книги с тэгами, созданными с помощью опции прямой речи, через некоторое время работа приостанавливается - неопознанная ошибка. Полностью книгу удалось преобразовать в аудио за три подхода (с возобновлением с той главы, на которой завершилось ошибкой). Пробовал на других книгах, вроде такой проблемы не наблюдается. Возможно оттого, что в книге много раз приходится менять голосовые движки?
- balabolka
- V.I.P.
Балаболка TTS
Ищите то место в тексте, где происходит сбой записи. Номер главы книги известен; не думаю, что текст главы большой по размеру. Можно будет понять, что не понравилось речевому движку.
Скорее всего, проблема в незакрытом теге. Программа пишет текст частями, то есть делит текст на "порции" и отправляет каждую порцию в буфер голоса. В свою очередь, теги тоже делят текст на "порции". Если открывающий тег оказался в одной порции текста, а закрывающие тег - в другой, голос выдаст сообщение об ошибке. Надо найти это место в тексте и разобраться, что пошло не так.
- Lecron
- Специалист
Балаболка TTS
Сразу уточню, это не запрос фичи, а идея возможного развития.
Понемногу ковыряясь с собственным Корректором, заметил что некоторые вещи нельзя решить не только подстановкой, но даже регуляркой. Нужен код для преобразования.
Допустим римские цифры 30-ю правилами на 99+% можно перевести в арабские. Цифры с окончанием (ХХ-й, ХХI-ого) просклонять уже труднее. Возможных окончаний {'х', 'ому', 'ого', 'ый', 'ая', 'ое', 'ему', 'м', 'и', 'го', 'его', 'у', 'ых', 'й', 'ым', 'ми', 'ою', 'е', 'ими', 'ую', 'ые', 'ом', 'ю', 'ыми', 'ой', 'им', 'я', 'ей', 'их', 'му'} ажно 30 штук. Пусть скриптом, но словарь на 900 правил создать можно. Но тут появляются арабские 80-ого, 101-й, 2000-м. А за ними идут цари! Александра III (третьего), Елизавете II (второй), Людовиком VI (шестым).
Скриптом же, с учетом что например для Питона есть PyMorphy2, это решается четырьмя правилами и сравнительно небольшим куском кода.При определенной фантазии, можно делать транслитерацию латиницы в русские "звуки" , перевод и фиг еще знает что.
Внедрение скриптовых языков в компилируемые программы, вещь непростая, но и не слишком сложная. После реализации такого АПИ, больше не потребуется изменение программы для внесения многих запросов. Да, пользователю нужны будут знания программирования. Но скорее всего, начнут появляться на форуме(ах) уже готовые плагины/рецепты.
Понемногу ковыряясь с собственным Корректором, заметил что некоторые вещи нельзя решить не только подстановкой, но даже регуляркой. Нужен код для преобразования.
Допустим римские цифры 30-ю правилами на 99+% можно перевести в арабские. Цифры с окончанием (ХХ-й, ХХI-ого) просклонять уже труднее. Возможных окончаний {'х', 'ому', 'ого', 'ый', 'ая', 'ое', 'ему', 'м', 'и', 'го', 'его', 'у', 'ых', 'й', 'ым', 'ми', 'ою', 'е', 'ими', 'ую', 'ые', 'ом', 'ю', 'ыми', 'ой', 'им', 'я', 'ей', 'их', 'му'} ажно 30 штук. Пусть скриптом, но словарь на 900 правил создать можно. Но тут появляются арабские 80-ого, 101-й, 2000-м. А за ними идут цари! Александра III (третьего), Елизавете II (второй), Людовиком VI (шестым).
Скриптом же, с учетом что например для Питона есть PyMorphy2, это решается четырьмя правилами и сравнительно небольшим куском кода.
Код: Выделить всё
\b[А-Я]\w+?\s[IVXLCDMХСМ]+=declension_entity (зная падеж и род, ставим окончание)
[IVXLCDMХСМ]{2,}=roman2digit
[IVXLCDMХСМ]+-[а-я]{1,3}=declension_roman (преобразует с учетом окончания в "третьего")
\d+-[а-я]{1,3}=declension_arabian
Внедрение скриптовых языков в компилируемые программы, вещь непростая, но и не слишком сложная. После реализации такого АПИ, больше не потребуется изменение программы для внесения многих запросов. Да, пользователю нужны будут знания программирования. Но скорее всего, начнут появляться на форуме(ах) уже готовые плагины/рецепты.
- tonio_k
- V.I.P.
Балаболка TTS
я пользуюсь http://www.aot.ru/demo/morph.html для генерации склонений. А существует локальное решение для ПК? Что бы я ввел слово и тебе программка сгенерировла список слов во всех возможных падежах?
- Lecron
- Специалист
Балаболка TTS
Совсем-совсем готовое — не встречал. Но PyMorphy может склонять https://pymorphy2.readthedocs.io/en/0.7/user/guide.html. Всего за 4 строки в консоли
Код: Выделить всё
import pymorphy2
morph = pymorphy2.MorphAnalyzer()
token = morph.parse('ваше_слово')[0]
token.lexeme
- balabolka
- V.I.P.
Балаболка TTS
Не считаю нужным идти по этому пути развития своей программы (по крайней мере, сейчас).Lecron писал(а): ↑07 окт 2020 14:04Внедрение скриптовых языков в компилируемые программы, вещь непростая, но и не слишком сложная. После реализации такого АПИ, больше не потребуется изменение программы для внесения многих запросов. Да, пользователю нужны будут знания программирования. Но скорее всего, начнут появляться на форуме(ах) уже готовые плагины/рецепты.
Есть набор консольных утилит, реализующих основные функции "Балаболки". Поэтому можно писать программы на других языках, используя эти утилиты по мере надобности. В будущем могу добавлять новые функции в консольные программы (или создавать новые утилиты). Это тот подход, на который рекомендую ориентироваться (ну, и мне так проще, разумеется).
- Lecron
- Специалист
Балаболка TTS
На первый взгляд подход разумный. Но разбить процесс не выйдет.
Чтобы это обработать на стороне, там потребуется повторно реализовать движок загрузки, разбора и применения правил. А так как логика коррекции может потребовать их чередования rex/callable_rex/rex/callable/.... количество проблем с поэтапной обработкой только вырастет. Так что либо прозрачная поддержка callable_rule в rex-движке (без разницы стороннем или вашем), либо никак.
PS. А для использующих ваш bxd-формат c чередующимися rex/dic, задача может стать вовсе трудно разрешимой.
- balabolka
- V.I.P.
Балаболка TTS
То, что Вам нужно, всё равно не реализовать в рамках "Балаболки" или другой программы для чтения вслух. Придется писать собственный программный код и, скорее всего, использовать собственные форматы хранения данных. Существующие форматы словарей не помогут Вам, а будут только ограничивать возможности Вашего программного кода.
А уже потом то, что будет создано, можно использовать для импорта текста в "Балаболку", как внешнее приложение.
По сути, "Балаболка" выполняет только 4 функции:
- Извлекает текст из файла.
- Делит текст на части (если необходимо).
- Применяет правила коррекции произношения (если необходимо).
- Преобразует в звуковые файлы или читает вслух.
- Lecron
- Специалист
Балаболка TTS
Не мне. Вообще! То что пользователи об этом не думают, скорее связано с шаблонами мышления, сформированными существующими решениями.
Так как я пишу на Питоне, такая возможность реализована за 20 строк, из которых половина ушла на обработку исключений отсутствия модуля или функции указанной в словаре.
Код — несомненно. Но задач не так много и будут появляться готовые плагины/модули.
Обратная совместимость немного теряется. Понадобится модификатор для обозначения callable_rex правила. Например @ в начале строки замены (правая часть правила после равно).
Не совсем так, а может и совсем не так.
Требуется чтобы у правила, строка замены была динамической. Генерировалась в зависимости от текста найденного регулярным выражением. Примеры уже приводил. В первую очередь склонение числительных, в зависимости от окончания (ХХ-й — двадцатый, 80-ого — восьмидесятого, 101-й, 2000-м — двухтысячным) или от сопутсвующей словоформы (ХХ века — двадцатого, Александру III — третьему, 10 рублями — десятью).
Пример для царей: \b[А-Я]\w+?\s[IVXLCDMХСМ]+=declension_dynast
Если провести аналогию, когда одна регулярка может заменить несколько десятков dic правил, то здесь, одна вычисляемая регулярка заменяет несколько десятков обычных rex-правил и/или существенно их упрощает.
- tonio_k
- V.I.P.
Балаболка TTS
Путано немного.
Скрипты это автоматизация одних и тех же действий. Можно (для примера) выложить цепочку превращений?
Допустим найти в тексте Павел I по маске регулярного выражения, к найденному добавить какой то текст через какой то разделитель, применить к полученному другое регулярное выражение или открыть словарь, найти в нём какие то правила, временно добавить к ним что то и применить модифицированный словарь
это правило вместо Александр I или Павел V превратит обоих в declension_dynast
Скрипты это автоматизация одних и тех же действий. Можно (для примера) выложить цепочку превращений?
Допустим найти в тексте Павел I по маске регулярного выражения, к найденному добавить какой то текст через какой то разделитель, применить к полученному другое регулярное выражение или открыть словарь, найти в нём какие то правила, временно добавить к ним что то и применить модифицированный словарь
делать автоматические замены в регулярках очень опасное занятие. Тут нужно весь словарь записывать по определенным правилам, что бы автоматические замены не сломали ничего. Можно сделать замены временные на время действия скрипта применить изменённые правила, а сам словарь при этом не сохранять.
- Lecron
- Специалист
Балаболка TTS
(понурив голову и шаркая ножкой) Вы бы хоть читали внимательно, а не вырывали из контекста.
declension_dynast это функция, в которую будет передано найденное выражение.
"В гости к Павлу V пришел Александр I."
Правило найдет два вхождения. В первый раз вызовет функцию declension_dynast(Павлу V), которая вернет "Павлу пятому", во второй declension_dynast(Александр I) с результатом "Александр первый".
Результат "В гости к Павлу пятому пришел Александр первый."
Что может сломать это правило? Оно или найдет "Имя РИМСК" и все хорошо, или не найдет и ничего не будет.
Скорее вы напутаете в череде таких
Код: Выделить всё
(\w+ете|\w+ины|\w+иной|\w+той|\w+ины|\w+лле)\s+([IVXLCDMХСМ]+)([^\w-])=$1 $2-ой$3
(\w+ету|\w+ину|\w+ллу)\s+([IVXLCDMХСМ]+)([^\w-])=$1 $2-ую$3
(\w+на|\w+та|\w+лла)\s+([IVXLCDMХСМ]+)([^\w-])=$1 $2-ая$3
- tonio_k
- V.I.P.
Балаболка TTS
так я только контекстно что то знакомое вижу и реагирую не видя пока общей картины и пытаюсь понять через призму своих знаний.
Мы сейчас ветку балаболки засорим пока вы мне будете пытаться объяснить свою задумку.
Давайте сюда переедем
- Lecron
- Специалист
Балаболка TTS
tonio_k, не настаиваю и не уговариваю. Стояла цель поделится идеей фичи (регулярка с динамической генерацией строки замены) и описать ее пользу. Цель достигнута. Сейчас пошло обсуждение реализации, а не самой идеи. Я это вижу так. (можно скопировать код в online REPL и проверить работу).
ВСЁ!!! Проще не придумаешь. Такое причесывание текста не нужно? Или предпочитаете удалять гланды через ж? Ну и прекрасно, если все устраивает.
ЗЫ. Обсуждение развития rex-правил в теме про омографы? Оригинально)))
Код: Выделить всё
import re
def replace_func(m):
print('call replace func')
name, num = m.groups()
return f'{num} {name}'
text = 'В гости к Павлу V пришел Александр I.'
text = re.sub(r'\b([А-Я]\w+?)\s([IVXLCDMХСМ]+)', replace_func, text)
print(text)
ЗЫ. Обсуждение развития rex-правил в теме про омографы? Оригинально)))
- Lecron
- Специалист
Балаболка TTS
Не знаю от программы зависит или от движка. Когда встречаются слова с двумя дефисами, Ростов-на-дону, Волан-де-морт и т.д., есть шанс потерять средний слог Ростов-дону, Волан-морт. Кажется происходит, когда этим словом (без финального знака препинания) заканчивается порция текста передаваемая движку. В основном окне такое редкость, а вот при прослушивании Новых имен так всегда.
- balabolka
- V.I.P.
- Lecron
- Специалист
Балаболка TTS
Текст и звук. Голос Loquendo Olga.
Насколько разумно при прослушивании Имен, отправлять движку финиширующую точку? Получим как-бы предложение из одного слова.
- wasyaka
- V.I.P.
Балаболка TTS
Wasyaka больше писать не будет . Удачи!wasyaka писал(а): ↑04 окт 2020 20:572020-10-04_202818.png (45.82 КБ) 512 просмотров
При вкл словаре hmg- заменяется омограф на выбраный двойной щелчок + ПКМ - удобно
2.png (69.44 КБ) 512 просмотров
при добавлении фразы в словарь (Ctrl+B )в словаре менять ударение приходится вручную,- не удобно
5.png (131.07 КБ) 512 просмотров
а зделать так- двойной щелчок + ПКМ???
- Dimsok
- Постоялец
Балаболка TTS
При создании одного файла mp4 с частями-главами и лирикой возможно ли сделать опциональную настройку, позволяющую создавать не один общий lrc файл, а столько, сколько частей (именуются по имени части и с новым временем).
- balabolka
- V.I.P.
Балаболка TTS
Dimsok
А зачем?! Есть плееры, которые умеют переключаться между разными LRC-файлами при проигрывании одного аудиофайла? Или MP4-файл будет модифицирован в видеоредакторе? Расскажите поподробнее, пожалуйста.
Теоретически добавить такую настройку можно, но хотелось бы быть уверенным, что это будет реально нужная функция, а не какая-то экзотика. Создать LRC-файлы для глав книги можно и сейчас, вручную: найти в общем файле текст главы, вырезать его и сохранить как новый LRC-файл.
А зачем?! Есть плееры, которые умеют переключаться между разными LRC-файлами при проигрывании одного аудиофайла? Или MP4-файл будет модифицирован в видеоредакторе? Расскажите поподробнее, пожалуйста.
Теоретически добавить такую настройку можно, но хотелось бы быть уверенным, что это будет реально нужная функция, а не какая-то экзотика. Создать LRC-файлы для глав книги можно и сейчас, вручную: найти в общем файле текст главы, вырезать его и сохранить как новый LRC-файл.
- Dimsok
- Постоялец
Балаболка TTS
foobar2000 с соответствующим плагином для просмотра лирики (тот, что от кит. производителя) позволяет добавлять лирику перетаскиванием её в окно просмотра. И потом через эту же программу (или например, aimp) всегда можно нарезать один файл на отдельные файлы-главы и потом использовать с ними эти файлы лирики. А как иначе сделать так, чтобы один lrc файл был синхронен с началом новой закладки/главы? Время должно обнуляться.
- balabolka
- V.I.P.
Балаболка TTS
Ничего не понимаю. В "Балаболке" можно поделить книгу на части (главы) и создать несколько звуковых файлов. Для формата MP4 можно объединить звуковые файлы в один аудиофайл, можно не объединять. Соответственно, "Балаболка" создаст либо несколько файлов формата LRC, либо создаст один общий файл.
Как я понял, Вы создаете единый файл формата MP4, а потом сами делите его на части. Не надо этого делать: создавайте изначально в "Балаболке" набор звуковых файлов формата MP4 вместо одного общего аудиофайла.
Здесь две проблемы:
- Мне всё еще не ясен смысл Ваших манипуляций со звуковым файлом.
- При создании набора файлов формата LRC придется что-то выдумывать для имен файлов. Нельзя просто использовать имя главы, как Вы предлагаете: многие книги содержат имена вроде "Часть первая", "Глава первая", "Глава вторая", "Часть вторая", "Глава первая", "Глава вторая", так что на диске будет несколько файлов с именем "Глава первая.lrc". Нужен какой-то шаблон для имен, нужна нумерация файлов формата LRC и т.д. То есть, в программу придется добавлять новые настройки для функции, смысл которой непонятен даже мне самому.
- Dimsok
- Постоялец
Балаболка TTS
Я хочу создать один файл m4a/m4b с закладками\главами. Но в этом случае создаётся один общий lrc файл, который можно использовать в тех программах, которые не распознают закладки и воспроизводят аудиофайл как один. С такими программами файл лирики будет синхронен. А как быть с foobar2000 и aimp, которые при добавлении этого mp4 открывают его в плейлисте в виде отдельных файлов\глав? Лирика будет синхронна лишь при проигрывании первого. Вот и хотелось бы иметь для одного файла mp4 набор lrc файлов, чтобы каждый из них соответствовал отдельной главе (для возможности ручного добавления в foobar или на случай последующего деления m4a на отдельные файлы).
- Dimsok
- Постоялец
- Lecron
- Специалист
Балаболка TTS
Давно не пользовался, но когда лирика интегрирована в ID3 теги, проблем с главами m4a не было.
- balabolka
- V.I.P.
Балаболка TTS
Не нравится идея, что надо добавлять что-либо вручную. Сейчас для foobar2000 использую плагин ESLyric: когда воспроизводятся файлы "file1.mp3", "file2.mp3", "file3.mp3", плагин показывает тексты из файлов "file1.lrc", "file2.lrc", "file3.lrc". Файлы подгружаются автоматически.
С плагинами проблема в том, что они ищут подходящие файлы по тегам внутри файлов формата LRC (исполнитель, название, альбом). Когда "Балаболка" делит текст книги на части и записывает звуковые файлы, в теги всех LRC-файлов записывается одно и то же название книги, один и тот же исполнитель и т.д. Так что, плагин должен уметь искать LRC-файлы по имени файла на диске, а не только по тегам внутри файла.
- tonio_k
- V.I.P.
Балаболка TTS
До сих пор не могу понять как подружить Николая с Балаболкой. Допустим текст
Приют св. Иоанна
После словарей (показать измененный текст) получаем текст
Приют свято<во иоа<нна
Если этот изменённый текст я вставлю в Демагоге если укажу в настройках "игнорировать тэги sapi5", то Николай этот текст прекрасно читает. А вот в Балаболке не хочет (доходит до первого или второго символа ударения < и чтение Николаем прерывается не дочитав до конца)
Демагог (думаю и Балаболка) Николая считают как голосовой движок sapi5 и символы <> считают тэгами.
В Балаболке пункт игнорировать тэги sapi5 я не нашел.
Как объяснить Балаболке что Николай хоть и sapi5 но символы <> в нём надо считать ударениями а не тэгами?
Приют св. Иоанна
После словарей (показать измененный текст) получаем текст
Приют свято<во иоа<нна
Если этот изменённый текст я вставлю в Демагоге если укажу в настройках "игнорировать тэги sapi5", то Николай этот текст прекрасно читает. А вот в Балаболке не хочет (доходит до первого или второго символа ударения < и чтение Николаем прерывается не дочитав до конца)
Демагог (думаю и Балаболка) Николая считают как голосовой движок sapi5 и символы <> считают тэгами.
В Балаболке пункт игнорировать тэги sapi5 я не нашел.
Как объяснить Балаболке что Николай хоть и sapi5 но символы <> в нём надо считать ударениями а не тэгами?